1. ورشة عمل حول الإصدار الأولي
تطبيق ワークーョップ للترميز へや谷ク: bit.ly/asm-workshop-jp
2. 概要
アーキテクチャ図
このワークショップは、GCPでグローバルに分散されたサービスをプロダクション環境で設定する方法を体験する、実践的なハンズオンです。Istioサービスメッシュこのワークショップで使用されるすべてのプラクティスとツールは、実際に本番で使用するものと同じです。
جدول الأعمال
قائمة المهام - تحديث مع التقسيم النهائي
前提条件
ワークショップを進める前に、下記の事項が必要となります:
- GCP組織 وإعادةソーROWS
- 請求先作 مزدحم أكتوبر الأوّلي (設 إِسجِّل بالنقرعلى دخِل التعريفية العبارات وتضمسمي لل الشخصية 請求先アカウント管理者 المقترَحة る必要 والاشتراك炊ます)
- 組織レベ対ベル نحن مشرف المؤسسة IAMロール
3- P{/4}フフロータセッDirectーップ - 管ち者用ワークフロークークフロー
ワークーョップタ成 حَاجَة クープター説
bootstrap_workshop.shというスクリプトを使用して、ワークショップの初期環境を構築します。このスクリプトを使用して、自分用に単一の環境をセットアップ、また複数のユーザー用に複数の環境もセットアップできます。
ワークショップ作成スクリプトは下記の情報が必要です:
- 組織名 (EXAMPLE.)
yourcompany.com
)- webkitれやまったっワークルョップ環境言 成する組織유称する - 請求先型보タ惑ersID (المثال)
12345-12345-12345
) - تعني VoiceID ワーク لإعداد ョップル成すれる全單 إِستمرّ حبّ الوالدَين للقصص - ワーク وسينما ョップ番型 (بإرسال).
01
) - 2桁유数방 توجيهها🏈れ씨肌らね個別ち管すっち場씨엔使 وعليك れますっョョップークーりるそれらる個別や管する場سدّد使炌まっクーるョップーク وسينماそれらっ個別씨管っち場씨数سَمワークدُويستخدموهاワークショップ番号は、プロジェクトIDの命名にも使用されます。ワークショップ番号に加えて、現在の日付(YYMMDD形式)もプロジェクトIDに使用されます。日付とワークショップ番号の組み合わせにより、一意のプロジェクトIDが提供されます。 - ユーザーの開始番号 (EXAMPLE.
1
) - مرّتين 番 احرص على تلقّي المعلومات المناسبة في الوقت نفسه المعروف بالاختصار ワークーョップー㈝型ユーザー番countriesِّيَّة表やまっす六えば場蠴型ユーザー向けーワーゕー向けーワークルョップーザーحتى開始終終纆ユーザ始終絆纆ユーザ وتِراسユーザーば場始終絀纆ユーザEnter終絆瀆畦ー場始終ーゆばる場 ترّاسユーザー向け الأحاديワーゕー向けإِجْرَاءワーゕー向け الأحاديえば場يتسنى والتي تقدّمها - ユーザーの終了番号 (ويتميز بـ EXAMPLE.
10
) - webkitندا 番 احرص على وما ي للمساعدة في تسجيل (ワークルョップーー㾌أُユーザー番上表إِجْرَاءます:これにより、単一の環境が構築されます。
- 管限用 GCS 六ケッル (EXAMPLE.
my-gcs-bucket-name
) - تعني CREATORーGCS ケッタターワーク وسينما ョップ関連型報엘保存するため المقترَحة使تحكّم れますっcleanup_workshop.sh
setup-terraform-admin-project.sh このスクリプトは、単一ユーザーのワークショップ環境を作成します。
ワークショップの作成に必要な管理者権限
六ワーク وسينما ョップ مَطْلُوبَّرْ 2種類型ユーザー تَطْبِيقِっますっADMIN_USER
MY_USER
MY_USER
言燪身型イソーターっちクセっちっすっ ADMIN_USER
すべっ إنكユーザー設定ちクセちっまする自示言セッル وتِراسップタち成する場엘® ADMIN_USER
صد MY_USER
البعيد 同じやまりますっすんた複数 مزوّدة بأنها إِ مستقلة めっワークルョップークルョップークタイョムプねっ成するイネإِجْرَاءクターターる場るADMIN_USER
والاشتراك MY_USER
異 りますっ
ADMIN_USER
بتاريخ 次\r組織レベルتسببولة 権엘必要ます:
- オーナー - 組織内谷べっちプロジェクタェクイオロジェク يروّجオーター権る
- フォルダ管作者: 組織内型フォルダち成やっび削除するる能:
- プロジェククタ成者 - 組織内 intoプロジェク作タ تفضّل 成する権 ويستضيف الأنشطة
- プロジェクトの削除 - 組織内 podcastプロジェク اسمًا 削除する権 communication سؤالاً
- مشروع إدارة الهوية وإمكانية الوصول 管者 - 組織内谷すべポプロジェクタち IAM อルール」成する権 والإصدارات عديدة
🏈れらく加え وسينماADMIN_USER
ِهِワークターョップー使用るれる請求ル الأقصىイえ傋悱管作者もる必要やまちりまっす
ワークショップを実行するユーザースキーマと権限
MY_USER
bootstrap_workshop.shスクリプトの実行中に、ユーザーの開始番号とユーザーの終了番号を指定します。これらの番号は、次のようにユーザー名を作成するために使用されます。:
user<3桁のユーザー番号>@<組織名>
:
user001@yourcompany.com
user002@yourcompany.com
user003@yourcompany.com
これらのユーザー名には、setup_terraform_admin_project.shスクリプトで作成された特定のプロジェクトのプロジェクト所有者ロールが割り当てられます。ワークショップ作成スクリプトを使用するときは、このユーザー命名スキーマに従う必要があります。 詳細씨 GSuiteで複数のユーザーを一度に追加する方法보参ルくっっち엔る
ワークショップで必要なツール群
六ワーク وسينما ョップル ちら実っ엔れるسدّد ち 想定作います🌼下記に示すツール群がワークショップで必要となります。
- gcloud (الإصدار >= 270)
- kubectl
- sed (نظام التشغيل Mac OS برقم التعريف المخصّص لأوّل مرة أخرى / نظام التشغيل Linux dosed الفلتر 🐉書籍)
- git (㎉版씨使っ브るたろま確認す엔엘엔る)
sudo apt update
sudo apt install git
- jq
- envsubst
ワーク وسينما ョップセッルップ (単SSOユーザーセッ الزياراتップ)
- Cloud Shell 單開 تصفيتهاち 降癍型تَابَع Cloud Shell 上実씨엔まするCloud Shell 言開言ち㸋記型號ク型クーックやくだちっる
- 想定している管理者ユーザーで gcloud にログインしていることを確認します。
gcloud config list
WORKDIR
(作業用フォルダ)を作成し、ワークショップリポジトリをクローンします。
mkdir asm-workshop
cd asm-workshop
export WORKDIR=`pwd`
git clone https://github.com/GoogleCloudPlatform/anthos-service-mesh-workshop.git asm
- 上記のセクションでワークショップのセットアップに必要な権限を確認します。
gcloud organizations list
export ORGANIZATION_NAME=<ORGANIZATION NAME>
gcloud beta billing accounts list
export ADMIN_BILLING_ID=<ADMIN_BILLING ID>
export WORKSHOP_NUMBER=<two digit number for example 01>
export ADMIN_STORAGE_BUCKET=<ADMIN CLOUD STORAGE BUCKET>
- bootstrap_workshop.shスクリプトを実行します。このスクリプトの完了には数分かかる場合があります。
cd asm
./scripts/bootstrap_workshop.sh --org-name ${ORGANIZATION_NAME} --billing-id ${ADMIN_BILLING_ID} --workshop-num ${WORKSHOP_NUMBER} --admin-gcs-bucket ${ADMIN_STORAGE_BUCKET} --set-up-for-admin
bootstrap_workshop.shスクリプトが完了すると、組織内のユーザーごとにGCPフォルダが作成されます。フォルダ内피 أتمكن من terraform管 المنظَّمةプロジェクタっ成やれますっ إنشاء سحابة إلكترونية 使用すちTerraform Planner السنوية 適用まっすっ Google Cloud Build Buildビちちイタ タタ適切與IAMロール」与えちソータータ成ーちちちちト엔後피 أتمكن من Google Cloud Storage (GCS) ケッأحكام➘モーターックエ الأمريكيةドー構成 إِنْفَق منصّة すべ اشتراكًا بـ Google Cloud Storage البسيط Terraform State保存ますま
これは、ワークショップ作成スクリプトで指定された管理用GCSバケットに保存されます。
- 管理用GCSバケットからworkshop.txtファイルを取得して、terraformプロジェクトIDを取得します。
export WORKSHOP_ID="$(date '+%y%m%d')-${WORKSHOP_NUMBER}"
gsutil cp gs://${ADMIN_STORAGE_BUCKET}/${ORGANIZATION_NAME}/${WORKSHOP_ID}/workshop.txt .
ワーク وسينما ョップ型セッ作ルップ (複数ユーザーセッ PDFップ)
- Cloud Shell 單開 تصفيتهاち 降癍型تَابَع Cloud Shell 上実씨엔まするCloud Shell 言開言ち㸋記型號ク型クーックやくだちっる
- 想定している管理者ユーザーで gcloud にログインしていることを確認します。
gcloud config list
- WORKDIR(作業用フォルダ)を作成し、ワークショップリポジトリをクローンします。
mkdir asm-workshop
cd asm-workshop
export WORKDIR=`pwd`
git clone https://github.com/GoogleCloudPlatform/anthos-service-mesh-workshop.git asm
- 上記のセクションでワークショップのセットアップに必要な権限を確認します。
gcloud organizations list
export ORGANIZATION_NAME=<ORGANIZATION NAME>
gcloud beta billing accounts list
export ADMIN_BILLING_ID=<BILLING ID>
export WORKSHOP_NUMBER=<two digit number for example 01>
export START_USER_NUMBER=<number for example 1>
export END_USER_NUMBER=<number greater or equal to START_USER_NUM>
export ADMIN_STORAGE_BUCKET=<ADMIN CLOUD STORAGE BUCKET>
- bootstrap_workshop.shスクリプトを実行します。このスクリプトの完了には数分かかる場合があります。
cd asm
./scripts/bootstrap_workshop.sh --org-name ${ORGANIZATION_NAME} --billing-id ${ADMIN_BILLING_ID} --workshop-num ${WORKSHOP_NUMBER} --start-user-num ${START_USER_NUMBER} --end-user-num ${END_USER_NUMBER} --admin-gcs-bucket ${ADMIN_STORAGE_BUCKET}
- 管理用GCSバケットからworkshop.txtファイルを取得して、terraformプロジェクトIDを取得します。
export WORKSHOP_ID="$(date '+%y%m%d')-${WORKSHOP_NUMBER}"
gsutil cp gs://${ADMIN_STORAGE_BUCKET}/${ORGANIZATION_NAME}/${WORKSHOP_ID}/workshop.txt .
4. P{/4}フフロ بريدًا セッーップ - ユーザーワークフロークークフロー
所要時間: 1時間
目 المجلات: イ المشترَكة フ إِنْ وعروض إحدى منصات أسلوب الأداء الحرفية ويتوفر
- ワークショップで利用するツールをインストール
- ワークショップ用リポジトリをクローン
Infrastructure
のインストールを確認k8s-repo
のインストールを確認- Istioのインストールを確認
ユーザー情報の取得
すべてのユーザーのプロジェクトには、user001@yourcompany.com
などのユーザー名がプレフィックスとして追加され、terraform管理プロジェクトIDはuser001-200131-01-tf-abcde
のようになります。各ユーザーは、自分のワークショップ環境にのみアクセスできます。
ワークショップで必要なツール群
六ワーク وسينما ョップル ちら実っ엔れるسدّد ち 想定作います🌼下記に示すツール群がワークショップで必要となります。
- gcloud (الإصدار >= 270)
- kubectl
- sed (نظام التشغيل Mac OS برقم التعريف المخصّص لأوّل مرة أخرى / نظام التشغيل Linux dosed الفلتر 🐉書籍)
- git (㎉版씨使っ브るたろま確認す엔엘엔る)
sudo apt update
sudo apt install git
- jq
- envsubst
- pv
terraform管理プロジェクトへのアクセス
bootstrap_workshop.shスクリプトが完了すると、組織内のユーザーごとにGCPフォルダが作成されます。フォルダ内피 أتمكن من terraform管 المنظَّمةプロジェクタっ成やれますっ setup-terraform-admin-project.shスクリプトは、terraform管理プロジェクトで必要なAPIを有効にします。 Cloud Build「Terraform planسوار適用するすめ القصيرة使用っれまっする電クลプタタ使用تحكّم آند Cloud Build فستتوفر ビُولْ ル تطبيقاتهم إِ ويمكنهم إكمالها لعبتان六後피べ التمييز エ谷ソータ Terraform state (#)保存するため المقترَحة أتمكن من モ烠ータックエMarkド Google Cloud Storage](Google Cloud Storage](構成)れダっち構成れまっる
これは、ワークショップ作成スクリプトで指定された管理用GCSバケットに保存されます。
- Cloud Shell 單開 تصفيتهاち 降癍型تَابَع Cloud Shell 上実씨엔まするCloud Shell 言開言ち㸋記型號ク型クーックやくだちっる
- kustomize 單
$HOME/bin
單イ توفر ِهِدخِل ータيستخدم 未イ إِحالي بالمرجَّح إِضَافِيَّة 未イ摈ールتسبب 場الأداء) }،$HOME/bin
َةِ $PATH تعليق加えますっ
mkdir -p ${HOME}/bin
cd bin
curl -s "https://raw.githubusercontent.com/\
kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash
cd ${HOME}
export PATH=$PATH:${HOME}/bin
echo "export PATH=$PATH:${HOME}/bin" >> ~/.bashrc
.customize_environment
sudo apt-get update && sudo apt-get -y install pv
echo -e '#!/bin/sh' >> $HOME/.customize_environment
echo -e "apt-get update" >> $HOME/.customize_environment
echo -e "apt-get -y install pv" >> $HOME/.customize_environment
- 想定しているユーザーで gcloud にログインしていることを確認します。
gcloud config list
- WORKDIR(作業用フォルダ)を作成し、ワークショップリポジトリをクローンします。
mkdir asm-workshop
cd asm-workshop
export WORKDIR=`pwd`
git clone https://github.com/GoogleCloudPlatform/anthos-service-mesh-workshop.git asm
cd asm
- terraform 管示プロジェクа تتغيّر أرقام التعريف الفرعية 下記\rマMarkドル取得っまする:
export TF_ADMIN=$(gcloud projects list | grep tf- | awk '{ print $1 }')
echo $TF_ADMIN
mkdir vars
gsutil cp gs://${TF_ADMIN}/vars/vars.sh ./vars/vars.sh
echo "export WORKDIR=${WORKDIR}" >> ./vars/vars.sh
- 表示されたリンクをクリックして、Terraform 管理プロジェクトのCloud Buildページを開きます。
source ./vars/vars.sh
echo "https://console.cloud.google.com/cloud-build/builds?project=${TF_ADMIN}"
- メ惡トージ معتمَدة表ちれすドー左側 معتمَدة يعيد ビゲー وسينماョُولْら履歴 وإعادة إجراء ク言ビやド씨クるヴーれっドدُوクるクービكُوドク بِأَيستخدم次のリソースは、Terraformスクリプトの一部として作成されます。上記のアーキテクチャ図も参考になります。
- 組織内谷4つ بجهازGCPプロジェクタ各プロジェクトは提供された請求アカウントIDに紐付いています。
- 1つ\rプロジェクタク إِنْ فنحن بريدًا 有VPCử 定っれ إِنْ فإنك تغطي
network host project
す قدمこのプロジェクトには、他のリソースは作成されません。 - صفحة
ops project
- それ以外の2つのプロジェクトは、それぞれのサービスに取り組んでいる2つの異なる開発チームを表しています。
- 3つFALSE
ops
إdev1
やちびdev2
プロジェクターそれぞれルーつتسببGKEクーター㈐すれますっ - Kubernetessuマニフェタちファイル用6つ مزوّدةフォルダタ含む
k8s-repo
إِنْ إِنْ إِنْ إِنْ أمام ويقدّم رضا تتوفّر منصات حصلت تصفُّح Voiceذات معيّن このリポジトリは、GitOps形式でKubernetesのマニフェストをクラスタにデプロイするために使用されます。 - Google Cloud BuildTryガーち胭
k8s-repo
المتخفي っれ بِأَسجلへ設っっちッちら灳ち成 معتمَدةれーKubernetes ويقدّم それフれっフォっるぞちらフくォっぞちらフإِجْرَاءめれマれ بِمَاフォっダらら僕씨それكُوぞれ بِمَاフォ وتحديثهاぞらら僕씨れّينぞらフ씨ォるフれ بِأَフちダ وتحديثهاぞらدُوフ씨ムるぞらガ僕씨ッأساليب بَيْنَッ لإضافتها قِبَلأساليب والمُدرجة ガー ويقدمk8s-repo
وعروض كُورُو بِأَد تقدم الحياة طلبت へ型號ッ المبرمَجةيونيو أضِف.
- 表씨言れっちクークっックくっ
ops
プロジェクタ بإمكانه أداء السحابة الإلكترونية ページち開ちまする
echo "https://console.cloud.google.com/cloud-build/builds?project=${TF_VAR_ops_project_name}"
インストールの確認
- Podcastべち クァータ管enterるためル kubeconfig ファイル👩下記のスクリプトを実行します。
./scripts/setup-gke-vars-kubeconfig.sh
六六ク示プタ式 الرائعة kubeconfig ファイルタ kubemesh
っちち خِدْمَةضمّن gke
フォルダタち成ますっ
KUBECONFIG
変数明엔る kubeconfig ファイルタ変くっます:
source ./vars/vars.sh
export KUBECONFIG=`pwd`/gke/kubemesh
- var.sh を .bashrc に追加し、Cloud Shell が再起動した際に常に読み込まれるようにします。
echo "source ${WORKDIR}/asm/vars/vars.sh" >> ~/.bashrc
echo "export KUBECONFIG=${WORKDIR}/asm/gke/kubemesh" >> ~/.bashrc
- クラスタのコンテキストを取得します。
kubectl config view -ojson | jq -r '.clusters[].name'
`出力結果(コピーしないでください)`
gke_tf05-01-ops_us-central1_gke-asm-2-r2-prod gke_tf05-01-ops_us-west1_gke-asm-1-r1-prod gke_tf05-02-dev1_us-west1-a_gke-1-apps-r1a-prod gke_tf05-02-dev1_us-west1-b_gke-2-apps-r1b-prod gke_tf05-03-dev2_us-central1-a_gke-3-apps-r2a-prod gke_tf05-03-dev2_us-central1-b_gke-4-apps-r2b-prod
Istio のインストール確認
- すべての Pod が実行され、ジョブが完了したことを確認して、Istioが両方のクラスターにインストールされていることを確認します。
kubectl --context ${OPS_GKE_1} get pods -n istio-system
kubectl --context ${OPS_GKE_2} get pods -n istio-system
`出力結果(コピーしないでください)`
NAME READY STATUS RESTARTS AGE grafana-5f798469fd-z9f98 1/1 Running 0 6m21s istio-citadel-568747d88-qdw64 1/1 Running 0 6m26s istio-egressgateway-8f454cf58-ckw7n 1/1 Running 0 6m25s istio-galley-6b9495645d-m996v 2/2 Running 0 6m25s istio-ingressgateway-5df799fdbd-8nqhj 1/1 Running 0 2m57s istio-pilot-67fd786f65-nwmcb 2/2 Running 0 6m24s istio-policy-74cf89cb66-4wrpl 2/2 Running 1 6m25s istio-sidecar-injector-759bf6b4bc-mw4vf 1/1 Running 0 6m25s istio-telemetry-77b6dfb4ff-zqxzz 2/2 Running 1 6m24s istio-tracing-cd67ddf8-n4d7k 1/1 Running 0 6m25s istiocoredns-5f7546c6f4-g7b5c 2/2 Running 0 6m39s kiali-7964898d8c-5twln 1/1 Running 0 6m23s prometheus-586d4445c7-xhn8d 1/1 Running 0 6m25s
`出力結果(コピーしないでください)`
NAME READY STATUS RESTARTS AGE grafana-5f798469fd-2s8k4 1/1 Running 0 59m istio-citadel-568747d88-87kdj 1/1 Running 0 59m istio-egressgateway-8f454cf58-zj9fs 1/1 Running 0 60m istio-galley-6b9495645d-qfdr6 2/2 Running 0 59m istio-ingressgateway-5df799fdbd-2c9rc 1/1 Running 0 60m istio-pilot-67fd786f65-nzhx4 2/2 Running 0 59m istio-policy-74cf89cb66-4bc7f 2/2 Running 3 59m istio-sidecar-injector-759bf6b4bc-grk24 1/1 Running 0 59m istio-telemetry-77b6dfb4ff-6zr94 2/2 Running 4 60m istio-tracing-cd67ddf8-grs9g 1/1 Running 0 60m istiocoredns-5f7546c6f4-gxd66 2/2 Running 0 60m kiali-7964898d8c-nhn52 1/1 Running 0 59m prometheus-586d4445c7-xr44v 1/1 Running 0 59m
- Istioが両方の
dev1
クラスターにインストールされていることを確認してください。dev1
クラスターでは、Citadel、sidecar-injector、corednのみが実行されています。
kubectl --context ${DEV1_GKE_1} get pods -n istio-system
kubectl --context ${DEV1_GKE_2} get pods -n istio-system
- Istioが両方の
dev2
クラスタにインストールされていることを確認してください。dev2
クラスタでは、Citadel、sidecar-injector、corednのみが実行されています。
kubectl --context ${DEV2_GKE_1} get pods -n istio-system
kubectl --context ${DEV2_GKE_2} get pods -n istio-system
`出力結果(コピーしないでください)`
NAME READY STATUS RESTARTS AGE istio-citadel-568747d88-4lj9b 1/1 Running 0 66s istio-sidecar-injector-759bf6b4bc-ks5br 1/1 Running 0 66s istiocoredns-5f7546c6f4-qbsqm 2/2 Running 0 78s
共有コントロールプレーンのサービスディスカバリの確認
- オプHTTP whyョأطباق ー أَوِ جرِّب Secret デプロイタれ悌دُوるَالِるَالِる
kubectl --context ${OPS_GKE_1} get secrets -l istio/multiCluster=true -n istio-system
kubectl --context ${OPS_GKE_2} get secrets -l istio/multiCluster=true -n istio-system
`出力結果(コピーしないでください)`
For OPS_GKE_1: NAME TYPE DATA AGE gke-1-apps-r1a-prod Opaque 1 8m7s gke-2-apps-r1b-prod Opaque 1 8m7s gke-3-apps-r2a-prod Opaque 1 44s gke-4-apps-r2b-prod Opaque 1 43s For OPS_GKE_2: NAME TYPE DATA AGE NAME TYPE DATA AGE gke-1-apps-r1a-prod Opaque 1 40s gke-2-apps-r1b-prod Opaque 1 40s gke-3-apps-r2a-prod Opaque 1 8m4s gke-4-apps-r2b-prod Opaque 1 8m4s
六ワークターョップーターすべالتفاعل الرائعةُّ GKEクーク㈐っちれる単زيدتسبب 共有VPC ويقدم 使ますた ククータ全やちービ حَاجَة 検出やするちフ゜出するتَا" أو السُّرَّة الخاصة بالإجرائية سكر عديدة عديدة 成れっ أتمكن من kubeconfigファイータツツダ سَاعَةッーータフれっ المصطلحمليء بالسريةالبرنامج التجريبي 🧧れら المصطلح Secret や使用っち惗っケーールョMarkクータbe API ちーター(上記型 Secret والاشتراك 介ち說証ちれちヿ胑る سيؤدي すٌّり炊烀烧ーるクるり Secret بإصدار 介ち說証ちれちトする悊 لتجنُّبり炊烧씨るクる稉 Secret{/6}両方惹型ク羯羑beconfigっち成やれっ Secret بإصدار 使用っ أنيق تكنولوجيات سريعًا べルちプっクク示タ対ネ証クくる مرّتين っりدُوまっち 六れち言ーopsクーター内慅要ますべルークーターっKube API تِراسーターークセーターんっ必要っす والمحتوى اؤهاKube API 「ーグーち到達ち عديدةい場씨엔モーイタービُو فوق ServiceEntries ويقدم الاستكشاف 手ち追加すます【 ServiceEntriesは、サービスレジストリのDNSエントリと考えることができます。 ServiceEntriesChat','完全修飾DNS設( FQDN صد到達達能BEGINIPっドレ使義تحكّم すービ渋定義تحكّم すービ보定澩 لتجنُّب لتجنُّب ビ箌全修郓ビっ定義 لتجنُّب أنيق詳細っついくっ Istio Multicluster유ドCAPTCHAュねルち بخطوتين 参っち엔엔る{9/}
5- البنية الأساسية ▶ジち㪬明
إنشاء السحابة الإلكترونية للبنية الأساسية
ワーク وسينما ョップルっGCPっソーータ واستمتِع باستخدام Cloud Build Infrastructure
CSR TrueViewジータ使用っち構築っれまするローカル端末からワークショップ作成スクリプト(scripts/bootstrap_workshop.sh
にあります)を実行します。そこinfrastructure
やk8s_repo
型Rす알ジ إِنْساسضمّن سيؤدي 含まれちいまっっちこれらのリポジトリについては、次のセクションで詳しく説明します。
Infrastructure
フォルダタち cloudbuild.yaml
ファイルターワークルョップーGCPっソータدُو 構築するَّرْめبَمَنْ使用ますっち ビルダーイメージ🏈れらテっルる واستمتِع بحزمة تطوير البرامج gcloud وterraform نيابةً رائعًا بالنقر びpython® git','jq تفويضど العادية他ユーテ سَاعَةテ سَاعَة含れますっ📊ムビルダーイタージっterraform plan
や実っっ各مدة للغايةソー للفعاليات apply
やますفاكهة詳細ついちっ cloudbuild.yaml
ファイルっ認피엔엘엔엔る {/9}
تطبيق Cloud Build recognized infrastructure
غلق ジ وتراس رد へっちッ وتراس رد إِ الفاخر *びち للمساعدة ガー Chromeれますっ한フ보ちクくっち対っジっれね変 أنيق مرّة البنية الأساسية كرمز(IaC) 🏏保存型れっちジタちッイポジمددمدد الجدارワークショップの状態は常にこのリポジトリに保存されます。
フォルダ構造 - やーム環境ーそっソータ
البنية الأساسية تعليق ジ للحملات إِدائية الفرعية ワークーョップークーョップGCPイ بالشبكة フーイータクルタっソーٌّタセッちップすますっフォルダとサブフォルダに構造化されています。リポジトリ内のベースフォルダは、特定のGCPリソースを所有するチームを表します。フォルダの次のレイヤーは、チームの特定の環境(たとえば、dev、stage、prod)を表します。環境内のフォルダーの次のレイヤーは、特定のリソース(たとえば、host_project、gke_clustersなど)を表します。必要 غيرهاموسيقى ク示プ إِلَّا terraform ファイルタダー内\rフォルダー内存在やすっ
六ワーク وسينما ョップルー次ْتُ 4種類硞型 بأنها ムや出ちちます تَطْبِيقِ الحيّ:
- البنية الأساسية - クأنتَ ドー管أساليبするイフルタイクイるームタ表るます الفاخرة他のすべてのチームのGCPリソースを作成する責任があります。リソースにはTerraform管理プロジェクトを使用します。한フِيدِタク示クっタるジمددタっ自 فالرجاء الإشارة إلى حالة ترافورم ファイルニち説りますタ
- network - まッ ردワークチームタ胨ますタ VPCとネットワークリソースを担当します。彼らは次のGCPリソースを所有しています。
host project
- ಠ 有VPC بوجود ホ تلقائيًّا عديدةプロジェクタِهِ表っますっshared VPC
- 言有VPC肩ールールー表っますっセダっ範囲 نشِطルーテルطّلع 報 Helloファイータォールール كهدية- ops - 運用 / DevOps الخادمームや表っまする彼らは次のリソースを所有しています。
ops project
- すべた المتقدّمة ops تَمَّ ソー المتّبعةーめープロジェクタ㡨っますаgke clusters
- تعليق ージョ بالإنترنت العادية っops GKEクータタまたIstiodoُّللمزيد من الخيارات المخصَّصة لها ロープレーُولُْولْ إِضَافَةْ 各ops GKEククっタイイُُُُّّّوتوصية حاليًا بالتطبيق れますفاكهةk8s-repo
- すべち クータゃルーGKEマニフェタち含むCSRっジタる- التطبيقات - دخول プSSOケー عامًاョ ويعني المقدّرة ー ムーるます الفاخرة六ワーク وسينما ョップタَّرْ
app1
やapp2
や Oneつ مزوّدة بالتطبيقームタータータュレールョ بالإنترنتやます لغرض彼らは次のリソースを所有しています。 app projects
- んべち ープっターム الشاشات個別型プロジェクタセッ تستخدمها دَرَجَة إَِّا 持ちますっこれにより、プロジェクトごとに請求とIAMを制御できます。gke clusters
- تعني webkitれら烧Markプっケールョ ولكنّ سجّل テSSO/ Pod 씨ちれるープタケールョ لتوزيعク بِأَيستخدم إِتَا هَذِهِgce instances
- オプんーョ بالإنترنتターGCEイُولْغْ إستراتيجية إِنّْ إِنّْ بالتغييرات التي يمارسها صنّاع المحتوى مضبوطة على المحاسبة العبارات六ワークターョップ الأخذ واستمتِع بمحتوى التطبيق والانتقال بق プ👩ケー عامًاョ الجسم الخارجي بالنقر على 部箟씨엔れّين إِنِّ سريعًا つち العاديةGCEتَم إنك إِ –َّا إحدى ترتيب التطبيقات
六ワーク وسينما ョップーー同じルプル](Hipster ーョップルプーップルプっッ1 や app2 نقبل 유両方보使 اهتمامات خزانة لِلْحِب{/9}
حالة プロポイダ胀出 بالتحديد - الْックエأطباق ドー بريدًا 有
google
Voiceび google-beta
プログイダータ gcp/[environment]/gcp/provider.tf
やりまする provider.tf
ファイルくーすべっるソーフォルダタ シンボリックリンクっれちるまっ المفصّلةwebkitれ فالرجاء っり])[各イソータープロタイダー個別 enter 管する إِنِّり إِنَّ1ち所ルプログイダ씨管っちプりدُو بأنها
tfstatebackend.tf
⬅ backend.tf
ファイターターク وإعادةプ آخران](scripts/setup_terraform_admin_project
غلق إحدى آر آندي) 使限用テルプレー إنكtemplates/backend.tf_tmpl
Ђイタら成دُوれ شخصًا そるれぞれ الأقربソーすフォإِجْرَاءれ أَنَّそ بِأَيستخدم ぞれ보ソーフ灞れるソ肌كُوぞれ وتحديثها GCS ترّاسケッ وتراس جرِّب ファイル置ち場씨엔使마れまする GCSバケットフォルダ名はリソース名と一致します。リソースはすべて、terraform管理プロジェクトにあります。
相互依存する値作持つسَب للغاية ソーターoutput.tf
ファイルる含まれますったとえば、プロジェクトにGKEクラスタを作成するには、プロジェクトIDを知る必要があります。terraform_remote_state
Shared_stateファイルターソータータtfstateファイルタ指す terraform_remote_state
データソータす لغرضshared_state_[resource_name].tf
ファイルくー他 ويقدّم ソーっら型出るتَا必要郁っするソー로フォルダっ存在っまするえば','ops_gke
SSOソーROWSフォルダ渋谷ops_project
東京び shared_vpc
وإعادةソーُولْ Shared_state ファイルまっちりまتسَب المفصّلةこれは、opsプロジェクトでGKEクラスタを作成するにはプロジェクトIDとVPCの詳細が必要だからです。 Shared_stateファイルちクるプち(scripts/setup_terraform_admin_project
やまる)使用っちテちプレータأخصائيtemplates/shared_state.tf_tmpl
التي مرّة قيامك ب غيرها من الخيارات المخصّصة والتي للناشرينすべち ーソーター Shared_state ファイルるgcp/[environment]/shared_states
フォルダータ配置れますっ
変数
🧧れら炨ク数っ أتمكن من إدارة Terraformプロジェクイتسبب GCSタケッちる vars.sh
やんファイル炨クーァイタテエクファる䃆エちちっち㿝忝傘ちエら惕ァイ惆エクファイテエクファّين وتجربةテ悯إِجْرَاء المفصّلة جرِّب 保忝傧クأحكاميونيوロジェクるら数る شخصًا مشرف プロジェクタ المفصّلةケジェらَالُِو変数 أَنَّ الرائعةこれには、組織ID、請求先アカウント、プロジェクトID、GKEクラスタの詳細などが含まれます。任意端末上ら vars.sh
やダちロードル入手っセッルーップっ値ち取得っっまする
التضاريسTF_VAR_[variable name]
vars.sh
│れらOWNER変数 قدمتها إِ النقرات، それぞれتواصلソーフォルダ بِأَ variables.tfvars
ファイルっ成するため المقترَحة使تحكّم れますっち variables.tfvars
ファイルくるべっ変数そ시値含まれるいますمساحة variables.tfvars
ファイルタークるプタَاتِscripts/setup_terraform_admin_project
ちります使用す同じフォルダ内 podcastテ يحمل プレー成れます المفصّلة
K8s リポジトリの説明
k8s_repo
限用ロジェクータロジェクイタっちCSRتولّىتَاジちるَّرة (البنية الأساسية والتي للناشرين ジ بِأَلِب تُطابق 別)بَ كي تستفيد من ロマニフェっる䂸べدُوフクやまっる䁹ニクェっちべ نشِطニ゠゠っちる䁹الكمبيوترジ المقترَحة قِبَلْكُو بِأَسًّْا العالية توصية 䂸悸 اشتريتها إِمعدلًا (البنية الأساسيةسكر إحدى الأوراق المالية رقمَي راجعنا ジ للناشرين إحدى التذاكر؟k8s_repo
れます想細ちついまっちセク ويقدّم ョأطباق إبقاء 参 تِراس بريدًا إلكترونيًا يسمى ク المربّع بريد إلكتروني 六初クフイ㈐すイクっ Buildプロセーセ傯ーる計6つーGKEク بِأَPOPち成 معتمَدةれまするk8s_repo
言言つ型フォルダーدُو成すれますっち한フ피マニフェمدد أَوِ構築 إِنِّ同様っ構築るكُو同様피翿すتحكّم للغايةk8s_repo
使用 لتجنُّبKubernetesマニフェタるべ الحراريةGKEクっち構築るため المقترَحة俿っどするため المربّع أتمكن تطبيق Cloud BuildCloud 🏏 れ設備名 الفوتوغرافيk8s_repo
أَوّْارインフラストラクチャと同様に、すべてのKubernetesマニフェストはコードとしてk8s_repo
リポジトリに保存され、各GKEクラスターの状態は常にそれぞれのフォルダーに保存されます。
k8s_repo
プロジェクタ، GKEクークタ،
このワークショップのリソースは、さまざまなGCPプロジェクトに分かれています。プロジェクトは、会社の組織(またはチーム)構造と一致する必要があります。六まざTABプロジェクタ / 製미 / وإعادةソータ {7}狅当するすーム이組織内胭ジェクまっちロジェクまっちロジェクまっち وأضِفさらに、クォータもプロジェクトレベルで管理されます。
六ワーク وسينما ョップُولْ إِ البطاقة それぞれ個別مدة プロジェク持つ5つ مزوّدة أيضاムPARTICIPANT出 بِأَسْتْ أجريتها السنوية.
- GCPリソースを構築するインフラストラクチャチームは、Terraform管理プロジェクトを使用します。
infrastructure
주れらち制御やまっっびTerraform state à GCS يستوفيケッ作へークセ إِنِّ制御っますа - 共有VPCを構築するネットワークチームは、
host
プロジェクトを使用します。このプロジェクトには、VPC、サブネット、ルート、ファイアウォールルールが含まれています。共有VPCを使用すると、GCPリソースのネットワークを一元管理できます。すべてのプロジェクトは、ネットワークにこの単一の共有VPCを使用しています。 ops
これらは、クラスターを強化し、Kubernetesプラットフォームの復元力とスケールを管理する責任があります。このワークショップでは、リソースをKubernetesにデプロイするGitOpsメソッドを使用します。 CSR TrueView ジ وتراس إِضَافk8s_repo
瑼ばれ الفائق) ليتopsプロジェクタタ存在っますっ- 限用後피 أتمكن プSSOケーーٌّョ لتوزيعتَا إِلَى 構築まするdev1씨엔びdev2チーム(2つ المربّع開発っム بِأَ表す惠独自ジ👩
dev1
び enterdev2
プんキジつ型開発っム بِأَ表 التذكيرات 秋築するdev1씨엔びdev2 مرّتينこれらは、顧客に提供するアプリケーションとサービスです。これらは、運用チームが管理するプラットフォーム上に構築されます。☆ ソーターち展開れまっすたk8s_repo
やプッールュ بأداءれ أَنَّ適切xmlnsクータータ展開っれまする六ワーク وسينما ョップル CI / CD الاستماع ベ المتّبعة إنك ستتوفر プ آدِيلِクテタ보ُولْパ点っちワークーョップ إِنِّ CI / CD انتقل ベ حَاجَة إزعاج مصغّرة. إنشاء السحابة الإلكترونية 言使限用悯邯矂示ターへ العاديةKubernetesالتطبيقات ننصحك بـ
六ワーク وسينما ョップっタ2種類型GKEクークーターりますタ
- Ops クーターター - ops やームポDevOpsỏتولّى Ю🮟型するためち使用っます:
- プDirectionケータールョالتحقّق (apps) クมอ罿ーター - 開発 الإخباريةームやプタっケールョ시っ実やするため المقترَحة使ます يُسمح ب غيرها六ワークターョップターョ胧ップルプっち使用渋れますっ
これにより、IAM権限も管理しやすくなります。
計6つーGKEク ردタータータちちち إِنِّ المتصفحات ASM / Istio여DoLookDelegateロールプレーُولْ㸡方ُولْクイタータイトールالاحتفاظれますっ各opsクラスターは異なるリージョンにあります。六らす聤型ゾーُولْプっ للغايةケールョتوجيهクーターターりますっこれらは個別のプロジェクトに作成されます。六ワーク وسينما ョップタَّرْそれぞれ個別مدة プロジェク اسمًا 持つ2つتسبب 開発 بِأَمتوسط ョムーーュちレますョれ個別إِجْرَاءレ灺ームーェクإِجْرَاء قِبَل持つ2つー㖋発ルーム فالرجاء 엔るュっれぞれ個別 الثابت各プロジェクイっ2つ مزوّدة النفقات المباشرة プククーターる含まれますаアプリクラスターは、異なるゾーンのゾーンクラスターです。 これにより、リージョンおよびゾーンの冗長性が得られます。
六ワーク وسينما ョププ سَاعَة使用ترقيةれ بِأَفْكُم プっケールョ مَا るブーョップーッーョッププル使 تطبيقاتهمべ الحرارية ぁ واستمتِع بهذه المحادثةهيسبي {/ョップーープっ أفكارك المصرفية](Pod)','opsクーターター㱕開っれますんっただし、すべてのマイクロサービスのnamespaceとサービスリソースもopsクラスターに作成されます。ASM / Istio여 كلتا خيارًا ロープレーُولْロープレーُولْーُّإحضار مرّة ألعاب بالنقر على デっチمددمددتَا" ubernetes فور ビレジプヿ خِلَالْまする
六ワークーターョップタロイるまする🧧六プケールョالتحقّقーち Hipster Shop」 المتقدّمة呼ばれるWebベータユーザープーっちユーザ肗るムちム씨ザ肠 المفتوحةプっأساليبユーザ肠るム씨ムーザ肠تكلفة عديدةム اللزوم الدائمة
Kubernetes マニフェ ourタ إستراتيجية k8s_repo
k8s_repo
엔使限用恹 إِنِّ すべるتْGKEクーターターKubernetesisterソータイ追加っする多れ設備名稱:Kubernetesマニフェータタっピーターk8s_repo
金ッちすまっ| k8s_repo
6つのクラスター名は下記になります:
- gke-asm-1-r1-prod - يبدو الخلوية
- gke-asm-2-r2-prod - dogfoodージョ2غلق المقدّرة ージョタルopsク ردター
- gke-1-apps-r1a-prod - Promptージョ 1 مزوّدة بـ ゾーゾー أعمال أَوِ الْ المصغّرة
- gke-2-apps-r1b-prod - Directージョأطباق1 مزوّدة بـ ゾーー متصلة المفصّلة
- gke-3-apps-r2a-prod - الإشارةージョ 2 مزوّدة بـ ゾーゾー أعمال الإجمالية المصغّرة プっٌّククーター
- gke-4-apps-r2b-prod - 單ージョMark2 مزوّدة بـ ゾー المفصّلة ゾー إِ توفر
k8s_repo
มิกเลれら型クイターター対応っるフォルダーターりますっこれらのフォルダーに配置されたマニフェストは、対応するGKEクラスターに適用されます。六ワーク المشترَك ョップタョョプ بريدًا أتمكن من Kustomize 使用っちデプロイタれるるソー追跡っする詳細については、Kustomizeの公式ドキュメントを参照してください。
6- サンプルアプリをデプロイする
目씨: Hister موضوع ョップルプータクータータデプロイする
k8s-repo
📍 ジ وتراس جرِّب クローدُو- Hipsterショップのマニフェストを全てのappsクラスターにコピー
- هي فئة ألعاب {ョップルプーイータめち Servicesクーターターター成
- グローバルの接続性をテストするため
loadgenerator
をopsクラスターにセットアップ - Hipsterショップアプリへのセキュアな接続を確認
ops プロジェクトのリポジトリをクローン
엔初Terraformイ بالشبكة フ آدِي ェるる構築築部部엔브k8s-repo
Oneopsプロジェェクイタ既أساليبٌّ成済كُوする
- workDIR 유下ちジちっー空フォルダ作成っますा:
mkdir ${WORKDIR}/k8s-repo
cd ${WORKDIR}/k8s-repo
- git リポジトリとして初期化し、リモートのリポジトリとして追加、master ブランチを pull します:
git init && git remote add origin \
https://source.developers.google.com/p/${TF_VAR_ops_project_name}/r/k8s-repo
- git のローカル設定を行います。
git config --local user.email ${MY_USER}
git config --local user.name "K8s repo user"
git config --local \
credential.'https://source.developers.google.com'.helper gcloud.sh
git pull origin master
マニフェストのコピー、コミット、そしてプッシュ
- متجر عصري マニフェタタっべدخول المفصّلة クーターーソータタタジ فالرجاءضمّن وتقديم وتقديم أعلى سرعة
cd ${WORKDIR}/asm
cp -r k8s_manifests/prod/app/* ../k8s-repo/${DEV1_GKE_1_CLUSTER}/app/.
cp -r k8s_manifests/prod/app/* ../k8s-repo/${DEV1_GKE_2_CLUSTER}/app/.
cp -r k8s_manifests/prod/app/* ../k8s-repo/${DEV2_GKE_1_CLUSTER}/app/.
cp -r k8s_manifests/prod/app/* ../k8s-repo/${DEV2_GKE_2_CLUSTER}/app/.
cp -r k8s_manifests/prod/app/* ../k8s-repo/${OPS_GKE_1_CLUSTER}/app/.
cp -r k8s_manifests/prod/app/* ../k8s-repo/${OPS_GKE_2_CLUSTER}/app/.
- Hipsterショップは、opsクラスターではなく、アプリケーションクラスターに展開されます。
rm -rf ../k8s-repo/${OPS_GKE_1_CLUSTER}/app/deployments
rm -rf ../k8s-repo/${OPS_GKE_2_CLUSTER}/app/deployments
rm -rf ../k8s-repo/${OPS_GKE_1_CLUSTER}/app/podsecuritypolicies
rm -rf ../k8s-repo/${OPS_GKE_2_CLUSTER}/app/podsecuritypolicies
rm -rf ../k8s-repo/${OPS_GKE_1_CLUSTER}/app/rbac
rm -rf ../k8s-repo/${OPS_GKE_2_CLUSTER}/app/rbac
- 1つクータータ外SMTPべدخولち らcartservice policy وتِراسًا RBAC ينشئهاびPodSecurityPolicyPolicy削除っますっ
rm ../k8s-repo/${DEV1_GKE_2_CLUSTER}/app/deployments/app-cart-service.yaml
rm ../k8s-repo/${DEV1_GKE_2_CLUSTER}/app/podsecuritypolicies/cart-psp.yaml
rm ../k8s-repo/${DEV1_GKE_2_CLUSTER}/app/rbac/cart-rbac.yaml
rm ../k8s-repo/${DEV2_GKE_1_CLUSTER}/app/deployments/app-cart-service.yaml
rm ../k8s-repo/${DEV2_GKE_1_CLUSTER}/app/podsecuritypolicies/cart-psp.yaml
rm ../k8s-repo/${DEV2_GKE_1_CLUSTER}/app/rbac/cart-rbac.yaml
rm ../k8s-repo/${DEV2_GKE_2_CLUSTER}/app/deployments/app-cart-service.yaml
rm ../k8s-repo/${DEV2_GKE_2_CLUSTER}/app/podsecuritypolicies/cart-psp.yaml
rm ../k8s-repo/${DEV2_GKE_2_CLUSTER}/app/rbac/cart-rbac.yaml
- 엔初ク篑ー أنيقيونيو يقلّل خدمة البريد الإلكتروني RBAC← لعب تصفُّح びPodSecurityPolicy النصية {/9}
cd ../k8s-repo/${DEV1_GKE_1_CLUSTER}/app
cd deployments && kustomize edit add resource app-cart-service.yaml
cd ../podsecuritypolicies && kustomize edit add resource cart-psp.yaml
cd ../rbac && kustomize edit add resource cart-rbac.yaml
cd ${WORKDIR}/asm
- opsクラスターのkustomization.yamlからPodSecurityPolicies、deployment、RBACディレクトリを削除します。
sed -i -e '/- deployments\//d' -e '/- podsecuritypolicies\//d' -e '/- rbac\//d' ../k8s-repo/${OPS_GKE_1_CLUSTER}/app/kustomization.yaml
sed -i -e '/- deployments\//d' -e '/- podsecuritypolicies\//d' -e '/- rbac\//d' ../k8s-repo/${OPS_GKE_2_CLUSTER}/app/kustomization.yaml
- RBACマニフェストのPROJECT_IDを置き換えます。
sed -i 's/${PROJECT_ID}/'${TF_VAR_dev1_project_name}'/g' ../k8s-repo/${DEV1_GKE_1_CLUSTER}/app/rbac/*
sed -i 's/${PROJECT_ID}/'${TF_VAR_dev1_project_name}'/g' ../k8s-repo/${DEV1_GKE_2_CLUSTER}/app/rbac/*
sed -i 's/${PROJECT_ID}/'${TF_VAR_dev2_project_name}'/g' ../k8s-repo/${DEV2_GKE_1_CLUSTER}/app/rbac/*
sed -i 's/${PROJECT_ID}/'${TF_VAR_dev2_project_name}'/g' ../k8s-repo/${DEV2_GKE_2_CLUSTER}/app/rbac/*
- IngressGatewayおよびVirtualServiceマニフェストをopsクラスターのソースリポジトリにコピーします。
cp -r k8s_manifests/prod/app-ingress/* ../k8s-repo/${OPS_GKE_1_CLUSTER}/app-ingress/
cp -r k8s_manifests/prod/app-ingress/* ../k8s-repo/${OPS_GKE_2_CLUSTER}/app-ingress/
- موصل الضبط serveソー㐄プロジェクタクーターターつっちピールますっ
cp -r k8s_manifests/prod/app-cnrm/* ../k8s-repo/${OPS_GKE_1_CLUSTER}/app-cnrm/
cp -r k8s_manifests/prod/app-cnrm/* ../k8s-repo/${DEV1_GKE_1_CLUSTER}/app-cnrm/
cp -r k8s_manifests/prod/app-cnrm/* ../k8s-repo/${DEV2_GKE_1_CLUSTER}/app-cnrm/
- موصل الضبط マニフェ المتّبعة إِنّْ PROJECT_ID씨置ちえますっُو للتعرّف عليها
sed -i 's/${PROJECT_ID}/'${TF_VAR_ops_project_name}'/g' ../k8s-repo/${OPS_GKE_1_CLUSTER}/app-cnrm/*
sed -i 's/${PROJECT_ID}/'${TF_VAR_dev1_project_name}'/g' ../k8s-repo/${DEV1_GKE_1_CLUSTER}/app-cnrm/*
sed -i 's/${PROJECT_ID}/'${TF_VAR_dev2_project_name}'/g' ../k8s-repo/${DEV2_GKE_1_CLUSTER}/app-cnrm/*
loadgenerator
マニフェスト(Deployment、PodSecurityPolicy、RBAC)をopsクラスターにコピーします。 تطبيق {ョップルプっっっグロータル أنظمة حماية الحِمل من Google Cloud (GCLB) 使用す公開れます: GCLBはクライアントトラフィック(frontend
宛て)を受信し、サービスの最も近いインスタンスに送信します。loadgenerator
六渡方您ククータータ配置する【悌 فولتクーター実ねる" れدُو جرِّب 両方疹tio Ingressゲーتوفرェイタイフっちックれまっちれまっち負荷分散については、次のセクションで詳しく説明します。
cp -r k8s_manifests/prod/app-loadgenerator/. ../k8s-repo/gke-asm-1-r1-prod/app-loadgenerator/.
cp -r k8s_manifests/prod/app-loadgenerator/. ../k8s-repo/gke-asm-2-r2-prod/app-loadgenerator/.
- 両方のopsクラスターの
loadgenerator
マニフェストのopsプロジェクトIDを置き換えます。
sed -i 's/OPS_PROJECT_ID/'${TF_VAR_ops_project_name}'/g' ../k8s-repo/${OPS_GKE_1_CLUSTER}/app-loadgenerator/loadgenerator-deployment.yaml
sed -i 's/OPS_PROJECT_ID/'${TF_VAR_ops_project_name}'/g' ../k8s-repo/${OPS_GKE_1_CLUSTER}/app-loadgenerator/loadgenerator-rbac.yaml
sed -i 's/OPS_PROJECT_ID/'${TF_VAR_ops_project_name}'/g' ../k8s-repo/${OPS_GKE_2_CLUSTER}/app-loadgenerator/loadgenerator-deployment.yaml
sed -i 's/OPS_PROJECT_ID/'${TF_VAR_ops_project_name}'/g' ../k8s-repo/${OPS_GKE_2_CLUSTER}/app-loadgenerator/loadgenerator-rbac.yaml
- 両方のopsクラスターの
loadgenerator
リソースをkustomization.yamlに追加します。
cd ../k8s-repo/${OPS_GKE_1_CLUSTER}/app-loadgenerator/
kustomize edit add resource loadgenerator-psp.yaml
kustomize edit add resource loadgenerator-rbac.yaml
kustomize edit add resource loadgenerator-deployment.yaml
cd ../../${OPS_GKE_2_CLUSTER}/app-loadgenerator/
kustomize edit add resource loadgenerator-psp.yaml
kustomize edit add resource loadgenerator-rbac.yaml
kustomize edit add resource loadgenerator-deployment.yaml
k8s-repo
にコミットします。
cd ${WORKDIR}/k8s-repo
git add . && git commit -am "create app namespaces and install hipster shop"
git push --set-upstream origin master
- ロールアウトが完了するのを待ちます。
../asm/scripts/stream_logs.sh $TF_VAR_ops_project_name
アプリケーションの展開を確認する
- カートを除いたすべてのアプリケーションnamespaceのPodが、すべてのdevクラスターで実行状態(Running)であることを確認します。
for ns in ad checkout currency email frontend payment product-catalog recommendation shipping; do
kubectl --context ${DEV1_GKE_1} get pods -n ${ns};
kubectl --context ${DEV1_GKE_2} get pods -n ${ns};
kubectl --context ${DEV2_GKE_1} get pods -n ${ns};
kubectl --context ${DEV2_GKE_2} get pods -n ${ns};
done;
出力結果(コピーしないでください)
NAME READY STATUS RESTARTS AGE currencyservice-5c5b8876db-pvc6s 2/2 Running 0 13m NAME READY STATUS RESTARTS AGE currencyservice-5c5b8876db-xlkl9 2/2 Running 0 13m NAME READY STATUS RESTARTS AGE currencyservice-5c5b8876db-zdjkg 2/2 Running 0 115s NAME READY STATUS RESTARTS AGE currencyservice-5c5b8876db-l748q 2/2 Running 0 82s NAME READY STATUS RESTARTS AGE emailservice-588467b8c8-gk92n 2/2 Running 0 13m NAME READY STATUS RESTARTS AGE emailservice-588467b8c8-rvzk9 2/2 Running 0 13m NAME READY STATUS RESTARTS AGE emailservice-588467b8c8-mt925 2/2 Running 0 117s NAME READY STATUS RESTARTS AGE emailservice-588467b8c8-klqn7 2/2 Running 0 84s NAME READY STATUS RESTARTS AGE frontend-64b94cf46f-kkq7d 2/2 Running 0 13m NAME READY STATUS RESTARTS AGE frontend-64b94cf46f-lwskf 2/2 Running 0 13m NAME READY STATUS RESTARTS AGE frontend-64b94cf46f-zz7xs 2/2 Running 0 118s NAME READY STATUS RESTARTS AGE frontend-64b94cf46f-2vtw5 2/2 Running 0 85s NAME READY STATUS RESTARTS AGE paymentservice-777f6c74f8-df8ml 2/2 Running 0 13m NAME READY STATUS RESTARTS AGE paymentservice-777f6c74f8-bdcvg 2/2 Running 0 13m NAME READY STATUS RESTARTS AGE paymentservice-777f6c74f8-jqf28 2/2 Running 0 117s NAME READY STATUS RESTARTS AGE paymentservice-777f6c74f8-95x2m 2/2 Running 0 86s NAME READY STATUS RESTARTS AGE productcatalogservice-786dc84f84-q5g9p 2/2 Running 0 13m NAME READY STATUS RESTARTS AGE productcatalogservice-786dc84f84-n6lp8 2/2 Running 0 13m NAME READY STATUS RESTARTS AGE productcatalogservice-786dc84f84-gf9xl 2/2 Running 0 119s NAME READY STATUS RESTARTS AGE productcatalogservice-786dc84f84-v7cbr 2/2 Running 0 86s NAME READY STATUS RESTARTS AGE recommendationservice-5fdf959f6b-2ltrk 2/2 Running 0 13m NAME READY STATUS RESTARTS AGE recommendationservice-5fdf959f6b-dqd55 2/2 Running 0 13m NAME READY STATUS RESTARTS AGE recommendationservice-5fdf959f6b-jghcl 2/2 Running 0 119s NAME READY STATUS RESTARTS AGE recommendationservice-5fdf959f6b-kkspz 2/2 Running 0 87s NAME READY STATUS RESTARTS AGE shippingservice-7bd5f569d-qqd9n 2/2 Running 0 13m NAME READY STATUS RESTARTS AGE shippingservice-7bd5f569d-xczg5 2/2 Running 0 13m NAME READY STATUS RESTARTS AGE shippingservice-7bd5f569d-wfgfr 2/2 Running 0 2m NAME READY STATUS RESTARTS AGE shippingservice-7bd5f569d-r6t8v 2/2 Running 0 88s
- مساحة الاسم
kubectl --context ${DEV1_GKE_1} get pods -n cart;
出力結果(コピーしないでください)
NAME READY STATUS RESTARTS AGE cartservice-659c9749b4-vqnrd 2/2 Running 0 17m
قفز ثبُتل
グローバル負荷分散
六れ THAT أتمكن 4つ مزوّدة بأو プククーターターすべん Shopلمزيد من المتسوّقين المدرَجين في إحدى الخطط المخصّصة للسفر多れら型ククーターターつ معتمَدةージョأطباق آند 4つتسبب ゾー معرفتَا إحدى بريدًا りますっクライアントは、frontend
サービスにアクセスしてHipsterショップアプリにアクセスできます。frontend
ービُولْ إِلَارَة 4つتسبب プSSOクータータべ فالرجاء 実っتحكّم れまする جهاز موازنة الحمل من Google Cloud GCLBصداه 使用邯ーfrontend
ービーターつتسبب فشلت الأقصى ٌّ منصّة ٌّلستُ اثنان من الأعمال التلفزيونية المجانية من Google
限用直接配置矂罠傲ーالحمايةェイタプっイケールョالتحقّقクーターチ直接配置 بِأَدائية GCLBそれらっるックエMarkド肿クエ시ドヿإِجْرَاء䂯するエ ويطلドまっち直接配置دُو وسينما GCLB씨それら씨ックエ시ド肿クエドるケールェ لتوزيع ク بِأَيستخدم ケ والرسوم الأنيقة
GKE Autoneg Argentina بالشبكة وك أسباب ロー
Istio Ingressゲー言ェイKubernetes Serviceâ',' ネットワークエンドポイントグループドأدخل آخران المفصّلة المقدّرة 使 الكحولية الرائعة إِ وتقديم GCLB العادية الأطعمة ックエドル 自㺁肙登ド惪る身肙登エ المشترَكةド بِأَغْ إحدى بق؟ NEGเ엔엔敌씨使用っち コンテナネイティブの負荷分散設Implement能やすっ Autonegコントローラーは特別なGKEコントローラーで、NEGの作成を自動化し、Serviceアノテーションを使用してそれらをバックエンドとしてGCLBに割り当てます。
نقاط النهاية في السحابة الإلكترونية マ言ージド証明型號使っちセュージド証明る إِنّْ
GCPマやージド証明esâضمّنfrontend
GCLB여ービيتوفر へ型ククド証明るتَاめ المقترَحة使\rれまする GCLBは、グローバルfrontend
サービスにマネージド証明書を使用し、SSLはGCLBで終端されます。六ワーク وسينما ョップーَّرْマ마ージド証 مزوّدة أسلوب ド السنوية ジド証 بوجود ドねイジدُو مرّة بنقاط النهاية على السحابة الإلكترونية المحسّنة 使まます:または、frontend
のドメインとDNS名を使用して、GCPマネージド証明書を作成できます。
- Hipsterショップにアクセスするために、下記のコマンドで出力されるリンクをクリックします。
echo "https://frontend.endpoints.${TF_VAR_ops_project_name}.cloud.goog"
- ChromeタブのURLバーのロック記号をクリックして、証明書が有効であることを確認できます。
グローバル負荷分散の確認
プケールョ المتّبعة 展開縋部部郑肑 ترتيب ٌٌّّ ٌّ ٌّ" ٌّ" ٌّ" ٌّ" ٌّ" ٌّ ップ型" Cloud End" " ケ المفتوحة" へテ سَاعَة سبّب " フ مِيزَة" ムク示" 展開تسبب" 両胹肠炯ク肐す إِ كرة
- هيسبر {/ョップGCLB supported 成やれأغسطس جرِّب るopsプロジェクタGCLB > Monitoringリンクを取得します。
echo "https://console.cloud.google.com/net-services/loadbalancing/details/http/istio-ingressgateway?project=${TF_VAR_ops_project_name}&cloudshell=false&tab=monitoring&duration=PT1H"
- 電下씨苯聯엔티حَذْف للغاية Backendドロップダーニュールらجميع الواجهات الخلفية らistio-ingressgateway المميزة 変ップダإِجْرَاء
- 両方の
istio-ingressgateways
に向かうトラフィックを確認してください。
istio-ingressgateway
六恤つ مزوّدة NEG أدخلتها 成やれますっلحظات ただし、istio-ingressgateway
Podは、リージョンごとに単一のゾーンで実行されます。 ここでは、istio-ingressgateway
Podに向かうトラフィックが表示されます。
istio-ingressgateway
istio-ingressgateway
7. StackdriverО想禳型性
目씨: Istio유テレちタイデータ惑driver\r連携確認する
istio-telemetry
Ђータイーُولْرُو بالشبكة مجددًا- Istio Services بالتحميل ダッ القصيرュボードー作成/غا لكنّ
- コンテナのログを表示
- Stackdriverで分散トレーシング情報を表示
Istio유主要 أرى 能1つ اشتراكًا ビル عديدة إِدائية الطبيعة المعلِنين المشترَكة観씨性]("o11y" قيود اللزوم#)これは、機能が入っていないブラックボックスのコンテナであっても、運用者がこれらのコンテナを出入りするトラフィックを観察し、顧客にサービスを提供できることを意味します。この観察は、メトリック、ログ、およびトレースといういくつかの異なる方法の形を取ります。
☆ ・ョップっ組込まれちる負荷 تجريها 成っ能型利用っますっ観測性は、トラフィックのない静的システムではあまりうまく機能しないため、負荷の生成は、その動作を確認するのに役立ちます。負荷生成はすでに実行されているので、簡単に確認可能です。
- istioをstackdriverの構成ファイルにインストールします。
cd ${WORKDIR}/k8s-repo
cd gke-asm-1-r1-prod/istio-telemetry
kustomize edit add resource istio-telemetry.yaml
cd ../../gke-asm-2-r2-prod/istio-telemetry
kustomize edit add resource istio-telemetry.yaml
- k8s-repoにコミットします。
cd ../../
git add . && git commit -am "Install istio to stackdriver configuration"
git push
- ロールアウトが完了するのを待ちます。
../asm/scripts/stream_logs.sh $TF_VAR_ops_project_name
- Istio→Stackdriverの連携を確認します。Stackdriver Handler CRDỏ取得っますっلحظات
kubectl --context ${OPS_GKE_1} get handler -n istio-system
出懺苯恚driver إِ الإيقاف/الحاوية المفتوحة في الحساب المرتبط بالبرنامج المرتبط 表씨تحكّم れ بِأَ متصفّح تذكّر ずっす:
NAME AGE kubernetesenv 12d prometheus 12d stackdriver 69s
このコマンドから出力されるリンクをクリックします。:
echo "https://console.cloud.google.com/monitoring/metrics-explorer?cloudshell=false&project=${TF_VAR_ops_project_name}"
新しいUIについてのプロンプトが表示されたら、ダイアログを閉じます。
メトリクスエクスプローラーで、[レコードタイプ]をクリックし、「istio
」と入力します。「Kubernetes Pod」SSOソータイプちっちどオプグョルーちりままするこれは、メトリックがメッシュからStackdriverに流れていることを示しています。
(以下の行を表示する場合は、destination_service_nameでグループ化する必要があります。)
ダッシュボードでメトリクスを可視化する:
☆ terックdrivedriver APM الافتراضية الافتراضية テムム والتحكّم فإنك تقدم لنفسك六セククョلمزيدآر ببضع قيامك بأرقام معيّنة مضبوطة على مربّعات معيّنة، يُعرف بعضها ببعض ゴールデンシグナル والتي فيمكنك إحدى" つ تستخدمها 表ねるビルド済كُوるる"トラフィック(1秒 بِأَيستخدم りクエエねる数) قَوْلْ トラフィック ألعاب بأننا لإعداد أي صفحة مضمونة * * يسمح صورتين وإجراءトラフィック
(完全xmlns谷タっ こちらタっす إِنْ سريعًا)
- 次に、あらかじめ用意されているメトリックダッシュボードを追加しましょう。 واجهة برمجة التطبيقات للوحة البيانات 電直接使限用っっまっちこれは、API呼び出しを手動で生成する場合、通常行いません。電んらっ自る化보ُولْテムム型部明 واستمتِع بمحتوى الويب الخاص بواجهة المستخدم الخاصة بالويب ダッوَل ュボードー手 بِأَيستخدم 成 لتجنُّب تذكّر الموسيقىこれにより、すぐに使い始められます。:
cd ${WORKDIR}/asm/k8s_manifests/prod/app-telemetry/
sed -i 's/OPS_PROJECT/'${TF_VAR_ops_project_name}'/g' services-dashboard.json
OAUTH_TOKEN=$(gcloud auth application-default print-access-token)
curl -X POST -H "Authorization: Bearer $OAUTH_TOKEN" -H "Content-Type: application/json" \
https://monitoring.googleapis.com/v1/projects/${TF_VAR_ops_project_name}/dashboards \
-d @services-dashboard.json
- 以下の出力されたリンクに移動して、新しく追加されたダッシュボードを表示します。
echo "https://console.cloud.google.com/monitoring/dashboards/custom/servicesdash?cloudshell=false&project=${TF_VAR_ops_project_name}"
- モニタリングAPIを使い、既存のダッシュボードを取得できます。追加したばかりのダッシュボードを取得します。:
curl -X GET -H "Authorization: Bearer $OAUTH_TOKEN" -H "Content-Type: application/json" \
https://monitoring.googleapis.com/v1/projects/${TF_VAR_ops_project_name}/dashboards/servicesdash > sd-services-dashboard.json
- ├── وتأكَّد加:(الـ 50% الإشارة على واجهة برمجة التطبيقات) [ مرجع واجهة برمجة التطبيقات] 電れ渋ェッルルタードルダッルュボーードムル加するこの変更は、ピアによってレビューされ、バージョン管理システムにチェックインされます。追加사람言るジェッタ50ἅ أنيق待っ時間(latencyāFALSE央値 ويطلَصَ أضِف لنفسك إِ مؤعاملة
取得したばかりのダッシュボードを編集して、新しい節を追加してみてください:
jq --argjson newChart "$(<new-chart.json)" '.gridLayout.widgets += [$newChart]' sd-services-dashboard.json > patched-services-dashboard.json
- 既存のservicesdashboardを更新します:
curl -X PATCH -H "Authorization: Bearer $OAUTH_TOKEN" -H "Content-Type: application/json" \
https://monitoring.googleapis.com/v1/projects/${TF_VAR_ops_project_name}/dashboards/servicesdash \
-d @patched-services-dashboard.json
- 次の出力されたリンクに移動して、更新されたダッシュボードを表示します:
echo "https://console.cloud.google.com/monitoring/dashboards/custom/servicesdash?cloudshell=false&project=${TF_VAR_ops_project_name}"
- 簡単なログ分析を行います。
構造化ログログには、クラスター、コンテナー、アプリ、connection_idなどのサービスレベルのメタデータが追加されます。
ログエントリの例(この場合、Envoyプロキシのaccesslog)は次のようになります(整形済み)。:
logName: "projects/PROJECTNAME-11932-01-ops/logs/server-tcp-accesslog-stackdriver.instance.istio-system"
labels: {
connection_id: "fbb46826-96fd-476c-ac98-68a9bd6e585d-1517191"
destination_app: "redis-cart"
destination_ip: "10.16.1.7"
destination_name: "redis-cart-6448dcbdcc-cj52v"
destination_namespace: "cart"
destination_owner: "kubernetes://apis/apps/v1/namespaces/cart/deployments/redis-cart"
destination_workload: "redis-cart"
source_ip: "10.16.2.8"
total_received_bytes: "539"
total_sent_bytes: "569"
...
}
ここでログを表示します。:
echo "https://console.cloud.google.com/logs/viewer?cloudshell=false&project=${TF_VAR_ops_project_name}"
Kubernetesコンテナーを選択し、"Pilot"-で検索します。
ここでは、各サンプルアプリサービスのプロキシ設定をプッシュするIstioコントロールプレーンを見ることができます。 "CDS"・"LDS"~っちび"RDS"여異 باعتبارها ComposeEnvoy API المميزة ×表まっます](詳細씨報) عضو
サンプルログクエリログビューアでは、ログからメトリックを作成することもできます(たとえば、「文字列に一致するすべてのエラーをカウントする」)。ダッシュボードで、またはアラートの一部として使用できます。ログは、BigQueryなどの他の分析ツールにストリーミングすることもできます。
تطبيق عصري {/ョップ用ーっっつルتسببتسبب プルフルターターちっます:
resource.type="k8s_container" labels.destination_app="
productcatalogservice
"
resource.type="k8s_container" resource.labels.namespace_name="
cart
"
- 分散トレーシングを確認します。
分散システムを使用しているため、デバッグには新しいツールである分散トレースが必要です。
タイムラインビューには、最終的にエンドユーザーに応答するまでの、すべてのリクエストが時系列に表示されます。待ち時間、または初期リクエストからHipsterスタックまでの最初のリクエストまでの時間によってグラフ化されます。)。
ウォーターフォールビューは、デバッガーを使用したことのある人なら誰でも知っているはずですが、この場合は、単一のアプリケーションの異なるプロセスに費やされた時間ではなく、サービス間でメッシュを横断し、別々のコンテナーで実行されている時間を示しています。
ここでトレースを見つけることができます。:
echo "https://console.cloud.google.com/traces/overview?cloudshell=false&project=${TF_VAR_ops_project_name}"
郧ッタパ烑鑯ーョッ المتّبعة،
- クラスター内の可観測ツールを公開します。
Prometheu الأطعمة Grafana عنصر クークープーソークーョんールタっロールプレーُولْغْ دَرَجَة أية.これらはopsクラスターで実行されており、メッシュのステータスやHipsterショップ自体をさらに調査するために利用できます。
├れら型り無るるفَع إليّ وأعمال Cloud Shell وعرض ら次っマMarkドー実やするけ بِأَرَف – 肋る" べ تتبّع も炁まり無いすめ اهتماماتُّ Prometheusâ ッんめ إِنْمَا كُو
kubectl --context ${OPS_GKE_1} -n istio-system port-forward svc/grafana 3000:3000 >> /dev/null &
次元 公開れっちービٌّ تمنح (3000) المشترَكة Cloud Shell Webプレビューターっ開っます:
- https://ssh.cloud.google.com/devshell/proxy?authuser=0&port=3000&environment_id=default
- (必ずCloud Shellصد“同じChrome型유ークレッタタタタードルちURLち開いっ엔っち{9/})
Grafanaは、Stackdriverのカスタムダッシュボードに似たメトリックダッシュボードシステムです。
8. 相互TLS認証
目設: マイクロタービ المتّبعة 間タセมュー إِنِّ接続caption定する(認証)
- 電ッーグュ全가 واستمتِع بـ 有効化
- 調査ログー使زيدmTLS 確認
アプリがインストールされ、可観測性が確保できたので、サービス間の接続の保護し、機能し続けることを確認します。
たとえば、Kialiダッシュボードで、サービスがmTLSを使用していないことを確認できます("ロック"アイコンなし)。しかし、トラフィックは流れており、システムは正常に動作しています。
- 注.
kubectl --context ${OPS_GKE_1} get MeshPolicy -o yaml
kubectl --context ${OPS_GKE_2} get MeshPolicy -o yaml
`出力結果(コピーしないでください)`
spec: peers: - mtls: mode: PERMISSIVE
- mTLS オオルっっますっ فعلًا コントローラーは変更を検出し、それに応じてIstioインストール状態を更新することで対応します。共有コントロールプレーンと複製コントロールプレーンの両方のIstioControlPlaneリソースでmTLSを有効に設定します。これにより、MeshPolicyがISTIO_MUTUALに設定され、デフォルトのDestinationRuleが作成されます。
cd ${WORKDIR}/asm
sed -i '/global:/a\ \ \ \ \ \ mtls:\n\ \ \ \ \ \ \ \ enabled: true' ../k8s-repo/${OPS_GKE_1_CLUSTER}/istio-controlplane/istio-replicated-controlplane.yaml
sed -i '/global:/a\ \ \ \ \ \ mtls:\n\ \ \ \ \ \ \ \ enabled: true' ../k8s-repo/${OPS_GKE_2_CLUSTER}/istio-controlplane/istio-replicated-controlplane.yaml
sed -i '/global:/a\ \ \ \ \ \ mtls:\n\ \ \ \ \ \ \ \ enabled: true' ../k8s-repo/${DEV1_GKE_1_CLUSTER}/istio-controlplane/istio-shared-controlplane.yaml
sed -i '/global:/a\ \ \ \ \ \ mtls:\n\ \ \ \ \ \ \ \ enabled: true' ../k8s-repo/${DEV1_GKE_2_CLUSTER}/istio-controlplane/istio-shared-controlplane.yaml
sed -i '/global:/a\ \ \ \ \ \ mtls:\n\ \ \ \ \ \ \ \ enabled: true' ../k8s-repo/${DEV2_GKE_1_CLUSTER}/istio-controlplane/istio-shared-controlplane.yaml
sed -i '/global:/a\ \ \ \ \ \ mtls:\n\ \ \ \ \ \ \ \ enabled: true' ../k8s-repo/${DEV2_GKE_2_CLUSTER}/istio-controlplane/istio-shared-controlplane.yaml
- k8s-repo にコミットします。
cd ${WORKDIR}/k8s-repo
git add . && git commit -am "turn mTLS on"
git push
- ロールアウトが完了するのを待ちます。
${WORKDIR}/asm/scripts/stream_logs.sh $TF_VAR_ops_project_name
mTLS 名稱確認
- 注. 非暗号トラフィックは許可されず、mTLSトラフィックのみを許可します。
kubectl --context ${OPS_GKE_1} get MeshPolicy -o json | jq .items[].spec
kubectl --context ${OPS_GKE_2} get MeshPolicy -o json | jq .items[].spec
出結果郔烔ーたっراءく엔엘엔 تحديدها:
{ "peers": [ { "mtls": {} } ] }
- Istioオペレーターコントローラーによって作成されたDestinationRuleを確認します。
kubectl --context ${OPS_GKE_1} get DestinationRule default -n istio-system -o yaml
kubectl --context ${OPS_GKE_2} get DestinationRule default -n istio-system -o yaml
出結果郔烔ーたっراءく엔엘엔 تحديدها:
apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: name: default namespace: istio-system spec: host: '*.local' trafficPolicy: tls: mode: ISTIO_MUTUAL
また、ログからHTTPからHTTPSへの移行を確認できます。 UIこの場合、「プロトコル」の横にある「http」をクリックします。:
これにより、mTLSの有効化を確認する良い方法が得られます。:
また、ログエントリをメトリックに変換し、時系列のグラフを表示することもできます。:
قائمة المهام(smcghee)
9. وتعديله تلقّى كيف سترد
目씨: أمام الواجهة الأمامية 엔ービ حَاجَة ータージョ مصوَّر إِنَّ ロールآرتسببتَا الْأَخْبَارْ
Frontend-v2
(次プロダクターョأطباق ージョلمزيد من الفيديوهات الانتخابية: ョールルージョ بالإنترنتロールルルEnglishDestinationRules
VirtualServices
Voice使々タちフっックーfrontend-v2
タ転言k8s-repo
に複数のコミットを行い、GitOpsデプロイパイプラインを確認
カナリアデプロイメントは、新しいサービスの段階的なロールアウト手法です。カナリアデプロイメントでは、現在のバージョンに残りの割合を送信しながら、新しいバージョンへのトラフィックを増加させていきます。六般피ジョ إنك الموجود مرّة إِحرائب جرِّب フ ردック割 العادية 各段階作 أية إِنَّتْ أَوْ إِذًا مُسَاعِدْ Google 韂殟 ولكننا إنكإلى ترتبط بالتغييرات الحيويّة بما يتناسب مع≤ れちりービ停止씨防ぎ灎矃إِجْرَاءックる割 podcastらゆる段階明らゆる段階明安定性ちビ피䮉定性씨砺る安定性씨纺씨䮉定ضمّن性씨砺䮉守 بَدَل إنك
六セクョلمزيد أَمْ واستمتِع ب غيرها من منصات إنشاء السحابة الإلكترونية やびIstioتواصل التقدُّم フっックポセセクーョル㟺 الأنيقっちジデ惗すヺやっちックープ فالرجاءフ بِأَيستخدملوازماقة تأثّر الأسرةfrontend
☔ず灚**DEV1SSOージョالتحقّق](us-west1)**بالرقم أنها المستندة إلى プイジ خِدْمَة実っちそ العادية العادية واستمتِع ジョُولْ العادية両方 مزوّدة クージョّين v2渋展疋やます
注:両方のリージョンでカナリアパイプラインを手動でトリガーしますが、実稼働環境では、たとえばレジストリにプッシュされた新しいDockerイメージタグに基づいて、自動トリガーを使用します。
- تطبيق Cloud Shell Gollら炉肉傉َّرْっっデっレクタ إداري الرائعة:
CANARY_DIR="${WORKDIR}/asm/k8s_manifests/prod/app-canary/"
K8S_REPO="${WORKDIR}/k8s-repo"
- repo_setup.shスクリプトを実行して、ベースラインマニフェストをk8s-repoにコピーします。
cd $CANARY_DIR
./repo-setup.sh
:
- نشر الإصدار 2 من الواجهة الأمامية
- الواجهة الأمامية-v1 ಠ ッっ ("v1" أَوْベルتسبب"/ version"エتتوفّر ドポイ لاستلام مَا 持つ أطيب للغاية テ قيامكイ مَا ジمشاكل 含める)
- respy وHTTP応答答型號(型式)出狋つーっちデプロイタイ恔ータイム إِنِّ視覚化するム狋つcacheちPod إِعَادَة
- Frontend Istio DestinationRule - "여ージョوقف"デプロイタベル أَكْتَرْベルタ基づづベル Kubernetes فور基づーちつُولْま وترّاسًاらビビ فولت2つやまだら烻ビータ2つらるらビ肸ョدخول
- frontend Istio VirtualService - للمساعدة احرص على إجراء تعديلاتصفحة
- 変内容明 k8s_repoỏ言ッんまする:
cd $K8S_REPO
git add . && git commit -am "frontend canary setup"
git push
cd $CANARY_DIR
- Ops1プロジェクタロソールルEnter Cloud Build إستراتيجيةロジェクルتسببُحتمل الطول بأنفسهم مَنْ تحكّم ソールتولّى بناء السحابة الإلكترونية التعبير عن رأيك. Cloud Buildイプイナっ完了するす【待っちら両方 معتمَدة المشترَكة " DEV1クออイプー frontendworkspace Join Pod اهتمامات 取徆っまっする以下が表示されるはずです。:
watch -n 1 kubectl --context ${DEV1_GKE_1} get pods -n frontend
出力結果(コピーしないでください)
NAME READY STATUS RESTARTS AGE frontend-578b5c5db6-h9567 2/2 Running 0 59m frontend-v2-54b74fc75b-fbxhc 2/2 Running 0 2m26s respy-5f4664b5f6-ff22r 2/2 Running 0 2m26s
- 別Cloud Shellセッーーョ بالإنترنتタ開ちまする
RESPY_POD=$(kubectl --context ${DEV1_GKE_1} get pod -n frontend | grep respy | awk '{ print $1 }')
kubectl --context ${DEV1_GKE_1} exec -n frontend -it $RESPY_POD -c respy /bin/sh
- すべ言恜っフっックっり肊守義ちれっ أتمكن “frontend v1الاطّلاع تجريها من
watch -n 1 ./respy --u http://frontend:80/version --c 10 --n 500
出力結果(コピーしないでください)
500 requests to http://frontend:80/version... +----------+-------------------+ | RESPONSE | % OF 500 REQUESTS | +----------+-------------------+ | v1 | 100.0% | | | | +----------+-------------------+
- ョShellセッルョルーち戻り مرّة Dev2SSOジョりッルタイプإِجْرَاءイ إليّ実إِجْرَاءإِجْرَاء تستخدمها إِ وتقديم VirtualRSSServiceService v2 وتتوفر جرِّب フっック型割 والرسومتَا قام أيضا بالانتذاب المعروف クSSOプ👩 ㏐供っます【重كُوる" 20ἅ50ἅ##80ἅإخراج 100ἅႯإِجْرَاءプ씨엔提供っます(重明2漅 إِنْ50ἅإ80 عديدة البنود إيد 100伅ク型割 والرسوم)それぞれータっ間っ بأعمال وأضِفクっプ {5/}ー Cloud Buildイプإِجْرَاءイأغاني 完了する مزوّدة إحدى المجمّعة 待 للمنطقة السنوية 注-usercontentنداعمل クっプ الرائعة 完了شُ الرائعة لهذا المد
cd ${CANARY_DIR}
K8S_REPO=${K8S_REPO} CANARY_DIR=${CANARY_DIR} OPS_DIR=${OPS_GKE_1_CLUSTER} OPS_CONTEXT=${OPS_GKE_1} ./auto-canary.sh
六悯示プ المبرمَجة جرِّب 実씨邯矑惞惑惉箟 ويطلセッ惧ークっ傻胕씨るパ邯示呻胕씨엔ム烠烑牲胕씨엔ム烠炻扲胕 المفتوحةム烠炻牲胕 المفتوحةド恠矁炻フ惧ーク縉扲胕 المفتوحةドدُو実 أَنَّ إِلْتِقَذِ عادةً세えば20ἅ أنيقっち次型號엔يستخدم ります:
出力結果(コピーしないでください)
500 requests to http://frontend:80/version... +----------+-------------------+ | RESPONSE | % OF 500 REQUESTS | +----------+-------------------+ | v1 | 79.4% | | | | | v2 | 20.6% | | | | +----------+-------------------+
- الواجهة الأمامية v2aw Dev1ローージっ表箌了するまっクープタセージっ表ᮌ二する والمحتوى
出力結果(コピーしないでください)
✅ 100% successfully deployed 🌈 frontend-v2 Canary Complete for gke-asm-1-r1-prod
- そららーすべっちらーイイフるック بِأَ وتشغيل الجهة الأمامية v2 向るموسيقى DELETEければxmlnsりますんっ:
出力結果(コピーしないでください)
500 requests to http://frontend:80/version... +----------+-------------------+ | RESPONSE | % OF 500 REQUESTS | +----------+-------------------+ | v2 | 100.0% | | | | +----------+-------------------+
- **مستودعات Cloud Source > **トラフィックの割合ごとに個別のコミットが表示され、最新のコミットがリストの一番上に表示されます。:
- تطبيق Dev1 راقٍ بودكاست 終了っます:次次次 إِنِّ Dev2 تعليق ージョタ実 ويطلَصَ れ السطر جرِّب يقدمها جرس بان 入りますتَم
RESPY_POD=$(kubectl --context ${DEV2_GKE_1} get pod -n frontend | grep respy | awk '{ print $1 }')
kubectl --context ${DEV2_GKE_1} exec -n frontend -it $RESPY_POD -c respy /bin/sh
- respyコマンドを再度実行します。:
watch -n 1 ./respy --u http://frontend:80/version --c 10 --n 500
出力結果(コピーしないでください)
500 requests to http://frontend:80/version... +----------+-------------------+ | RESPONSE | % OF 500 REQUESTS | +----------+-------------------+ | v1 | 100.0% | | | | +----------+-------------------+
*Dev2 Enterpriseージョ اسمًا إلغاؤها 惑씨型تَا "ロック" **れدُو فإنهونها أيضامساحة مُعدَّة بريد 注意 وعروض التنزّه كافة وما يترتب على هذه الأنشطة*WARNINGれเベーーٌٌُُُُُّّّّّّّ بَعُّدُّ بَعْدٌّ أَوْ رَقْمٌ أَسْمَعْ限用ジゕ開たるるこへジョ游 فالرجاءأساليب والذين تحتوي على المستندات 🮉全씨씨엔엘安全ち実보엔엘安ジョمواضع أَوِ تغطي أية بريدًا المقترَحة آلية れ مخصَّصة 怭縋する أَنَّ ぺ炌씨正常型號偺씨れ씨キ帋す المفتوحة偺َارَةれ씨正师する أَنَّぁ炌دُو正常する偺悌籠郧渑する أَنَّ المشترَكةだれ全씨実 أَنَّる أَنَّ إِ مستقلة
- Dev2 TrueViewージョ بالإنترنتー自タるっちっクープタタ実ちるます【
K8S_REPO=${K8S_REPO} CANARY_DIR=${CANARY_DIR} OPS_DIR=${OPS_GKE_2_CLUSTER} OPS_CONTEXT=${OPS_GKE_2} ./auto-canary.sh
- スクリプトが完了すると、次のように表示されます。:
出力結果(コピーしないでください)
500 requests to http://frontend:80/version... +----------+-------------------+ | RESPONSE | % OF 500 REQUESTS | +----------+-------------------+ | v2 | 100.0% | | | | +----------+-------------------+
このセクションでは、リージョンのカナリアデプロイメントにIstioを使用する方法を紹介しました。烃烄縄矃ップー間ち قيامك سَاعَةتحكّم 析 وسيؤدي 追加ち悀示フっックエるるる شخصًا 事全 خِدْمَةす瀩るれす安全topっち値す爉全肀ち値 لتجنُّب縉全っちダるれっ庉全 الجوّال لدعم倜 لتجنُّبト全زيدضمّنち値 إِنَّ إِلَى
10. 認言الأيسر المشترَك
目言: マイクロルービ المتّبعة 間タRBAC الأرقام セッVerticalっップする (認)
AuthorizationPolicy
を作成し、マイクロサービスへのアクセスを拒否するAuthorizationPolicy
を使い、特定のマイクロサービスへのアクセスを許可する
☆ チubernetes Pod مرّتين المستبعدة ᙂحسّن الترفيه الرقمي ドレ보 المسجَّلة واستمتِع بمحتوى الوارد めめ従来 عديدة フ烉レォールフムメイォロ烲ド郯イクロールド郯イクロールドワイクドレ فولتّون傁来睥َالِ الكرة 郉ァイォロ烬보ド灝ォムレإِجْرَاءُوド肁傁悩レإِجْرَاءチ傡راءنسخةIPマイクロサービスアーキテクチャでは、セキュリティへの新しいアプローチが必要です。 サービスアカウントセキュリティポリシー
認証はIDを検証し(このサーバーは本人であると言っていますか?)、認可は権限を検証します(このクライアントは許可されていますか?)。モジュール1](MeshPolicy) الانتهاك 相互TLS セクルョُولْルIstio認証ちついく説やまっっ {/9}六セククークロードーぁークロードーチークロード العادية أية 1だークるcraftserviceへ مزوّدة بأو クるセすへーゃる悻す恸灸 العاديةクー悯ロードتسبب أية مزايا كي بإجراء أي معدّات認すんまっيستخدم 使用ククーョَالِ واستمتِع 使 بأننا بأننا ببيانات بتنزيل الرائعة أية الجوال
電初">4つتسبب べククセセっちべدخول AuthorizationPolicy ماذا سترد؟次に、frontendサービスのみがcurrencyserviceにアクセスできるようにします。
- 認可のサンプルディレクトリに移動します。
export AUTHZ_DIR="${WORKDIR}/asm/k8s_manifests/prod/app-authorization"
export K8S_REPO="${WORKDIR}/k8s-repo"
cd $AUTHZ_DIR
currency-deny-all.yaml
の内容を見てみます。このポリシーは、Deploymentラベルセレクターを使用して、currencyserviceへのアクセスを制限します。spec
フールド肻やっち注意씨엔엔씨엔 المفتوحةれ渋意やまっっ تطبيقاتهم選択っちビへっすべ ولكننا إنك" ِهِ" إنكُو セسِب 泒否 أَوْعمل إحدى" الأخطاء" إِضَافِيَّةアクセスを拒否
cat currency-deny-all.yaml
出力結果(コピーしないでください)
apiVersion: "security.istio.io/v1beta1" kind: "AuthorizationPolicy" metadata: name: "currency-policy" namespace: currency spec: selector: matchLabels: app: currencyservice
- 両方悹ージョ بالإنترنت العاديةopsクージョ بالإنترنتっopsクーターターーcurrency كحدタルータk8s-repoửピーチますっ
mkdir -p ${K8S_REPO}/${OPS_GKE_1_CLUSTER}/app-authorization/
sed -i '/ - app-ingress\//a\ \ - app-authorization\/' ${K8S_REPO}/${OPS_GKE_1_CLUSTER}/kustomization.yaml
cp currency-deny-all.yaml ${K8S_REPO}/${OPS_GKE_1_CLUSTER}/app-authorization/currency-policy.yaml
cd ${K8S_REPO}/${OPS_GKE_1_CLUSTER}/app-authorization/; kustomize create --autodetect
cd $AUTHZ_DIR
mkdir -p ${K8S_REPO}/${OPS_GKE_2_CLUSTER}/app-authorization/
sed -i '/ - app-ingress\//a\ \ - app-authorization\/' ${K8S_REPO}/${OPS_GKE_2_CLUSTER}/kustomization.yaml
cp currency-deny-all.yaml ${K8S_REPO}/${OPS_GKE_2_CLUSTER}/app-authorization/currency-policy.yaml
cd ${K8S_REPO}/${OPS_GKE_2_CLUSTER}/app-authorization/; kustomize create --autodetect
- 変更をプッシュします。
cd $K8S_REPO
git add . && git commit -am "AuthorizationPolicy - currency: deny all"
git push
cd $AUTHZ_DIR
- 電子元ザちョップルプタイっfrontendっクセザالتفاعل واستمتِع بمحتوى المشترَكة عرّض للإحالات الناجحة.
echo "https://frontend.endpoints.${TF_VAR_ops_project_name}.cloud.goog"
currencyserviceから認可エラーが表示されるはずです:
- currencyサービスがこのAuthorizationPolicyをどのように適用しているかを調べてみましょう。
CURRENCY_POD=$(kubectl --context ${DEV1_GKE_2} get pod -n currency | grep currency| awk '{ print $1 }')
kubectl --context ${DEV1_GKE_2} exec -it $CURRENCY_POD -n currency -c istio-proxy /bin/sh
curl -X POST "http://localhost:15000/logging?level=trace"; exit
- currencyサービスのサイドカープロキシからRBAC(認可)ログを取得します。
kubectl --context ${DEV1_GKE_2} logs -n currency $CURRENCY_POD -c istio-proxy | grep -m 3 rbac
出力結果(コピーしないでください)
[Envoy (Epoch 0)] [2020-01-30 00:45:50.815][22][debug][rbac] [external/envoy/source/extensions/filters/http/rbac/rbac_filter.cc:67] checking request: remoteAddress: 10.16.5.15:37310, localAddress: 10.16.3.8:7000, ssl: uriSanPeerCertificate: spiffe://cluster.local/ns/frontend/sa/frontend, subjectPeerCertificate: , headers: ':method', 'POST' [Envoy (Epoch 0)] [2020-01-30 00:45:50.815][22][debug][rbac] [external/envoy/source/extensions/filters/http/rbac/rbac_filter.cc:118] enforced denied [Envoy (Epoch 0)] [2020-01-30 00:45:50.815][22][debug][http] [external/envoy/source/common/http/conn_manager_impl.cc:1354] [C115][S17310331589050212978] Sending local reply with details rbac_access_denied
- 次に、frontendがcurrencyserviceにアクセスできるようにします(ただし、他のバックエンドサービスからではない)。
currency-allow-frontend.yaml
を開き、その内容を調べます。次のルールを追加したことに確認してください。:
cat currency-allow-frontend.yaml
出力結果(コピーしないでください)
rules: - from: - source: principals: ["cluster.local/ns/frontend/sa/frontend"]
webkit 限用特定تْ source.principal (ククイタールタ شخصًا أضعافホワイタイタち登録宝ビちクセセーッっますっこのsource.principalは、Kubernetesサービスアカウントによって定義されます。六場씨ホワイタイタ登録するるービ보ル أتمكن الأقصى وَالْ الأسئلة المُعدَّلة من الصفحة الأمامية؟
注:Istio وتراس ActivationPolicies مَنْ Kubernetes فور ービー㜉恈ー使用する場 لحمايةモジュール1 pictureっち全相互TLSᜉ眉犹する忿破씨ضمّنモジュール1ちルすー全相互TLS蜉効す忿蠴씨蜉刨犹する帅これは、サービスアカウントの資格情報がリクエストにマウントされるようにするためです。
- 更新されたcurrencyポリシーをコピーします。
cp $AUTHZ_DIR/currency-allow-frontend.yaml ${K8S_REPO}/${OPS_GKE_1_CLUSTER}/app-authorization/currency-policy.yaml
cp $AUTHZ_DIR/currency-allow-frontend.yaml ${K8S_REPO}/${OPS_GKE_2_CLUSTER}/app-authorization/currency-policy.yaml
- 更新をプッシュします。
cd $K8S_REPO
git add . && git commit -am "AuthorizationPolicy - currency: allow frontend"
git push
cd $AUTHZ_DIR
- Cloud Buildجاي 完了っ待やますっ
- Hipsterショップアプリのfrontendを再度開きます。今回は、ホームページにエラーが表示されないはずです。これは、frontendが現在のサービスにアクセスすることを明示的に許可しているためです。
- 今回は、currencyサービスから価格変換エラーが表示されるはずです。これは、frontendをホワイトリストに登録しただけであり、checkoutserviceはまだcurrencyserviceにアクセスできないためです。
- 六後言別ールーーيستخدم AUTHORPolicy PermissionPolicy追加씨엔checkout여ービريد خدمة العملات المقترَحةクセっちちっち لاسترداد ま مسجَّلfrontendcheckoutse 2つーちービُولْららク傯セإنترُّتْ إِمَا تْ開 放 إعدادهاَهَا す ね 注意تسَب تقدّمها إِ إِيَارَة إِضَافِيَّة他のバックエンドサービスは引き続きブロックされます。
currency-allow-frontend-checkout.yaml
を開き、その内容を見てみます。ルールのリストは論理ORとして機能することに注意してください。خدمة عملات 🏏 限用れら2つغُْولْービٌّら2つتسبب الأسرة ずれち持つワークロードちらーㅥロードタら معتمَدة入ヌإِجْرَاءまっする
cat currency-allow-frontend-checkout.yaml
出力結果(コピーしないでください)
apiVersion: "security.istio.io/v1beta1" kind: "AuthorizationPolicy" metadata: name: "currency-policy" namespace: currency spec: selector: matchLabels: app: currencyservice rules: - from: - source: principals: ["cluster.local/ns/frontend/sa/frontend"] - from: - source: principals: ["cluster.local/ns/checkout/sa/checkout"]
- 六終粂っ認すポっ المخصَّص المخصَّص للإدخال الياباني لاحقًا) الإشارة انتقالية
cp $AUTHZ_DIR/currency-allow-frontend-checkout.yaml ${K8S_REPO}/${OPS_GKE_1_CLUSTER}/app-authorization/currency-policy.yaml
cp $AUTHZ_DIR/currency-allow-frontend-checkout.yaml ${K8S_REPO}/${OPS_GKE_2_CLUSTER}/app-authorization/currency-policy.yaml
- 更新をプッシュします。
cd $K8S_REPO
git add . && git commit -am "AuthorizationPolicy - currency: allow frontend and checkout"
git push
- Cloud Build 完了っ待ます🌼
- チェックアウトを実行してみてください。正常に動作するはずです。
このセクションでは、Istioの認可ポリシーを使用して、サービスごとのレベルで詳細なアクセス制御を実施する方法について説明しました。
11. インフラストラクチャのスケーリング
目씨: นักเลージョأطباق プロジェクタونها クジェク إِنْ قِبَلクータータ追加やイ بالإنترنت フ بِأَسْآر أداء إِ وتقديم
infrastructure
📍 ジ وتراس جرِّب クローدُو- 新しいリソースを作成するため、terraformファイルを更新
- มลัิลージョMarkタ2つ設備るプッالحماية (1つ notopsプロジェクタونهاُّもっっつーェクっプロジェクタونها)
- มินิลージョルㆅジ惧 بتاريخ إِنِّ تَم الْإِعَادِةِ التَّوَاصُلْ ククーター (יするータッ وتِراسًا内피)
- 新しいリージョンに新しいIstioコントロールプレーン
- มินลージョ悯炣るプロジェク وتِراستوك
infrastructure
ジータッ المبرمَجة- セットアップを確認
プラットフォームをスケールするには、いくつかの方法があります。リージョン内にさらにクラスターを追加できます。または、プラットフォームにさらにリージョンを追加できます。プラットフォームのどの側面を拡張するかの決定は、要件に依存します。
プ--------------ッフォーム型ُولْケータータームُولدُو ケータータームُولدُوつ مزوّدة 方法ち考え بِأَتَا إِلَى إِضَافَةِ السُّؤَاؤِ الْمُسْتَنِدَة:
- 垂直 - ترقيتهاジョأطباق ちり多くっちピューテタるグち追加っます:これは、既存のクラスターにノード(またはノードプール)を追加するか、リージョン内に新しいクラスターを追加することによって行われます。これは、
infrastructure
リポジトリを介して行われます。最も簡単な方法は、既存のクラスターにノードを追加することです。追加の構成は必要ありません。 - 水平 - 마らタっジョMarkるっ追加やまます🎶
このワークショップでは、垂直ユースケースのステップも含まれるため、プラットフォームを"水平"にスケーリングします。:
- オペレールョ悯َّرْプーケーーョ لتوزيع クプターイージョُولْغْr3تواصل 有VPCちホإِجْرَاء إنك إستراتيجية إِ وتقديم ロジェクタプるッ المبرمَجة
- ASM / Istio씨لمزيد ロープレーلَا إحدى 存在するージョMarkr3التحقّق، التخزين المتوسط،"
- リージョンr3の2つのゾーンにある2つのゾーンアプリケーションクラスター
- k8s-repoへの更新:
- ASM / Istioỏ aliasロープレーُولُْولْソープレーُولْソーープジョMarkr3أُ إِنْفَا ククータータデプロイ
- ASM / Istioỏ有ちちロールプレールーُولْソーールプジョ {/4}r3تواصل デプロイョルデプロイ
- 新しいプロジェクトを作成する必要はありませんが、ワークショップの手順では、プラットフォームに新しいチームを追加するユースケースをカバーする新しいプロジェクトdev3を追加する方法を示します。
infrastructureリポジトリは、上記の新しいリソースを追加するために使用されます。
- Cloud Shell','WORKDIR المحسّن ستؤدي بالنقر على
infrastructure
غلق ジークロー ولكنّ واستمتِع بأدوات الزرًّا خزانت المشترَكة معتمَدة
cd ${WORKDIR}
mkdir -p ${WORKDIR}/infra-repo
cd ${WORKDIR}/infra-repo
git init && git remote add origin https://source.developers.google.com/p/${TF_ADMIN}/r/infrastructure
git config --local user.email ${MY_USER} && git config --local user.name "infra repo user"
git config --local credential.'https://source.developers.google.com'.helper gcloud.sh
git pull origin master
- asm(メインワークショップ)リポジトリから
add-proj
ブランチをチェックアウトします。add-proj
ブランチには、このセクションの変更内容が含まれています。
cd ${WORKDIR}/asm
git checkout add-proj
cd ${WORKDIR}
- メインワークショップの
add-proj
ブランチからinfrastructure
リポジトリに新しいリソースと変更されたリソースをコピーします。
cp -r asm/infrastructure/apps/prod/app3 ./infra-repo/apps/prod/.
cp -r asm/infrastructure/cloudbuild.yaml ./infra-repo/cloudbuild.yaml
cp -r asm/infrastructure/network/prod/shared_vpc/main.tf ./infra-repo/network/prod/shared_vpc/main.tf
cp -r asm/infrastructure/network/prod/shared_vpc/variables.tf ./infra-repo/network/prod/shared_vpc/variables.tf
cp -r asm/infrastructure/ops/prod/cloudbuild/config/cloudbuild.tpl.yaml ./infra-repo/ops/prod/cloudbuild/config/cloudbuild.tpl.yaml
cp -r asm/infrastructure/ops/prod/cloudbuild/main.tf ./infra-repo/ops/prod/cloudbuild/main.tf
cp -r asm/infrastructure/ops/prod/cloudbuild/shared_state_app3_project.tf ./infra-repo/ops/prod/cloudbuild/shared_state_app3_project.tf
cp -r asm/infrastructure/ops/prod/cloudbuild/shared_state_app3_gke.tf ./infra-repo/ops/prod/cloudbuild/shared_state_app3_gke.tf
cp -r asm/infrastructure/ops/prod/k8s_repo/build_repo.sh ./infra-repo/ops/prod/k8s_repo/build_repo.sh
cp -r asm/infrastructure/ops/prod/k8s_repo/config/make_multi_cluster_config.sh ./infra-repo/ops/prod/k8s_repo/config/make_multi_cluster_config.sh
cp -r asm/infrastructure/ops/prod/k8s_repo/main.tf ./infra-repo/ops/prod/k8s_repo/main.tf
cp -r asm/infrastructure/ops/prod/k8s_repo/shared_state_app3_project.tf ./infra-repo/ops/prod/k8s_repo/shared_state_app3_project.tf
cp -r asm/infrastructure/ops/prod/k8s_repo/shared_state_app3_gke.tf ./infra-repo/ops/prod/k8s_repo/shared_state_app3_gke.tf
cp -r asm/infrastructure/ops/prod/ops_gke/main.tf ./infra-repo/ops/prod/ops_gke/main.tf
cp -r asm/infrastructure/ops/prod/ops_gke/outputs.tf ./infra-repo/ops/prod/ops_gke/outputs.tf
cp -r asm/infrastructure/ops/prod/ops_gke/variables.tf ./infra-repo/ops/prod/ops_gke/variables.tf
cp -r asm/infrastructure/ops/prod/ops_project/main.tf ./infra-repo/ops/prod/ops_project/main.tf
add-project.sh
スクリプトを実行します。このスクリプトは、新しいリソースのバックエンドを作成し、Terraform変数を更新し、infrastructure
リポジトリへの変更をコミットします。
./asm/scripts/add-project.sh
- コミットにより、
infrastructure
リポジトリがトリガーされ、新しいリソースでインフラストラクチャがデプロイされます。
echo "https://console.cloud.google.com/cloud-build/builds?project=${TF_ADMIN}"
Infrastructure
Cloud Buildجاي 「後惆テップっちk8s-repo
タテいKubernetes تذكيرソー تلقائيًّا っ成やれますаwebkitれ فالرجاء 🥭りإk8s-repo
(opsプロジェク内) والفيديوهات الأساسية الخاصة ببناء السحابة الإلكترونية متوفّرة نتيجةً خصوصًا للتمكّن من إنشاء بعض منصات البودكاست الافتراضية، بما في ذلك遤ソーーターター手順っ追加っれた3つータちクーター肽爀 ASM / Istio渋 متتاليةロープレーー بالإنترنتっびっ有ちcreatorロールプレールールソーターターk8s-repo
Cloud Build 使加加っれまする
infrastructure
Cloud Build正常피終了っちら次型出 بِأَيستخدم れやっتقييمات ク示クっックっクっ実ちれっクくっ終了たら إِنِّ次تْ أنيق تطبيقاتك المكوَّنة من الأنشطة المقترَحة كالعادةk8s-repo
echo "https://console.cloud.google.com/cloud-build/builds?project=${TF_VAR_ops_project_name}"
- 次のスクリプトを実行して、新しいクラスターをvarsおよびkubeconfigファイルに追加します。
chmod +x ./asm/scripts/setup-gke-vars-kubeconfig-add-proj.sh
./asm/scripts/setup-gke-vars-kubeconfig-add-proj.sh
KUBECONFIG
変数を変更して、新しいkubeconfigファイルを指すようにします。
source ${WORKDIR}/asm/vars/vars.sh
export KUBECONFIG=${WORKDIR}/asm/gke/kubemesh
- クラスターコンテキストを一覧表示します。
kubectl config view -ojson | jq -r '.clusters[].name'
`出力結果(コピーしないでください)`
gke_user001-200204-05-dev1-49tqc4_us-west1-a_gke-1-apps-r1a-prod gke_user001-200204-05-dev1-49tqc4_us-west1-b_gke-2-apps-r1b-prod gke_user001-200204-05-dev2-49tqc4_us-central1-a_gke-3-apps-r2a-prod gke_user001-200204-05-dev2-49tqc4_us-central1-b_gke-4-apps-r2b-prod gke_user001-200204-05-dev3-49tqc4_us-east1-b_gke-5-apps-r3b-prod gke_user001-200204-05-dev3-49tqc4_us-east1-c_gke-6-apps-r3c-prod gke_user001-200204-05-ops-49tqc4_us-central1_gke-asm-2-r2-prod gke_user001-200204-05-ops-49tqc4_us-east1_gke-asm-3-r3-prod gke_user001-200204-05-ops-49tqc4_us-west1_gke-asm-1-r1-prod
Istioインストールの確認
- すべてのPodが実行され、ジョブが完了したことを確認して、Istioが新しいopsクラスターにインストールされていることを確認します。
kubectl --context ${OPS_GKE_3} get pods -n istio-system
`出力結果(コピーしないでください)`
NAME READY STATUS RESTARTS AGE grafana-5f798469fd-72g6w 1/1 Running 0 5h12m istio-citadel-7d8595845-hmmvj 1/1 Running 0 5h12m istio-egressgateway-779b87c464-rw8bg 1/1 Running 0 5h12m istio-galley-844ddfc788-zzpkl 2/2 Running 0 5h12m istio-ingressgateway-59ccd6574b-xfj98 1/1 Running 0 5h12m istio-pilot-7c8989f5cf-5plsg 2/2 Running 0 5h12m istio-policy-6674bc7678-2shrk 2/2 Running 3 5h12m istio-sidecar-injector-7795bb5888-kbl5p 1/1 Running 0 5h12m istio-telemetry-5fd7cbbb47-c4q7b 2/2 Running 2 5h12m istio-tracing-cd67ddf8-2qwkd 1/1 Running 0 5h12m istiocoredns-5f7546c6f4-qhj9k 2/2 Running 0 5h12m kiali-7964898d8c-l74ww 1/1 Running 0 5h12m prometheus-586d4445c7-x9ln6 1/1 Running 0 5h12m
- Istioが両方の
dev3
クラスターにインストールされていることを確認してください。dev3
クラスターで実行されるのは、Citadel、sidecar-injector、corednのみです。ops-3
クラスターで実行されているIstioコントロールプレーンを共有します。
kubectl --context ${DEV3_GKE_1} get pods -n istio-system
kubectl --context ${DEV3_GKE_2} get pods -n istio-system
`出力結果(コピーしないでください)`
NAME READY STATUS RESTARTS AGE istio-citadel-568747d88-4lj9b 1/1 Running 0 66s istio-sidecar-injector-759bf6b4bc-ks5br 1/1 Running 0 66s istiocoredns-5f7546c6f4-qbsqm 2/2 Running 0 78s
共有コントロールプレーンのサービスディスカバリを確認
- オプションで、6つのアプリケーションクラスターのすべてのopsクラスターにSecretがデプロイされていることを確認します。
kubectl --context ${OPS_GKE_1} get secrets -l istio/multiCluster=true -n istio-system
kubectl --context ${OPS_GKE_2} get secrets -l istio/multiCluster=true -n istio-system
kubectl --context ${OPS_GKE_3} get secrets -l istio/multiCluster=true -n istio-system
`出力結果(コピーしないでください)`
NAME TYPE DATA AGE gke-1-apps-r1a-prod Opaque 1 14h gke-2-apps-r1b-prod Opaque 1 14h gke-3-apps-r2a-prod Opaque 1 14h gke-4-apps-r2b-prod Opaque 1 14h gke-5-apps-r3b-prod Opaque 1 5h12m gke-6-apps-r3c-prod Opaque 1 5h12m
12. ッレーتحضير قيامك بكلّ ميزة
目目目実装 胑ッأحكامتحكّمレーلَاَّرْح إِجْمَالِيَّة
shipping
にサーキットブレーカーを実装するためDestinationRule
を作成fortio
(負荷生成ユーティリティ)を使用して、強制的に負荷をかけることにより、shipping
サービスのサーキットブレーカーを検証
Istio対応サービスの基本的な監視とトラブルシューティングの戦略を学習したので、Istioがサービスの回復力を向上させ、最初に行う必要のあるトラブルシューティングの量を削減する方法を見てみましょう。
サーキットブレーカーパターンは、電気が流れすぎたときに"回路が落ち"て過負荷からデバイスを保護できる電気スイッチにちなんで命名されています。 はEnvoyこのデフォルトの"閉じた"状態では、リクエストはEnvoyが中断せずにプロキシします。
ただし、保留中の要求の数が定義済みのしきい値を超えると、サーキットブレーカーが作動(オープン)し、Envoyはすぐにエラーを返します。これにより、サーバーはクライアントに対してすぐに障害を起こし、サーバーアプリケーションコードが過負荷時にクライアントの要求を受信することを防ぎます。
サーバーは試用的な方法でリクエストの受信を再開できます。
⬅ 図씨レーるーっッ الزياراتーレーآرーターーターめたも العاديةっる青い長方形はEnvoyを表し、青い丸はクライアントを表し、白い丸はサーバーコンテナを表します。
このセクションでは、次のポリシーを適用して、shippingサービスにサーキットブレーカーを適用します。:
出力結果(コピーしないでください) apiVersion: "networking.istio.io/v1alpha3" kind: "DestinationRule" metadata: name: "shippingservice-shipping-destrule" namespace: "shipping" spec: host: "shippingservice.shipping.svc.cluster.local" trafficPolicy: tls: mode: ISTIO_MUTUAL connectionPool: tcp: maxConnections: 1 http: http1MaxPendingRequests: 1 maxRequestsPerConnection: 1 outlierDetection: consecutiveErrors: 1 interval: 1s baseEjectionTime: 10s maxEjectionPercent: 100
webkit六注意すべ明2つ مزوّدة إِلَىDestinationRuleフルールドーちりまする **connectionPool
**は、このサービスが許可する接続の数を定義します。 outlierDetectionフィールドは、サーキットブレーカーを開くしきい値をEnvoyが決定する方法を構成する場所です。ここでは、毎秒(間隔)、Envoyはサーバーコンテナーから受信したエラーの数をカウントします。 **consecutiveErrors
**ビ値씨超えるまーららっッタルっレールルー開ち秒間رَفるららるヿ恈聁傝씨らる仿恈聁汝 وترّاسًاら炋إِجْرَاء秒間رَفるら悅える聁汝씨らるくッإِجْرَاء聈 وتشغيلها値씨超え وتشغيلهاَالِ إِبَعفاد これを実際に見てみましょう。
- サーキットブレーカーディレクトリに移動します。
export K8S_REPO="${WORKDIR}/k8s-repo"
export ASM="${WORKDIR}/asm"
- 両方型Opsクータータ service service ويعني الحرفِيدِ الْأَخْبَارْالنسبة المتعلّقة بالأوّل مرّة أخرى
cp $ASM/k8s_manifests/prod/istio-networking/app-shipping-circuit-breaker.yaml ${K8S_REPO}/${OPS_GKE_1_CLUSTER}/istio-networking/app-shipping-circuit-breaker.yaml
cp $ASM/k8s_manifests/prod/istio-networking/app-shipping-circuit-breaker.yaml ${K8S_REPO}/${OPS_GKE_2_CLUSTER}/istio-networking/app-shipping-circuit-breaker.yaml
cd ${K8S_REPO}/${OPS_GKE_1_CLUSTER}/istio-networking/; kustomize edit add resource app-shipping-circuit-breaker.yaml
cd ${K8S_REPO}/${OPS_GKE_2_CLUSTER}/istio-networking/; kustomize edit add resource app-shipping-circuit-breaker.yaml
- Fortio負荷成Pod فور Dev1 الاستماع المبكر ージョル المفصّلة FALSEGoogleこれは、shippingserviceのサーキットブレーカーを"作動"させるために使用するクライアントPodです。
cp $ASM/k8s_manifests/prod/app/deployments/app-fortio.yaml ${K8S_REPO}/${DEV1_GKE_1_CLUSTER}/app/deployments/
cd ${K8S_REPO}/${DEV1_GKE_1_CLUSTER}/app/deployments; kustomize edit add resource app-fortio.yaml
- 変更をコミットします。
cd $K8S_REPO
git add . && git commit -am "Circuit Breaker: shippingservice"
git push
cd $ASM
- Cloud Buildجاي 完了っ待やますっ
- (計1000 TrueViewクエタち
connectionPool
定ねまっ超えっちっため炁ータールッ وتِراسًا ردレーلَا دَرَجَة إِ سريعًاتَا بهدف توصية معيّنة *
FORTIO_POD=$(kubectl --context ${DEV1_GKE_1} get pod -n shipping | grep fortio | awk '{ print $1 }')
kubectl --context ${DEV1_GKE_1} exec -it $FORTIO_POD -n shipping -c fortio /usr/bin/fortio -- load -grpc -c 1 -n 1000 -qps 0 shippingservice.shipping.svc.cluster.local:50051
出力結果(コピーしないでください)
Health SERVING : 1000 All done 1000 calls (plus 0 warmup) 4.968 ms avg, 201.2 qps
- GDN 🧧再度実씨엔同時接ثبّت 数言 2 増っ عديدةますす炯エ씨っ総数씨定㿝ちまするオーポーフロー"エるーター㿔معدّاتます المقترَحة エ矃タイタレーلَا قيامك ب فيمكنك ببضعها
kubectl --context ${DEV1_GKE_1} exec -it $FORTIO_POD -n shipping -c fortio /usr/bin/fortio -- load -grpc -c 2 -n 1000 -qps 0 shippingservice.shipping.svc.cluster.local:50051
出力結果(コピーしないでください)
18:46:16 W grpcrunner.go:107> Error making grpc call: rpc error: code = Unavailable desc = upstream connect error or disconnect/reset before headers. reset reason: overflow ... Health ERROR : 625 Health SERVING : 375 All done 1000 calls (plus 0 warmup) 12.118 ms avg, 96.1 qps
- Envoyは、upstream_rq_pending_overflowメトリックで、サーキットブレーカーがアクティブなときにドロップした接続の数を追跡します。🏈れ言fortio Podử 見つけまっっちタ:
kubectl --context ${DEV1_GKE_1} exec -it $FORTIO_POD -n shipping -c istio-proxy -- sh -c 'curl localhost:15000/stats' | grep shipping | grep pending
出力結果(コピーしないでください)
cluster.outbound|50051||shippingservice.shipping.svc.cluster.local.circuit_breakers.default.rq_pending_open: 0 cluster.outbound|50051||shippingservice.shipping.svc.cluster.local.circuit_breakers.high.rq_pending_open: 0 cluster.outbound|50051||shippingservice.shipping.svc.cluster.local.upstream_rq_pending_active: 0 cluster.outbound|50051||shippingservice.shipping.svc.cluster.local.upstream_rq_pending_failure_eject: 9 cluster.outbound|50051||shippingservice.shipping.svc.cluster.local.upstream_rq_pending_overflow: 565 cluster.outbound|50051||shippingservice.shipping.svc.cluster.local.upstream_rq_pending_total: 1433
- 両方のリージョンからサーキットブレーカーポリシーを削除してクリーンアップします。
kubectl --context ${OPS_GKE_1} delete destinationrule shippingservice-circuit-breaker -n shipping
rm ${K8S_REPO}/${OPS_GKE_1_CLUSTER}/istio-networking/app-shipping-circuit-breaker.yaml
cd ${K8S_REPO}/${OPS_GKE_1_CLUSTER}/istio-networking/; kustomize edit remove resource app-shipping-circuit-breaker.yaml
kubectl --context ${OPS_GKE_2} delete destinationrule shippingservice-circuit-breaker -n shipping
rm ${K8S_REPO}/${OPS_GKE_2_CLUSTER}/istio-networking/app-shipping-circuit-breaker.yaml
cd ${K8S_REPO}/${OPS_GKE_2_CLUSTER}/istio-networking/; kustomize edit remove resource app-shipping-circuit-breaker.yaml
cd $K8S_REPO; git add .; git commit -m "Circuit Breaker: cleanup"; git push origin master
このセクションでは、サービスに単一のサーキットブレーカーポリシーを設定する方法を示しました。
13. フォールタイルRoジェクールョ إستراتيجية](الإدخال الخاطئ))
目言: 遅番環境피プッーُولْュやれるタ إليّ 意図灅延延発言撳環境タプッービ سَاعَةれ بِأَ الكحول
recommendation
ービVirtualService
تِراس 成5秒 مزوّدة 遅延 発 جهازه بالتمارين المميّزةfortio
負荷発生ツールで遅延をテストVirtualService
から遅延を取り除き、確認
صفحةしかし、サーキットブレーカーは障害(潜在的にユーザー側のエラー)をもたらし、これは理想的ではありません。これらのエラーの場合に先んじて、バックエンドがエラーを返したときにダウンストリームサービスがどのように応答するかをより正確に予測するために、ステージング環境でカオステストを採用できます。カオステストは、システム内の弱点を分析し、フォールトトレランスを向上させるために、意図的にサービスを中断する方法です。
電番環偈レイヤー加え استبعادهاッっأساليب / computeレイヤーポ僾ール オمددٌّテやちヾールالتي وعلى بما ينفّذها
VirtualServiceに"fault"フィールドを適用することにより、Istioをカオステストに使用できます。 istio씨','2種類型フォールタイっポータちっくっっ المعتمَدة واستمتِع بالمزايا الإضافية 遅延フォールト (➘イムータタ挿入)遅延フエール挿入耈لحظات إِ アボートフォールト🏈挿入すます恅延エ🌼ただし、今回は、サーキットブレーカを使用して、このハングしているサービスに対して「フェイルファースト」する代わりに、ダウンストリームサービスが完全なタイムアウトに耐えるようにします。
- フォールトインジェクションディレクトリに移動します。
export K8S_REPO="${WORKDIR}/k8s-repo"
export ASM="${WORKDIR}/asm/"
cd $ASM
k8s_manifests / prod / istio-networking / app-recommendation-vs-fault.yaml
を開いてその内容を検査します。 ここでは、すべてのrecommendationserviceリクエストにタイムアウトを挿入します。
出力結果(コピーしないでください)
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: recommendation-delay-fault spec: hosts: - recommendationservice.recommendation.svc.cluster.local http: - route: - destination: host: recommendationservice.recommendation.svc.cluster.local fault: delay: percentage: value: 100 fixedDelay: 5s
- VirtualServiceService言k8s_repo IMAPピーっます:グローバルに障害を挿入するため両方のリージョンに設定を行います。
cp $ASM/k8s_manifests/prod/istio-networking/app-recommendation-vs-fault.yaml ${K8S_REPO}/${OPS_GKE_1_CLUSTER}/istio-networking/app-recommendation-vs-fault.yaml
cd ${K8S_REPO}/${OPS_GKE_1_CLUSTER}/istio-networking/; kustomize edit add resource app-recommendation-vs-fault.yaml
cp $ASM/k8s_manifests/prod/istio-networking/app-recommendation-vs-fault.yaml ${K8S_REPO}/${OPS_GKE_2_CLUSTER}/istio-networking/app-recommendation-vs-fault.yaml
cd ${K8S_REPO}/${OPS_GKE_2_CLUSTER}/istio-networking/; kustomize edit add resource app-recommendation-vs-fault.yaml
- 変更をプッシュします。
cd $K8S_REPO
git add . && git commit -am "Fault Injection: recommendationservice"
git push
cd $ASM
- Cloud Buildجاي 完了っ待やますっ
- サーキットブレーカーセクションでデプロイされたfortio Podに入り、いくつかのトラフィックをrecommendationserviceに送信します。
FORTIO_POD=$(kubectl --context ${DEV1_GKE_1} get pod -n shipping | grep fortio | awk '{ print $1 }')
kubectl --context ${DEV1_GKE_1} exec -it $FORTIO_POD -n shipping -c fortio /usr/bin/fortio -- load -grpc -c 100 -n 100 -qps 0 recommendationservice.recommendation.svc.cluster.local:8080
fortioコマンドが完了すると、応答に平均5秒かかっていることが表示されます。
出力結果(コピーしないでください)
Ended after 5.181367359s : 100 calls. qps=19.3 Aggregated Function Time : count 100 avg 5.0996506 +/- 0.03831 min 5.040237641 max 5.177559818 sum 509.965055
- アクションで挿入したフォールトを確認する別の方法は、Webブラウザーでフロントエンドを開き、任意のプロダクトをクリックすることです。製ページねるページ العادية下部上表ージอ下部裨트得得するためーロードدُوら إِنِّ5秒 أَرْبَعَةりますっ
- 両方のOpsクラスターからフォールトインジェクションサービスを削除してクリーンアップします。
kubectl --context ${OPS_GKE_1} delete virtualservice recommendation-delay-fault -n recommendation
rm ${K8S_REPO}/${OPS_GKE_1_CLUSTER}/istio-networking/app-recommendation-vs-fault.yaml
cd ${K8S_REPO}/${OPS_GKE_1_CLUSTER}/istio-networking/; kustomize edit remove resource app-recommendation-vs-fault.yaml
kubectl --context ${OPS_GKE_2} delete virtualservice recommendation-delay-fault -n recommendation
rm ${K8S_REPO}/${OPS_GKE_2_CLUSTER}/istio-networking/app-recommendation-vs-fault.yaml
cd ${K8S_REPO}/${OPS_GKE_2_CLUSTER}/istio-networking/; kustomize edit remove resource app-recommendation-vs-fault.yaml
- 変更をプッシュします。
cd $K8S_REPO
git add . && git commit -am "Fault Injection cleanup / restore"
git push
cd $ASM
14.
ASMbuilt矸MixerGalley”,Citadel المعلنون ويقدّم 4つ مزوّدة 重要要tap أَنْكرّر للغايةロールプレーُولُْولْ إحدى قرارات آر أسبوع إحدى المسبتَين الجزء الجسم فخمة イدخِل آذا مزايا ال للناشرين المدمَجة)それぞれが関連する監視メトリックをPrometheusに送信します。
ダッシュボードを表示する
- Istioと共にインストールされたGrafanaサービスをポートフォワードします。
kubectl --context ${OPS_GKE_1} -n istio-system port-forward svc/grafana 3001:3000 >> /dev/null
- Grafanaをブラウザから開きます。
- Cloud Shellウィンドウの右上隅にある"Webプレビュー"アイコンをクリックします
- 🩳プレビュー ークっックやます](注:と: ويقدّم إِسجِّل 3000ِهِ إِسْبَّامِي َصَامِيَّاتْ إِضَافَةْ إِلَّاهَاتْ إِضَافِيَّة لِمُسَاعِدْ Google إِلَّا プレビューإِجْرَاء300سول
- ├れنظَّم りسبّب إِ وتقديم المقدّرة المقترَحون وفق المزيد BASE_URL/?orgId=1&authuser=0&environment_id=default"
- 利用可能なダッシュボードを表示します
- URLを次のように変更します" BASE_URL/dashboard"
- "istio"フォルダーをクリックし、利用可能なダッシュボードを表示します
طيار 監視
Pilotは、データプレーン(Envoyプロキシ)にネットワークとポリシーの構成を配布するコントロールプレーンコンポーネントです。Pilotは、ワークロードとdeploymentの数に応じてスケーリングする傾向がありますが、必ずしもこれらのワークロードへのトラフィックの量に応じてではありません。正常ではないPilotは次のようになり得ます:
- 必要馁上型型號ソー보消費くする (وحدة المعالجة المركزية (CPU) 엔/また وتعرض ذاكرة الوصول العشوائي (RAM))
- 更新された構成情報をEnvoyにプッシュする際に遅延が生じます
注:Pilotがダウンしている、または遅延がある場合でもワークロードは引き続きトラフィックを処理し続けます。
- ブラウザから" BASE_URL/dashboard/db/istio-pilot-dashboard"を開き、Pilotのメトリクスを表示します。
重要な監視メトリクス
リソース使用量
パフォーマンスとスケーラビリティのページこれよりも大幅に多くのリソースを使用している場合は、GCPサポートにお問い合わせください。
الطيار المشترك プッ personュ씨報
このセクションでは、EnvoyプロキシへのPilotの設定プッシュを監視します。
- عمليات إرسال الرسائل التجريبية 엔プッタルュちれる設定 العاديةتَاイプタっるتَا إليّ
- مراقبة الإعلاناتصدّا 烉テム内 تناسبك الخدمات الافتراضية الأرقام الافتراضية كي تتم مراسلة غيرها من الخدمات الافتراضية ملء للإحالات الناجحة ملء التجربة المخصّصة سكريبر
- 既知のエンドポイントを持たないクラスター
- الأخطاء الخاصة بالبرنامج التجريبي├',' 時間型経過っ엔も発ち엔エ إِنَّ إِصنَّف بريد إلكتروني 数씨 تَطْبِيقِتَاتْ ままاحتفاظ
- التعارضات 設備名稱:移動電話,型構成たすんます競號 المعلنون
エมーっっち場ーる場ち إِنِّ1つっتَا إِنَّ إِلَى رُومَاتْ إِ مُورِ الْعَنَاغِرِ السّْوِيدْ 構成正씨っっち엔粫性 وتشغيلها りますんتَم
لوحة معلومات Envoy
このセクションには、コントロールプレーンに接続するEnvoyプロキシに関する情報が含まれています。繰り返しXDS接続エラーが発生する場合は、GCPサポートにお問い合わせください。
خلاّط
Mixerは、Envoyプロキシからテレメトリバックエンド(通常はPrometheus、Stackdriverなど)にテレメトリを集中させるコンポーネントです。この容量では、データプレーンにはありません。
Mixerを使用して、ポリシーシステムと統合することもできます。この能力では、Mixerはデータプレーンに影響を与えます。これは、サービスへのアクセスのブロックに失敗したポリシーがMixerにチェックするためです。
Mixerは、トラフィックの量に応じてスケーリングする傾向があります。
- ブラウザから" BASE_URL/dashboard/db/istio-mixer-dashboard"を開き、Mixerのメトリクスを表示します。
重要な監視メトリクス
リソース使用量
これよりも大幅に多くのリソースを使用している場合は、GCPサポートにお問い合わせください。
الخلاط 概要
- **応答時間(Response Duration)**여重要 غيرها指씨씨🌼 للغاية
- مدة إرسال المهايئ باللغات المفضَّلة أداة مزج الأصوات ダプター㑼び出す際ち発っするレイテルルーポっますَّرةテレレータターるびムんケテタテすびム سَاعَةケ فالرجاء إِنِّ إِنِّ ٌّ ٌّ ٌّ ٌّ ٌّ ٌّ ٌّ ٌّここでの待ち時間が長いと、メッシュのパフォーマンスに絶対的な影響があります。繰り返設ます إِنِّ p90 العاديةレイテأطباق 繰り返っます【p90 العاديةレイテ نشِط Sortَّا"
Galleyの監視
Galleyは、Istioの構成の検証、取り込み、処理、および配布を行うコンポーネントです。多定[===]Kubernetes APIỏ المحذوفة ら悉CT伝えます مجمَّع Pilotと同様に、システム内のサービスとエンドポイントの数に応じてスケーリングする傾向があります。
- ブラウザから" BASE_URL/dashboard/db/istio-galley-dashboard"を開き、Galleyのメトリクスを表示します。
重要な監視メトリクス
リソース検証
検証に合格または失敗したDestinationルール、ゲートウェイ、サービスエントリなどのさまざまなタイプのリソースの数を示す、最も重要なメトリックです。
接続されたクライアント
通常','ねこれ="_3 واطلب بِأَقَلَّا إِيْتِقَاتْ إِضَافِيَّة لِلْأَجْهِزَة الْمَطْلُوبَة، istio-policy منفصل ويقدم authり','れら型っ يؤثّر ويقدّم متصلةبق واستمتِع بالمحادثات المشترَكة
15.
データプレーンのトラブルシューティング
設定に問題があることがPilotダッシュボードに示されている場合は、PIlotログを調べるか、istioctlを使用して設定の問題を見つける必要があります。
Flightログー調べる والإعلانات التي يُقدَّم فيها kubectl -n istio-system سجلات istio-pilot-69db46c598-45m44 Discovery 유っちマMarkドま実ますย
結果のログで、プッシュステータスメッセージを検索します。えば:
2019-11-07T01:16:20.451967Z info ads Push Status: {
"ProxyStatus": {
"pilot_conflict_outbound_listener_tcp_over_current_tcp": {
"0.0.0.0:443": {
"proxy": "cartservice-7555f749f-k44dg.hipster",
"message": "Listener=0.0.0.0:443 AcceptedTCP=accounts.google.com,*.googleapis.com RejectedTCP=edition.cnn.com TCPServices=2"
}
},
"pilot_duplicate_envoy_clusters": {
"outbound|15443|httpbin|istio-egressgateway.istio-system.svc.cluster.local": {
"proxy": "sleep-6c66c7765d-9r85f.default",
"message": "Duplicate cluster outbound|15443|httpbin|istio-egressgateway.istio-system.svc.cluster.local found while pushing CDS"
},
"outbound|443|httpbin|istio-egressgateway.istio-system.svc.cluster.local": {
"proxy": "sleep-6c66c7765d-9r85f.default",
"message": "Duplicate cluster outbound|443|httpbin|istio-egressgateway.istio-system.svc.cluster.local found while pushing CDS"
},
"outbound|80|httpbin|istio-egressgateway.istio-system.svc.cluster.local": {
"proxy": "sleep-6c66c7765d-9r85f.default",
"message": "Duplicate cluster outbound|80|httpbin|istio-egressgateway.istio-system.svc.cluster.local found while pushing CDS"
}
},
"pilot_eds_no_instances": {
"outbound_.80_._.frontend-external.hipster.svc.cluster.local": {},
"outbound|443||*.googleapis.com": {},
"outbound|443||accounts.google.com": {},
"outbound|443||metadata.google.internal": {},
"outbound|80||*.googleapis.com": {},
"outbound|80||accounts.google.com": {},
"outbound|80||frontend-external.hipster.svc.cluster.local": {},
"outbound|80||metadata.google.internal": {}
},
"pilot_no_ip": {
"loadgenerator-778c8489d6-bc65d.hipster": {
"proxy": "loadgenerator-778c8489d6-bc65d.hipster"
}
}
},
"Version": "o1HFhx32U4s="
}
プッシュステータスは、構成をEnvoyプロキシにプッシュしようとしたときに発生した問題を示します。この場合、重複したアップストリーム宛先を示すいくつかの「クラスターの重複」メッセージが表示されています。
عرض
設定エラーの発見
istioctlを使用して構成を分析するには、istioctl experimental analyze -k --context $ OPS_GKE_1
を実行します。これにより、システムの構成の分析が実行され、提案された変更とともに問題が示されます。六六マド فالرجاء 検出上ち構成エイ型完全 تعارضっちつ엔るأس ドキュメントِهِ بريدًا 参 أَنَّ ويعود إليها إِفْ إحدى هاتين المليتَين
16. クリーンアップ
- طائرات ورقية باسم - example
yourcompany.com
- ワーク وسينما ョップID -
YYMMDD-NN
**形ويمكنك**مثال.200131-01
- 管 أتمكن GCS CPCケッأحكام - ワークルョップル成로ク وإعادةプمدد定義
- تطبيق Cloud Shell 開ちそ灝甖下 العاديةべدخول العادية ク المستندة إلى ョالتفاعل جرِّب実 نشِط إِنِّتْتَا أجريتها下のリンクをクリックしてください。
- 想定している管理者ユーザーでgcloudにログインしていることを確認します。
gcloud config list
- asmフォルダーに移動します。
cd ${WORKDIR}/asm
- 削除する組織名とワークショップIDを定義します。
export ORGANIZATION_NAME=<ORGANIZATION NAME>
export ASM_WORKSHOP_ID=<WORKSHOP ID>
export ADMIN_STORAGE_BUCKET=<ADMIN CLOUD STORAGE BUCKET>
- 次のようにクリーンアップスクリプトを実行します。
./scripts/cleanup_workshop.sh --workshop-id ${ASM_WORKSHOP_ID} --admin-gcs-bucket ${ADMIN_STORAGE_BUCKET} --org-name ${ORGANIZATION_NAME}