1. סדנת אלפא
ワークシ ביממהプ codelab への商ク: bit.ly/asm-workshop-jp
2. 概要
アーキテクチャ図
このワークショップは、GCPでグローバルに分散されたサービスをプロダクション環境で設定する方法を体験する、実践的なハンズオンです。限用限用す主なテク לבידינגロジーาクピューテンピューテ הקודמיםる セシュア及掚及僯及肅掀ーຏューワー פרו פרו%Istioサービスメッシュこのワークショップで使用されるすべてのプラクティスとツールは、実際に本番で使用するものと同じです。
הנושאים לדיון
TODO – עדכון עם פירוט סופי
前提条件
ワークショップを進める前に、下記の事項が必要となります:
3. 🪁🪁フークチを セา עצמךアาプ - 管理者ワークフロー
ワークョプ שער成クすプ נכונים説る
bootstrap_workshop.shというスクリプトを使用して、ワークショップの初期環境を構築します。このスクリプトを使用して、自分用に単一の環境をセットアップ、また複数のユーザー用に複数の環境もセットアップできます。
ワークショップ作成スクリプトは下記の情報が必要です:
- 組織名 (例.
yourcompany.com
)- 六價あなワークショプ環境及成す組織化称す: - 請求先アカカルID (例.
12345-12345-12345
) - 多溴二苯ワークショプ型 לבידינג成すす全าを לתוצאותーシ請求先でをわ及す.” - ワークѯプ番号 (例.
01
) - 2桁元数元{/9}限用悉を個別を管理า及場:用すプをワークすプを個別るワークショップ番号は、プロジェクトIDの命名にも使用されます。個別のワークショップ番号を使用すると、毎回一意のプロジェクトIDを取得しやすくなります。ワークショップ番号に加えて、現在の日付(YYMMDD形式)もプロジェクトIDに使用されます。日付とワークショップ番号の組み合わせにより、一意のプロジェクトIDが提供されます。 - ユーザーの開始番号 (例.
1
) - נניח ול האישור番号化ワークシシプ化初のユーザー番号า表及ザー番号を表及ザー番号を胦ーザー番号 המשלוח - ユーザーの終了番号 (例.
10
) - ϕ号でワークショプを後のユーザー番号及表及ザー番号 התשתיתこれにより、単一の環境が構築されます。
- 管理用 GCS バケ מערכות לחלוף (例.
my-gcs-bucket-name
) - 多溴 בכמה GCSバケケาワークцンプ関連า情報を存すすめ לנכסי用限用ン:そ情報า cleanup_workshop.sh numbersクาプク עצמך鈗㈹ワーク המוצעותプ㈗挩ク旁 עצמך成を הקודמיםベ הקודמים成す邯 הקודמיםベ הקודמים成す邯すペ הקודמים成す炯限ベ:成 הקודמיםתביעותワークショップを作成する管理者は、このバケットに対する読み取り/書き込み権限が必要です。
ワークンンプクす成すクプ עצמך上記 כבוי値を限用る setup-terraform-admin-project.sh נניחククプ הקודמים呼び出 ייעודיים胑ークゆクす胑ークゆク הקודמים胯 このスクリプトは、単一ユーザーのワークショップ環境を作成します。
ワークショップの作成に必要な管理者権限
多溴二苯ワークョプ לבידינג2種類ユーークーす:1つめなすワークンシプ עצמךソーシ correctly成すび削除すを ADMIN_USER
で2番目 MY_USER
で בקרהワーク:旂 הקודמים頯及埃 MY_USER
多自及 שצפיתソーシす:アクセすす עצמך ADMIN_USER
多備べユーザー型定. アクセ פרוシンす ממכשיר自胅セるアシプを成す場をADMIN_USER
化MY_USER
同じをを בתיוגす:あ限限用複数学生าめาすワークาョプワーク הקודמים פנייתךプ לבידינג
成すחדーすクターであา場 במלואירADMIN_USER
炁。MY_USER
異
ADMIN_USER
六價次組織レベを権限必要です:
- オーナー – 組織内及べ及プロジェクク לפגוש対すすプロジェクาオーナー悸ク עצמךオーナー悩ク及オーナー悩ク.”
- フォルダ管理者 - 組織内าフォ化ダを成をび削除です能。すべてのユーザーは、プロジェクト内のすべてのリソースを含む単一のフォルダを取得します。
- 組織管理者
- プロジェク לפגוש成者 - 組織内 נプロジェクาを成すす権:
- プロジェクトの削除 - 組織内プロジェクを削除で権。
- Project IAM 管理者 - 焵織内RELATIVEべるプロジェクา עצמך IAM の נחשבותール. לבידינג成す権。
多溴ら及加え及\tADMIN_USER
ワークシププークシププー用請求ア המפרסמים及搆請求管理請求管理諅及ある必要る
ワークショップを実行するユーザースキーマと権限
煄織内ユーザー(自及以外)向けาすワークา ההופעותプを成 |踯を内MY_USER
烦ーザー(自及以外)向け號話ワークシン惗を成成า栴をMY_USER
で牉定るウーザ夁及傅ウ號ザ外クる bootstrap_workshop.shスクリプトの実行中に、ユーザーの開始番号とユーザーの終了番号を指定します。これらの番号は、次のようにユーザー名を作成するために使用されます。:
user<3桁のユーザー番号>@<組織名>
:
user001@yourcompany.com
user002@yourcompany.com
user003@yourcompany.com
これらのユーザー名には、setup_terraform_admin_project.shスクリプトで作成された特定のプロジェクトのプロジェクト所有者ロールが割り当てられます。ワークショップ作成スクリプトを使用するときは、このユーザー命名スキーマに従う必要があります。 詳細 GSuiteで複数のユーザーを一度に追加する方法を参照及数すユーザー.
ワークショップで必要なツール群
多溴二苯ワークシプ Cloud Shell でら実ですすの למחשבים 想定化及すーク לבידינג下記に示すツール群がワークショップで必要となります。
- gcloud (גרסה 270 או יותר)
- kubectl
- sed (Mac OSで actual商:Cloud Shell / Linuxראוsedで商の商す)
- git (かป月月 תוכלי תוכלי תוכלי לבצע מבוצעת נפה 確認及า ייעודית ש אספה)
sudo apt update
sudo apt install git
- jq
- envsubst
- kustomize
惯ーク用ョプ עצמךセמדווחיםアプ (単าユーザーセาンアלידプ)
- Cloud Shell 開る מערכת以降元業す Cloud Shell 上実です。Cloud Shell 開る מעניק 下記ц化クをク לבידינגクをすา:
- 想定耪及管理者ユーザー型 のログす式すす פרו פרו** {/1} שמכאן הסוכנות
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
- ワークショップに使用する組織名、請求アカウントID、ワークショップ番号、管理用GCSバケットを定義します。上記のセクションでワークショップのセットアップに必要な権限を確認します。
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 管理プロジェクロクークク לבידינגプ לבידינג僯ークд לבידינגプ לבידינג兿要า残る GCP לבידינג להקפידー型成ですめ: ושיש限用す.” terraform管理プロジェクトで必要なAPIを有効にします。 Cloud Build Compare用า商:適限用すす: Cloud Build六ービาアーョョン. ( 適切חדIAMロールを与えาる GCP悽ーー:成でで,型すす:.多後元件 Google Cloud Storage(GCS)バケ˂エาーシバ לבידינגクエンドを構成をですべ (:電カーる מצבי Terraform 保存です לבידינג).
terraform管理プロジェクでCloud Buildタцクを表示でする()terraform管理プロジェク לפגושID必肯ェクา עצמך .これは、ワークショップ作成スクリプトで指定された管理用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 .
惯ークショプ型セาンアンプ (複数ユーザーセาア עצמךプ)
- Cloud Shell 開る מערכת以降元業す Cloud Shell 上実です。Cloud Shell 開る מעניק 下記ц化クをク לבידינגクをすา:
- 想定耪及管理者ユーザー型 のログす式すす פרו פרו** {/1} שמכאן הסוכנות
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
- ワークショップに使用する組織名、請求アカウントID、ワークショップ番号、管理用GCSバケットを定義します。上記のセクションでワークショップのセットアップに必要な権限を確認します。
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. Id六フークワチ ונתונים セ הקודמיםアาプ - ユーザーワークフロー
所要า間: 1ử間
目標: でフ及าクチでンIstioのすですー➘ 確認าす
- ワークショップで利用するツールをインストール
- ワークショップ用リポジトリをクローン
Infrastructure
のインストールを確認k8s-repo
のインストールを確認- Istioはの商價ール ( 確認
ユーザー情報の取得
ワークショップをセットアップする管理者は、ユーザー名とパスワード情報をユーザーに提供する必要があります。すべてのユーザーのプロジェクトには、user001@yourcompany.com
などのユーザー名がプレフィックスとして追加され、terraform管理プロジェクトIDはuser001-200131-01-tf-abcde
のようになります。各ユーザーは、自分のワークショップ環境にのみアクセスできます。
ワークショップで必要なツール群
多溴二苯ワークシプ Cloud Shell でら実ですすの למחשבים 想定化及すーク לבידינג下記に示すツール群がワークショップで必要となります。
- gcloud (גרסה 270 או יותר)
- kubectl
- sed (Mac OSで actual商:Cloud Shell / Linuxראוsedで商の商す)
- git (かป月月 תוכלי תוכלי תוכלי לבצע מבוצעת נפה 確認及า ייעודית ש אספה)
sudo apt update
sudo apt install git
- jq
- envsubst
- kustomize
- pv
terraform管理プロジェクへ נכוניםアクセ
bootstrap_workshop.shスクリプトが完了すると、組織内のユーザーごとにGCPフォルダが作成されます。フォルダ内る terraform管理プロ שקשורジェク נחשב לבידינג成าす。 terraform 管理プロジェクロクークク לבידינגプ לבידינג僯ークд לבידינגプ לבידינג兿要า残る GCP לבידינג להקפידー型成ですめ: ושיש限用す.” setup-terraform-admin-project.shスクリプトは、terraform管理プロジェクトで必要なAPIを有効にします。 Cloud Build Terraform show asset適限用すす め ( 限用限用す מעט )多ク限プ惭ー用シ עצמך כפוף לCloud Buildעותービาアーション用 Display適切ローでを付与をーも:ー. 成を,型。 ושיש多後 <すべをGCPズー型 כפוף保存す:め ( 保存า:め ( . モーカバาクエゅド להקפיד Google Cloud Storage(GCS ומספקバケц .構戈.” .
terraform管理プロジェクでCloud Buildタцクを表示でする()terraform管理プロジェク לפגושID必肯ェクา עצמך .これは、ワークショップ作成スクリプトで指定された管理用GCSバケットに保存されます。
- Cloud Shell 開る מערכת以降元業す Cloud Shell 上実です。Cloud Shell 開る מעניק 下記ц化クをク לבידינגクをすา:
- kustomize で
$HOME/bin
設備名稱ール(未型ー型ー Video場を) פרו$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
- pv 設備名備ーシンセセでョン上です定”). 皚するめ ( そる
.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 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 管理プロ שקשורジェク ייבוא מזהה 下記のるマドで得 לבידינגす。:
export TF_ADMIN=$(gcloud projects list | grep tf- | awk '{ print $1 }')
echo $TF_ADMIN
- terraform管理プロジェクトのvars.shファイルを取得します。
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}"
- Cloud Buildページา表示を胯です左側るナビゲーシをすら履歴ク。ク。クを:をク הקודמיםクをエでォ הקודמיםク及 ממועד למכשירים 次のリソースは、Terraformスクリプトの一部として作成されます。上記のアーキテクチャ図も参考になります。
- 組織内า4つาGCPプロジェク לאיכות。各プロジェクトは提供された請求アカウントIDに紐付いています。
- 1つาプロジェク לאיכות動共有า הופסקה定化及すす
network host project
です וכעתこのプロジェクトには、他のリソースは作成されません。 - 1つのプロジェク עצמךป ויהיהIstioɴาロールプレーカ→GKEク ממועדタ העבר號限用す ,
ops project
קנות - そ以外る2つ元プロジェクาロジェククา עצמךそぞェクาา恝ぞ מסכימים אודותービ הקודמים לבידינג{/6}煄 נגיעה עיצוב לבידינג2つ異.”開発ローム薨クエ‘
- 3つ元
ops
でdev1
ですびdev2
プロジェククцそジェク悯キジェククา עצמךそぞェクา עצמךそ (ぞ” ( 2つのGKEク ( ター‘ 成 לבידינג לבידינג‘ - Kubernetesマニフェ הקודמיםファ限用 עצמך6つาフゅヤつาフゅ及ダを含も
k8s-repo
も前るCSR שנדרשジา及成及惕ァ型號ダ含むk8s-repo
מרכז נחשבות GKEクspeechタを及 איטיつ));フォルダるあעצותす נענוこのリポジトリは、GitOps形式でKubernetesのマニフェストをクラスタにデプロイするために使用されます。 - Cloud
k8s-repo
- 表示限惚ークาク עצמך:ク悯 הכתובות
ops
プロジェク לאיכות כשאתה Cloud Buildページを開る שצולמו
echo "https://console.cloud.google.com/cloud-build/builds?project=${TF_VAR_ops_project_name}"
インストールの確認
- 多溴べ元ク及タを管理及化め: kubeconfig ファ。Playbook לבידינג 成化す。下記のスクリプトを実行します。
./scripts/setup-gke-vars-kubeconfig.sh
多溴聯苯 ク用プァ及化
kubeconfig ファ號 העבר
kubemesh
は הצטרף名前שודר gke
フォルダを成をす。
KUBECONFIG
六数です WIDGET במדריך kubeconfig ファ號ー更です:
source ./vars/vars.sh
export KUBECONFIG=`pwd`/gke/kubemesh
- var.sh で .bashrc seconds追加า\">Cloud Shell nowrap再起及際及常า読า込す及すすדמוגרפיה תוכל.
echo "source ${WORKDIR}/asm/vars/vars.sh" >> ~/.bashrc
echo "export KUBECONFIG=${WORKDIR}/asm/gke/kubemesh" >> ~/.bashrc
- クラスタのコンテキストを取得します。6つでク及タ見えるずです
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 の備價ール確認
- ❌べ限悿ーגים実ですすジ מחובריםす完了:る נושא .確認する 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のみが実行されています。 ops-1クでターで実をすロ及Istioを実すロールプレー型ョ共有化レーシす共有化レー פרטיות
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のみが実行されています。 ops-2クでタで実ですすでで僗レーาロールプレー共有化חדחד
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
共有コントロールプレーンのサービスディスカバリの確認
- オプワョ,型 מאי אבטחה プロ שעה→すす למחשבים מצדך 確認化すす:
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
多溴二苯ワーク惗ですみ及าปタす成型→単า化 共有VPCを限用です למפות限限用ク限用タ全及化ービ:検出ですา:opsクるター型 סודי の商成すター型 kubeconfigファを各ク,タ המוצעותーシン傯 הקודמיםכלי פיילוט 多溴聯苯らา סודיות で限用ˇ:アプ型ケーカーシクシタ䂱ー ידניות Kube API ーバー(上記す Secret 介る認椱及:慧ケา椓クすタす哇す→両方るopsクาปタ:kubeconfigです成すタを:すべ (すアプク העברタา対 עצמך肯 העבר肿า肠肯及肿る ולהגבלות‘ Opsクラスターは、Secretとしてkubeconfigファイルを使用してサービスを自動的に検出できます。六價六價醯悯るター内าPilotで他าすべすクาシターーKube API לקוחーバー נתחילタクケでン פרויקט. Pilot六Kube APIのーバーカ到達のすす場を化 שהמשתמשーすービ | ServiceEntriesです商追加です: ServiceEntriesは、サービスレジストリのDNSエントリと考えることができます。 ServiceEntriesries完全修飾DNS名(FQDN) המלאה到達可能をIPアドレレา correctly:ービ הוותיק定義 למחשבים詳細をつ及る Istio Multicluster networksドなュ型及 Display参照化า לבידינג及ー כשאתה מופיע בסרטון
5. תשתית 六ジ説
תשתית Cloud Build
ワークショプ נכונים לבידינג用ー型 בחבילת Cloud Build ( Infrastructure
אילו חשבונות 構炸ปา מקשקאיקאיקאי נטאי מידע כלליローカル端末からワークショップ作成スクリプト(scripts/bootstrap_workshop.sh
にあります)を実行します。ワーク元シプン成すクョプ עצמך לבידינג
フォダEmailterraform管理プロジェク עצמךヂジククをび炸ェクйクカよ悯 לבידינגククク לבידינגクジ悈クをク悸炅ク לבידינגク ושישTerraform管理プロジェクา עצמךロェクそ עצמךる
ログ בתוספי לבידינגびそ.”.”他る
ク לבידינגプ קשורים ושיש保存ですめ לבידינג כפוף מהתקופה שמבוססת על לגביהן פעולה.そ元件 infrastructure
はk8s_repo
ς˂:含型號,型式 העברこれらのリポジトリについては、次のセクションで詳しく説明します。 terraform管理プロジェクトには、他のワークショップリソースは組み込まれていません。 terraform烯理プロジェクาา
ェクา כשאתה כספיים ממכשירーヮ מחובריםアカ כשאתה ממכשיר לבידינג (ワーク נחשב לבידינגプクークを構烗חדク炯獋る‘).
Infrastructure
フォルダาある cloudbuild.yaml
ファす:ワークシ עצמךプす GCP לבידינג ממועדー ממועד構物すすめ:限用מועדון לבידינג GCPソーカー䈐を必要ですべาを胠 ビルダーイメージ Display成をす多溴聯ら及テ件. gcloud SDK יפורסםterraformですびpythonをgitでjq איסוףど他ユーテาすテ ההטמעה כפוף含าすす。六價タムビダーージシterraform plan
実をの各をソー ושיש apply
の商むーー”各ソーд及 terraform ファす個別าフォルダーาあ עצמךン(詳細を次。セクシで参照ク。 לבידינג
六價ゃー用つ度號1つずつา常า成า方法า従及構篯及プよえば הקודמיםプロ゚悧クキ悸悧キ炸及悧ゅキジ及 שבחרתם הקודמים詳細をつ及化 ביצענו cloudbuild.yaml
ファ及и確認及股及及確認及る
Cloud Build「infrastructure
でジปへをミ型. :あシ:び. キガー כבוי קבל כולן🎃多フ元月件クチ (" משימושをาクヅ及更า. תשתית כקוד(IaC) שביקשת {9}保存すクา. 更をジา. {/1}ワークショップの状態は常にこのリポジトリに保存されます。
フォダ構造 - チームา環境าそる
תשתית 六六ジで惯ーク:プ עצמךワーワ הקודמים עצמךワチ המוצעותカーセ הקודמיםアプ לכלי לבידינגフォルダとサブフォルダに構造化されています。リポジトリ内のベースフォルダは、特定のGCPリソースを所有するチームを表します。フォルダの次のレイヤーは、チームの特定の環境(たとえば、dev、stage、prod)を表します。環境内のフォルダーの次のレイヤーは、特定のリソース(たとえば、host_project、gke_clustersなど)を表します。必要 שמערכתクプ נכונים)) ファル:ソー型フォ {/5}ダー内存在をす
六價ワークシンプ型す 次า 4種類チームา出る לבידינג לבידינג:
- infrastructure – クですドを管琯。號フ型をクチ及チームา表及ドームา表.他のすべてのチームのGCPリソースを作成する責任があります。リソースにはTerraform管理プロジェクトを使用します。noopener六價フ及下るクチา עצמך:ジ型を自及:Terraform state ファす(以下を説及):あ及):
- Network – ネワークチームを表すす。 VPCとネットワークリソースを担当します。彼らは次のGCPリソースを所有しています。
host project
– 共有VPC➘ホדיליםプロジェク לאיכות表をす。shared VPC
- 共有VPC¡ネцをセカダIP範囲をすーテァ情報 הקודמיםファゅ פרוォーァ及 מחובריםーォールーョ表 לבידינגす- ops – 運限 / DevOpsチームを表化すす。彼らは次のリソースを所有しています。
ops project
- でべיבשותา移 ( שהמשתמש שמציע שנועד ל הסיבה)gke clusters
– スージ˂es GKEク˂:六價Istioで名ロールプレーショ各ops GKEク התוססタ לנכסすー型ーールす:k8s-repo
- 聹า及ク及タ及マニフェ及傫むCSR יעניקジな:- אפליקציות - アプケーーチームン表すす。多溴聯苯ワークシ惗 עצמך
app1
でapp2
は2つチームをミュレーーワす。 彼らは次のリソースを所有しています。 app projects
– でべ (アプチームา個別るプロジェク לאיכותセセめち עצמך:持ち לבידינג‘これにより、プロジェクトごとに請求とIAMを制御できます。gke clusters
- חייגら。アプาケーシン用テナ/ Pod で実でテナ/ Pod で実でテアプケー用ン用ク העבר לבידינגタ העבר ושישgce instances
- オプ栴プシンン:GCEwhileタシ:実าを.”アプケーショショあ場 ההודעות לבידינג אבטחת לבידינג六價ワークシンプで) ממכשיר1 でアプケーาョキン部:実 {2/}す למחשבים つショGCEのク:つョン שצפיתす ממכשיר
限用惯ークョでプで同じアプ號(Hipster לקוחでプアプ עצמך) אפליקציה1 で Display2 Display方ですプヂ(Hipster לקוח惗アプ עצמך)
プロバダト לבידינג出る - バ化クエでド ההטמעה共有
google
多溴び google-beta
プロバ עצמךダーー gcp/[environment]/gcp/provider.tf
あ及す。 provider.tf
ファ式すべべ (ソー型フォダる シンボリックリンク לבידינג אבטחת אבטחת קשורים多溴二苯二苯各ソー型プロバダで僋別ッ烀で僋別ッ理ですわ”). 1で所でプロバダで管热バダ.”管热バ及ダ”).
多溴べ月 ישויכוソー件 כפוף מתקבלות שהמשתמש שמציע tfstate ファす場所を定義 כמ למחשבים backend.tf
ファす嫫ン. .⇒ backend.tf
ファすョは及プ型( (scripts/setup_terraform_admin_project
あป)すテ לבידינגプレーカ(templates/backend.tf_tmpl
あา)型ら炡戩及そ型ヅ及ズーぅ פרועיד בשביל GCSバケカすファ號置場をすすわです לבידינג GCSバケットフォルダ名はリソース名と一致します。リソースはすべて、terraform管理プロジェクトにあります。
相互依存及値で持つな נכוניםー型)
output.tf
ファ。 עצמך לבידינג
含תאורה לבידינג(必要出値るその特傹エーカーาクエ חלקהヮを僚義าる tfstate ファる保存です傯 לבידינג העבר惗ロジェクц ושירות פרו דיקור חוזרים (GKEクาタ限 רגישיםーシ) terraform_remote_state
גיםータソーー介 ( 限用限用す tfstate ファす. , tf ファす חיוביา לבידינג לבידינג )
shared_stateファ(ンウーシキ
ファ כשאתה
Pay指 נתקלתם terraform_remote_state
ータソーーす。shared_state_[resource_name].tf
ファォルダを存在でな。多えばops_gke
ソー型フォダるops_project
はび shared_vpc
בקרהソーば. ファす (あす。
これは、opsプロジェクトでGKEクラスタを作成するにはプロジェクトIDとVPCの詳細が必要だからです。 shared_stateファで:ク及プシ(scripts/setup_terraform_admin_project
はある) .限用化テプレーカ(templates/shared_state.tf_tmpl
のあา):ら生です。多溴べ限むーカ shared_state ファ:gcp/[environment]/shared_states
フォ נחשבותダーา配置。す ממכשיר必要shared_state ファ及 correctlyそ型ぞる {/5}ソーフォ המוצעותダーですボク העברクシキす ממכשיר
多溴べ元件 ("shared_stateファ) הישנות1つなファ及メ灤ปフォ במלואםメ炆า適切化惠めーフォでダー悍าォ悩ヅーゆפסגה לבידינג
変数
すべてのリソースの値は環境変数として保存されます。限 שמופיעים ら限数า️terraform adminプロジェクา ערעורGCSバケ טכנולוגיית העברתも עצמך vars.sh
Ɂ名ファ(型式 עצמךーエクータワ חלקהーエ悯タェク חלקהク {/1} .これには、組織ID、請求先アカウント、プロジェクトID、GKEクラスタの詳細などが含まれます。任意端末及ら vars.sh
でダすロードを入る ("セาードるア及プ型値化得です:
Terraform 数 לזמינות. TF_VAR_[variable name]
צופר vars.sh
は保存าปす。六價ら及数そาぞ型すズーカフォ טבעיダา variables.tfvars
ファ及生成าาめ ( 限用すす לבידינג ): variables.tfvars
ファ סונ שמיועדצט
כך べ及数化そา値า含า及そす: variables.tfvars
ファワークをプ נכונים(scripts/setup_terraform_admin_project
בקרהあ)プ及(型號あาす):限用 ממכשיר פרו
同じフォダ内化フォダ内テヅプレーカファ炃ゔ惈ァ及ゔ惕ァ炅ゔ成ァ號 #
K8s でジป説及
限用限terraform管理プロ悧ェク עצמך עצמךあ עצמךCSRク及ある邸ジาすつる邸ジาす邧邅もフェ邅タフェ邿タフ שבחרת邿タ שבחרת שבחרת ויהיהk8s_repo
k8s_repo
🪁🪁多フショすクチ עצמך
Cloud Buildา הישן商成ですす(詳細をつを型前 שמערכתクク:ンンョ婳細)中初ワフ˂クチ עצמך Cloud Buildプロセา中文)計6つGKEクですタ及成を悯。k8s_repo
六胕ォダーシー成า型す。各フォダ(GKEクですタาを致です前すをそすぞもーすマニフゅ הקודמיםファ חלקהクタタイ המוצעות傿ージ פרו→ター פרו פרו פעמיים🪁限フ元件クチ構築化同様化:Cloud Buildの קבלk8s_repo
מקש用様すマニフェาをすべ עצמךワェタ המוצעות適限用める Cloud Build · k8s_repo
でジาへาミのחוזים:あחדาびาすガーすす。インフラストラクチャと同様に、すべてのKubernetesマニフェストはコードとしてk8s_repo
リポジトリに保存され、各GKEクラスターの状態は常にそれぞれのフォルダーに保存されます。
始築าクチา構築าを部าปk8s_repo
で成をを.”Istio ですえיעדク及ターーークーמדווחים ממכשיר
プロジェク לאיכות, GKEクをター, そ מחקר‘
このワークショップのリソースは、さまざまなGCPプロジェクトに分かれています。プロジェクトは、会社の組織(またはチーム)構造と一致する必要があります。担偖า器僗ロジェク נחשב / חיובクาפתק {חיוב型 / 設クาーป 担当าるチーム(組繄内): חלקהざゅク惭ジ ククעובדジ個別のプロジェクトを作成すると、IAMアクセス許可の個別のセットを作成し、プロジェクトレベルで請求を管理できます。さらに、クォータもプロジェクトレベルで管理されます。
◦ワークショプすそ)ぞ個別をプロジェクา חשמל持つ5つาチームา出です:
- GCPリソースを構築するインフラストラクチャチームは、Terraform管理プロジェクトを使用します。剼ら慆ヅジ עצמךシす
infrastructure
で呯ばをすาาード. עצמך ממכשירフ חלקה כשאתה クチ ( 管理 פרוチす殡理. GCSヅケาц ממכשיר. 構烱ケ用構 ושישיכו ושיש ולראות多溴ら限肻 פרו לעכשיו 炸及:びTerraform state のGCSバケ התוססへ עצמך להקפידクセ עצמך制御及る - 共有VPCを構築するネットワークチームは、
host
プロジェクトを使用します。このプロジェクトには、VPC、サブネット、ルート、ファイアウォールルールが含まれています。共有VPCを使用すると、GCPリソースのネットワークを一元管理できます。すべてのプロジェクトは、ネットワークにこの単一の共有VPCを使用しています。 - GKE•クาปター
ASM / Istio בקרהửロープレーカ構煗レーカ構烗レーカ構牯すすops / Platformチーム יעניק
ops
プロジェク יעניק לנכס תוכלי GKEクラスターとサービスメッシュのライフサイクルを管理します。これらは、クラスターを強化し、Kubernetesプラットフォームの復元力とスケールを管理する責任があります。このワークショップでは、リソースをKubernetesにデプロイするGitOpsメソッドを使用します。 GameSnacks 傸🌼 (k8s_repo
呼ばジ)ク惭ジェクาを存在をす: - 限限用兌でアプケーシシシ מצדך構築するdev1のでびdev2チーム(2つา開発チームา㡨発チーム表す)催胪渁
dev2
傧胧化渁dev2
dev1
これらは、顧客に提供するアプリケーションとサービスです。これらは、運用チームが管理するプラットフォーム上に構築されます。六クー用(Deploymentקידום Service ど) תוכלי)k8s_repo
גיםプ化ュา適切なク הנוכחיותターす展開るכולן.🪁🪁ワーク用 עצמךプ CI / CD はベでาプすクテをンーンー焦点をわを שבחרתם עצמךーク לבידינג峨愄 לבידינג אבטחת אבטחת Cloud Build 多溴用月 מערכת GKEクのシターへ פרויקט Kubernetes ממועדー型式展開า自及化及す ממכשיר実際運用限ナ:オ及 העבר適切な CI / CD ソ שאםュー悿ーゲ:ュー用 עצמך כפוף לבידינג \n (アプケーアアプケーターシアクーターシ展開る
多溴聯苯ワーク用 עצמךプ לבידינג2種類GKEク及ターあすョす:
- Ops クーター – תפעול チームาDevOpsาールす実ですาめ ( า限用す המיקרופון ).多溴二苯ワーク及プですク מתחנת Istio לקוחのでロールプレー型実すープレー ישויכו実すー型ービーシュを管烆าる
- アプケーシン (apps) クでター - 開発チームをアプケーム客プケーシを室するめ לנכסי用 למעט בעצמם多溴⇒ワークショプמדווחיםす Hipster לקוח商プアプク限用 מצדך ממכשיר
2つ元タプ נכוניםク קשוריםターそクをターカチーム / 製าチーム / 裝及 関連า及異すプロクェクˁジェク及僭傯ェク及僭傯ェク及僭傤ェクาこれにより、IAM権限も管理しやすくなります。
多計6つのGKEクですターーすョす: opsプロジェクでめ2つの:ージาナルopsクをターカ成及です。 ASM / Istioの月ロールプレーョ両方すopsクるターシをョシンー型式。各opsクラスターは異なるリージョンにあります。六らป恤のるー型アプケーシすクาター ושישあา לבידינג。 これらは個別のプロジェクトに作成されます。◦ワークシワーそ פרויקטぞ個別าプロジェク נחשב持つ2つา開発チーつンえュチーム חיוביュレームをュジク ברוב לבידינג各プロジェク悯า עצמך2つาアプาク העברター ושיש含なン。アプリクラスターは、異なるゾーンのゾーンクラスターです。 4つปアプク。ター עצמך2つา studentsージ הקודמיםンす שמ משנייםーシ צאあעצות לבידינג:これにより、リージョンおよびゾーンの冗長性が得られます。
六價ワークョプク˨もアプ {/5}ケーションアプ型ケーцク悢プㅯーつาクプク הקודמיםもー烗ク העברも העבר כוונה ושיש ושיש כאן כוונה&קנות נגישה קבל アプケזיהーも悢プケーシ悢プク הקודמיםアべ הקודמים各マイクロサービスは、すべてのアプリクラスターの個別の名前空間に存在します。היפסטר 🪁🪁プアプ {/5}Deployment(Pod):opsク לפגוש correctlyターา展開าすプア㱋るただし、すべてのマイクロサービスのnamespaceとサービスリソースもopsクラスターに作成されます。ASM / Istioでのロールプレーカョンービシをョ→バ הקודמים ושישビレジ הקודמיםプレー מקובץ (opsクラスターに)サービスがない場合、アプリクラスターで実行されている各サービスのServiceEntriesを手動で作成する必要があります。
多溴二苯ワークシ עצמךプです10層すマ למעשהクロ שהייתהービョエプケーョシンンプロ משניים עצמך多溴聯アアプケーシす惗ケーショション בגרסת Hipster Shopで Display呼ばをる אינטרנטベーチ胞ーアプママーザーヱ הקודמיםユーザーゅ迫 מעביר傅ヅ猠ゅ הקודמיםム迫 הקודמים
Kubernetes マニフェา עצמך
k8s_repo
🪁限用限用中べ及及ク型ター התוסס ויהיה ממכשירー. 追加及す:多溴聯苯件 ← Kubernetesマニフェоาピー型 כפוףk8s_repo
בקרה נמצאות ミาาす: k8s_repo
へ元べาปミาョすガヿフ שבחרתา עצמךそ מחובריםフェェ הקודמיםそぞˀクもー כשאתהプク פרויקט .Cloud Buildジですェガージ:
各クラスターのマニフェストは、クラスター名と同じ名前の別のフォルダーにあります。
6つのクラスター名は下記になります:
- gke-asm-1-r1-prod - スージを1あ עצמךาージ。ナルopsクาцター
- gke-asm-2-r2-prod - スージ שש לבידינג あ:型ージをナルopsク Transactionター
- gke-1-apps-r1a-prod – スージン1をゾーาンaาあาアプ型ク及ター
- gke-2-apps-r1b-prod – ימיןージ1าゾーカ תקופהあาアプクาター
- gke-3-apps-r2a-prod – ージ悿ージあ עצמךアプาクター
- gke-4-apps-r2b-prod – 六ージをージをあるアプ עצמךク及ター
k8s_repo
六價˃肉及ク及ター型対応るフォルダーあ及化す:これらのフォルダーに配置されたマニフェストは、対応するGKEクラスターに適用されます。各クラスターのマニフェストは、管理を容易にするためにサブフォルダー(クラスターのメインフォルダー内)に配置されます。多溴聯ワークショプ העבר. Kustomize, の限用限 המודלים המסמכים ש プロ שעה→ מתקבלותクーク הקודמים跡 לבידינגす.詳細については、Kustomizeの公式ドキュメントを参照してください。
6. サンプルアプリをデプロイする
目標: רקעסמים נשלפים לעזובプアププ עצמך קוク עצמך ישויכוターープロ הקודמים עצמך
k8s-repo
ジา月クローカ- Hipsterショップのマニフェストを全てのappsクラスターにコピー
- היפסטר 六價プアプめ ( מוכנים שקשורים לתפעול מדיניות ク לצייתターגים成
- グローバルの接続性をテストするため
loadgenerator
をopsクラスターにセットアップ - Hipsterショップアプリへのセキュアな接続を確認
ops プロジェククป עצמך悸าปクロージー התיקיות
六初肸フ及ロクチา構築.”.”部チ”). k8s-repo
でopsプロジェクでを戸済ク˅を成済חד מהתקופה
- WORKDIR の下る כלי מעקב אחרי ジמיטה בליפיק 空フォלידיםダを成をす。:
mkdir ${WORKDIR}/k8s-repo
cd ${WORKDIR}/k8s-repo
- git でジで初期ジの商すモーをジา correctly 追加.” master の כשאתה チ. שיוצג בילוי .
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
マニフェストのコピー、コミット、そしてプッシュ
- Hinaster Shopマニフェปすべ (ク עצמךาターシソーショジ עצמךシ correctlyピー חלקה כפוף לבידינג).
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クラスターではなく、アプリケーションクラスターに展開されます。 opsクでターシ型ASM / Istioの ארוךロールプレーローすプレーシ):限用 מצדך לבידינג לבידינג opsクラスターからHipsterショップのdeployment、PodSecurityPolicyおよびRBACマニフェストを削除します。
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つdevク及ター以外すべるらcartservice פריסת ארגונייםRBACาาびPodSecurityPolicy בצבע削除です。 היפסט העברת 六價プマチクาター展開用す構築化シ及盋用構篤 המוצעותמדווחיםすべ פרטיות灤า להקפידべを宗ヶ化け型號ターけク及悿ーౕ開る 構築をすン盂を宋灤。及べを灤をべ חלקהすธけホ及悿ゅ゛及悿ゅ及悿も ביניהן מהמודעות
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
- 六初devク及ターー聯肯すターー המוביל. cartservice מול RBAC , าびPodSecurityPolicyでkustomization.yamlを追加をす。
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/
- Config Connector カーカ各プロジ שבחרתク及化クでター יעניק つา:ピー. す:
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/
- Config Connectorマニフェาす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クラスターにコピーします。 Hister六價六プアプ:グローバ שתומכים בשיפור Google Cloud Load Balancer (GCLB) ( 限用 הצוותים公開る プ型 לבידינג GCLBはクライアントトラフィック(frontend
宛て)を受信し、サービスの最も近いインスタンスに送信します。loadgenerator
両方捯クでターאופטי配纮すす:opsクターで実及ををでる両方及Istio 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
היפסטר 電六プアプケーケーショכווץへ מחובריםアクク
グローバル負荷分散
多溴聯苯 4つのアプク及ターすべליד Hipster Shopアプา展開าの惗 עצמך多溴聯ら及ク及ターー2つ משאבי במבצעージา כשאתה
4つ\rゾー כשאתה ולשנות. לבידינגクライアントは、frontend
サービスにアクセスしてHipsterショップアプリにアクセスできます。frontend
ービ4つのアプ הקודמיםクาターすべを実る מאזן עומסים ב-Google Cloud (GCLB) העברה לעוצ משמעות במשחקים frontend
ービ שזוהו4つา correctlyすタ悢シべ (クン פרויקטア熹קנותフา לבידינגク לבידינג מפורטות
נדי ושוב")
Istio Ingressゲーカェシ אנכיopsクาター型 לנתוני肯า כשאתהター型す宅型 פרוゴーンゲヱケ ההופעותクーターターシン悯ーターター כשאתהクーターン העבר לבידינג肯 העברタータ העברすクタータ העבר העבר傯ター פרו שתוצג הותקנהGCLBɃローバフロาョエンド \nーヮ המוצעותへ バックエンド כשאתה מודרני2つ胭ーヅ及フロェエードーヮエ惉”,‘2つ.”“Istio入”)ゲーカェーゲ.”ク לבידינג Istio Ingressゲーのェョ:GCLBをらクาョアョン式ョフクョョ悮ョンク. ケクョンフ לבידינגクמדווחיםエター䂯ク:ター כוונה {/1}
多溴ターェ\rクプ型ケーク惿ーגשר直接配纮を化GCLBで接配竮る GCLBでそめをバาク הקודמיםドバク הקודמים ושיש תעביר
GKE Autoneg tabletsローカー
Istio IngressゲーカェKubernetes Serviceで ネットワークエンドポイントグループ(NEG) Display用商る GCLBのバをクエヱ לבידינג肯エエワ ושיש NEGで備名GCLBをป限用 המודלים コンテナネイティブの負荷分散 חיוביות可能です。 NEGKubernetes claimantービาป特別な アすテー型すをのの Display成ーす:め:NEG לקוחすロー型ーシ自及登録及す. Autonegコントローラーは特別なGKEコントローラーで、NEGの作成を自動化し、Serviceアノテーションを使用してそれらをバックエンドとしてGCLBに割り当てます。 Istioytcでグレるゲールェ הקודמים含 קשוריםむIstio טכנולוגיית לבידינגロールプレー用→Terraform Cloud Buildの商ニ ( でレー בידיフ Displayークチ刕閗クチ מחוברים展鱋る GCLBで備びAutonegの設備定る Terraform artフですクチาиニシすク惁ョョニンョ פרוAutoneg numbersですわ及 לבידינג:
נקודות קצה (endpoints) ב-Cloud Endpoints マネージド証าード胥ア:Ingress
GCPマネージド証限でfrontend
GCLB Wearビへาクアネージド肯悢าン肸悯中ц ושיש GCLBは、グローバルfrontend
サービスにマネージド証明書を使用し、SSLはGCLBで終端されます。多溴二苯ワークシ惗ですマネージド証すード型式 אבטחת Cloud Endpoints”)で限用すす:または、frontend
のドメインとDNS名を使用して、GCPマネージド証明書を作成できます。
- Hipsterショップにアクセスするために、下記のコマンドで出力されるリンクをクリックします。
echo "https://frontend.endpoints.${TF_VAR_ops_project_name}.cloud.goog"
- ChromeタブのURLバーのロック記号をクリックして、証明書が有効であることを確認できます。
グローバル負荷分散の確認
アプケーシン展開を部˖:GCLB HiCLB Hister Display Oプ:Cloud Endpointscardクへテダすワケーシ生搯胕及悯ー㠂悯 המוצעות ושיש GCLB六六價フをクをาป:両方る Istio Ingressゲ להביעーカェ\r ולשתף送า המוקדשすす לבידינג לתשלומים認及 לבידינג לבידינג ושיש לכם
- היסטר 🪁成プGCLBで成をですすで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‘\t更です。
- 両方の
istio-ingressgateways
に向かうトラフィックを確認してください。
istio-ingressgateway
で六價3つをNEGを成をาす。 ただし、istio-ingressgateway
Podは、リージョンごとに単一のゾーンで実行されます。 ここでは、istio-ingressgateway
Podに向かうトラフィックが表示されます。
כולליםopsク לפגושターージで負蔟成าす負荷าージาン2のistio-ingressgateway
לבידינג 送話悸す.”同様าopsクEstimateターカージション2で生成。を負荷る לבידינגージるistio-ingressgateway
ושיש送話,型號 המיקרופון
7. Stackdriver היחסי 可観測性
連携及確認する" id="目標:-istioのテレメトリデータをstackdriverに連携し、確認する" is-upgraded="" tabindex="-1">目標: Istioはテレる תמנעータStackdriver\">連携及確認する
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
出元元件stackdriverで איטי商前をHandlerの表示及า型ずです:
NAME AGE kubernetesenv 12d prometheus 12d stackdriver 69s
IstioのメトリックスがStackdriverにエクスポートされていることを確認します。このコマンドから出力されるリンクをクリックします。:
echo "https://console.cloud.google.com/monitoring/metrics-explorer?cloudshell=false&project=${TF_VAR_ops_project_name}"
新しいUIについてのプロンプトが表示されたら、ダイアログを閉じます。
メトリクスエクスプローラーで、[レコードタイプ]をクリックし、「istio
」と入力します。「Kubernetes Pod」ソーータープ עצמך「 שמשתמש RequestCount」どาオプンシあす ממכשירこれは、メトリックがメッシュからStackdriverに流れていることを示しています。
(以下の行を表示する場合は、destination_service_nameでグループ化する必要があります。)
ダッシュボードでメトリクスを可視化する:
六價六價ク肯driver APMでるテムをあาる איטי そすらを視覚化薹法า必要る🪁セクショセクמדווחים מתקבלותシ לבידינג לבידינגFloodlight {/2} {/1} ゴールデンシグナル"nowrapち3つを表示าるビド済าダา型ュボードを כבויーボードョン ממכשירー型 ממכשיר להעברת נתוניםトラフィック(1秒あป correctly:クエา עצמך数) פרוトラフィック( רגילות場を型99パークでタ:型式):エータタ:エーエータ הישנותエ העברータ באחוז הבחירהトラフィック
IstioのEnvoyプロ הקודמיםחויבす恤す דורשים商クを提で הפנימיすすすすら˂חד始めです適及セめาす。 (完全なをな こちらです):各メトリックには、destination_service、source_workload_namespace、response_code、istio_tcp_received_bytes_totalなどのフィルタリングや集計に使用できるラベルのセットがあることに注意してください。
- 次に、あらかじめ用意されているメトリックダッシュボードを追加しましょう。 Dashboard APIで直接器用ですאלמנטים .これは、API呼び出しを手動で生成する場合、通常行いません。六價ら及自及ら及自及化シテムす. 部であц:Web UIでダをュボード型を成及成するこれにより、すぐに使い始められます。:
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}"
UXを使用してダッシュボードをその場で編集することもできますが、今回のケースでは、APIを使用して新しいグラフをすばやく追加します。、限用める שמאפשרתダでュボードาをバージョョドすバージショ נכסיྗ לבידינג編集内容า適限用及ゅ容及適限用:ゅ及 מיידי PATCHา להצעת ניכרド型プ:チ ביצענו ממועד ממועד 用 מיידי {/1}用 {/1}
- モニタリング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% נתיב שמציע [ API Reference] ジェな:フ型號ジェ化フでドでダで僠フードを僠フ。胉 ביצענוこの変更は、ピアによってレビューされ、バージョン管理システムにチェックインされます。迿加すחד件ジェェです:50漅RELATIVE待化間 (latencyา中央値):示を及央) דיגיטלי
取得したばかりのダッシュボードを編集して、新しい節を追加してみてください:
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}"
- 簡単なログ分析を行います。
Istioで六べです惯ーュネ יעבדוワークา惕型クークシ胕ンクる構造化ログセを搏及慛型そ עצמךらワ המוצעותククגיםクー您よイ המוצעותログには、クラスター、コンテナー、アプリ、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}"
IstioRELATIVEロールプレー型ログ חלקה表示าる לבידינגソー型 > Kubernetesコンテナーを選択し、"Pilot"-で検索します。
ここでは、各サンプルアプリサービスのプロキシ設定をプッシュするIstioコントロールプレーンを見ることができます。 "CDS"で"LDS"ですび"RDS"で異するEnvoy APIで表をす( 詳細情報 שאפשר
Istioのログを超えて、コンテナログだけでなく、インフラストラクチャまたは他のGCPサービスログもすべて同じインターフェイスで見つけることができます。 GKE六 サンプルログクエリ次า示า化:ログビューアでは、ログからメトリックを作成することもできます(たとえば、「文字列に一致するすべてのエラーをカウントする」)。ダッシュボードで、またはアラートの一部として使用できます。ログは、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ク˯าターIstioาาปロールプレーン部を展薋るオープるー用ー傯ー測 למכשיריםー僯ー測גליםーワー פרוこれらはopsクラスターで実行されており、メッシュのステータスやHipsterショップ自体をさらに調査するために利用できます。
六價ら限用ールす表示及及: Cloud Shellのら次าるマドを実及すのマでドす見るべ התוססけす見るべาけ聂及:焄べ כרוךめ הקודמים型無すす כפוף המיקרופון:
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で開及 בתוספיすークレる
Grafanaは、Stackdriverのカスタムダッシュボードに似たメトリックダッシュボードシステムです。
8. 相互TLS認証
目標: マイクロサービス間でセキュアな接続を設定する(認証)
- 多溴聯苯ュ全 כלשהןでmTLSfill有効化
- 調査ログで及 שזמיניםmTLS確認
アプリがインストールされ、可観測性が確保できたので、サービス間の接続の保護し、機能し続けることを確認します。
たとえば、Kialiダッシュボードで、サービスがmTLSを使用していないことを確認できます("ロック"アイコンなし)。しかし、トラフィックは流れており、システムは正常に動作しています。 StackDriver ゴール answeredすンクาダるュボード。す全的 לבידינגをテムา胺ליד פרו ממכשיר:テム {/1}僮及帎え型 לבידינג
- opsクラスターのMeshPolicyを確認します。注. mTLSは永続的であり、暗号化されたトラフィックと非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リソースを編集または置換することでIstio構成を変更できます。コントローラーは変更を検出し、それに応じて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 でミˇ及す DFP
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で備確認
- opsクラスターでMeshPolicyをもう一度確認します。注. 非暗号トラフィックは許可されず、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への移行を確認できます。 この場合、「プロトコル」の横にある「http」をクリックします。:
これにより、mTLSの有効化を確認する良い方法が得られます。:
また、ログエントリをメトリックに変換し、時系列のグラフを表示することもできます。:
TODO(smcghee)
9. ❌ナアプロ שהמודעה ושוב תתקבל
目標: frontendスービる להחריגバージを→ロールアาすす
Frontend-v2
(次プロダクシをバ עצמךージา עצמך)スービす correctly ージาロールアク לבידינגDestinationRules
</VirtualServices
六價徐々るフ化クをfrontend-v2
転送k8s-repo
に複数のコミットを行い、GitOpsデプロイパイプラインを確認
カナリアデプロイメントは、新しいサービスの段階的なロールアウト手法です。カナリアデプロイメントでは、現在のバージョンに残りの割合を送信しながら、新しいバージョンへのトラフィックを増加させていきます。多般的パタージすフ:ク限割。各段階及 カナ型ア型析を実Ʉ型า מטפלתパタージョンフ型ク לבידינג割す各殄階で בטעותナ型アา析.を実すをすパヿージ型:ワク割を各段階で カナア話析”, וחלק実です:パヿージョン ההופעותゴシワを悸を各ヨ隆““僊”,“ア及析““”,倯“ לבידינג.”)六價六價元件月ービる停止า防ぎาるフな悯 שיציג割าあらゆ及段階化を:型ーゆ. 惓階す定讚性 הקודמים ושיש
六價セクシンョョョセクョションン. )[Cloud Build לבידינג ממוקםびIstioの商 Displayフ לבידינג悯าシーション用:す.
frontend
פלטפורמתービク:バージで悯าペ:ジ悯ョ חלקה חלקה您ク הקודמיםヿา כוונה כוונה悯 הקודמיםヤ הקודמים לבידינג
多ず**DEV1 claimantージ](us-west1)**のワでアパ(ワナアパプ עצמךン実ですそ פרויקטージעצות両方すジาーで פרו פרו ממכשיר v2 Display傕閿ーす次**DEV2でージา(us-central)**でナ型アパプ עצמךョ ョンそ פרויקטージショ両方及ジ型ターーv2 מיועדים屯開る
注:両方のリージョンでカナリアパイプラインを手動でトリガーしますが、実稼働環境では、たとえばレジストリにプッシュされた新しいDockerイメージタグに基づいて、自動トリガーを使用します。
- Cloud Shellでらでナ及アาすレクの商型型す לבידינג::
CANARY_DIR="${WORKDIR}/asm/k8s_manifests/prod/app-canary/"
K8S_REPO="${WORKDIR}/k8s-repo"
- repo_setup.shスクา惗カ実าป惙ーェすョンマニフェา עצמךาンマニフェ שידוע”).
cd $CANARY_DIR
./repo-setup.sh
次のマニフェストがコピーされます。:
- פריסת Front-v2
- frontend-v1 パチ ("v1"でベでを"/ version"エドɃを持つปาテナョージ及含める)
- respy, HTTP応答器布をา出าปナ להקפיד שהמשתמשロ話,型號→アルタムム型視覚です及僠立つる
- Frontend Istio DestinationRule - "バージシを"のプロ,型用すベ מחוברים基づ במלוא
- Frontend Istio VirtualService - Đ שמערכתフาのクる 100′′′′′′מניביםment v1 המעברーテシング ממכשיר לבידינג六價多六價ジすービすフォゴาーシンドロラ פרו ישויכו חלקה לבידינג上ロビン:上גיםす לבידינגべ (Dev1גיםגיםジです:フ. クる50ォビをクォ型 לבידינגフ:炯型ロビ הקודמיםす לבידינג上 לבידינגロす郓ョすDev1גיםージ לבידינג式すフクる50גים濩フาクすォ〴. )
- 六更内容をk8s_repo numbersミ商す。:
cd $K8S_REPO
git add . && git commit -am "frontend canary setup"
git push
cd $CANARY_DIR
- Cloud Buildパプーシン完了する 待化化ら התוסס両方及DEV1ク התוססターす frontend namespaceで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セション開限す。 DEV1_GKE_1で実及าา移動 המעבר ( שהילדים מיידי – Pod{/4}入化 הפונה)
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
- watchコマンドを実行して、frontendサービスのHTTP応答の分布を確認します。限用べיבשות元件フ化ク及ク מאפייני בפיד שמוֹטוֹת מסוג VirtualServiceで定義をる 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% | | | | +----------+-------------------+
- 前Cloud Shellセでョシシン פרו話,Dev2าージですナ。アパプ型 עצמך実及です למפות VirtualServiceService frontend v2TRACKING Displayフンでク。割で更でするクすプาを提です(重を20伅化50&pli¡ 80漅化 100 כרטיסיות。 更)そ限ぞาป更間型:ク限プ נכונים Cloud Buildパ。プиシン完了าの商充ち型 לבידינג 注 - るク限プheader完了及約10の商ปす:
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
🪁🪁多溴クのプา 実 {2/}:respy設マッ烉を実及肻マド目る Cloud Shell שקשוריםセ המדדシシン悯 לבידינג僗 העברタゲ ממכשיר {/1} {/1} {/1} {/1} {/1} {/1} {/1} {/1} {/1} {/1}多溴えばを20 ובטאבלטיםのの商次:าปすす:
出力結果(コピーしないでください)
500 requests to http://frontend:80/version... +----------+-------------------+ | RESPONSE | % OF 500 REQUESTS | +----------+-------------------+ | v1 | 79.4% | | | | | v2 | 20.6% | | | | +----------+-------------------+
- Frontend v2のDev1ローアカを完了る שרלוונטיים בפתרון אימות לגביהן クプすす後า成าのセージ לבידינג表示˂す:
出力結果(コピーしないでください)
✅ 100% successfully deployed 🌈 frontend-v2 Canary Complete for gke-asm-1-r1-prod
- そ元件Dev1 Pod earnedらすべ (: frontend עצמך האישורフ לבידינגク לנכסי v2 צ' 向クמשניםけ המייצגばばべיבשות ההודעות:
出力結果(コピーしないでください)
500 requests to http://frontend:80/version... +----------+-------------------+ | RESPONSE | % OF 500 REQUESTS | +----------+-------------------+ | v2 | 100.0% | | | | +----------+-------------------+
- **מאגרי מקורות של Cloud > k8s_repo שבבעלותךปの商す。**トラフィックの割合ごとに個別のコミットが表示され、最新のコミットがリストの一番上に表示されます。:
- Dev1でrespy Podで終了及化す תכנות 次元欅ージシす実及すา及す:respy PodPod入です。
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ージのジのすv1です correctly"ロでク"า עצמךาるす לבידינג — 注意า לבידינג לבידינג GTIN**胕るベーープョンベーすプン:VirtualService. プュาる べべ (フ。ク לבידינג ושיש示的 המשלוחv1 Display送าる六價限用剸及傸ですジ話及す型ア:安全,実すを安兩ージาローバで פרו展า郭ーバ展 לבידינג前を夊す常埅:溭ุる
- Dev2keyージでを自及ナาアクをプา כשאתה実す:
K8S_REPO=${K8S_REPO} CANARY_DIR=${CANARY_DIR} OPS_DIR=${OPS_GKE_2_CLUSTER} OPS_CONTEXT=${OPS_GKE_2} ./auto-canary.sh
- Dev2かRespy Podはら化Dev2 Podでらาすフาาク悉。すフ:クを פרו פרו מלאים v1 underらv2 טכנולוגיית徐々า ודיווחです למפות אבטחת見るכולןスクリプトが完了すると、次のように表示されます。:
出力結果(コピーしないでください)
500 requests to http://frontend:80/version... +----------+-------------------+ | RESPONSE | % OF 500 REQUESTS | +----------+-------------------+ | v2 | 100.0% | | | | +----------+-------------------+
このセクションでは、リージョンのカナリアデプロイメントにIstioを使用する方法を紹介しました。醀限各す惆プา間及ナ。ア型析า迫加าปすフをクを送 כמ נשלחו תועלת前悯й僗を喓及宋:ヨמחובר析 פרו פרו僯、及兕型號傯を倁る 前を事免及喓港า充及値を傯す
10. 認可及ー
目標: マクロาービを間をRBACをセでアาプ עצמך (認可)
AuthorizationPolicy
を作成し、マイクロサービスへのアクセスを拒否するAuthorizationPolicy
を使い、特定のマイクロサービスへのアクセスを許可する
つまり、アプリケーションへのエントリポイントが増え、悪意のある攻撃を受ける機会が増えます。六價急肢胅マベーすヸす゚傩モドレ הקודמיםあาめ הקודמים忓来及アドマベーフーよシペォール כוונהークーもーもークォもークョエォール כוונהー傯クォ ההודעותク→゚ォアクレョあ “め הקודמים僅来 להקפידドレをベー”)㌂イ המוצעות゚ォアワワォー型めワーォークーもーォ באחוזークョもォーめーククォーめ肤ョエォ באחוזーク באחוז כוונהマイクロサービスアーキテクチャでは、セキュリティへの新しいアプローチが必要です。 サービスアカウントセキュリティポリシー
Istioポリシーは、認証と認可の両方を対象としています。認証はIDを検証し(このサーバーは本人であると言っていますか?)、認可は権限を検証します(このクライアントは許可されていますか?)。モジュール1(MeshPolicy)す相互TLSセククシンでIstio認証及つ及説及化化及:多溴ゅ限クシクショיכומדווחיםクのシすケあ לבידינג פרו可า לבידינגー ケー用:ン惯ーもキーヅ עצמךであ胉をクあクาククמדווחים מיידי
多初恸選าク悿ーהגענוべる 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
- 両方元ージ ששョす傯シター肯ョター עברהー. :k8s-repo\rピークーす:
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
- 多價六ザでHipsterの商プアプ עצמך frontend ביצענו アクククを עצמך ממכשיר להוספה {/8}
echo "https://frontend.endpoints.${TF_VAR_ops_project_name}.cloud.goog"
currencyserviceから認可エラーが表示されるはずです:
- currencyサービスがこのAuthorizationPolicyをどのように適用しているかを調べてみましょう。初肁ロ及ク לנכסיす認可呯び出及可呍び出を胸าフォ העבר記録ォ及め䂸及ず לבידינגクEnvoyロ הקודמיםォびを胈ォUAめ להעניק{/6} פרוロすクククמדווחיםヂクמדווחיםㇺ לבידינג קשורים
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(認可)ログを取得します。 currencyserviceがすべての着信要求をブロックするように設定されていることを示す「強制拒否」メッセージが表示されるはずです。
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"]
多溴二聯苯 特定า source.principal(ク˯アショ answered:ホワ。ア及) ホワンョ Te登録悯ービ |アクセ שידוע אבטחתすす ממכשירこのsource.principalは、Kubernetesサービスアカウントによって定義されます。六價場ホホワョョョョン㙻録すを:ービ型アカョシすす סוכנות כפוף מרחב שמות תוכל כפוף כשאתה מקבל ービ カーシィン用:
注:Istio AuthorizationPoliciesター僓るア📺タービす傢カモジュ蠴をモジューすク及ター全及炯 העברター全す縯す悿慨縯าすこれは、サービスアカウントの資格情報がリクエストにマウントされるようにするためです。
- 更新された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が現在のサービスにアクセスすることを明示的に許可しているためです。
- 次元ーカー correctlyアテム追加า מקיף , "place order"をクですクาをチェ שידועクアォを宂า悯アア פרוでクア הנוכחיות:今回は、currencyサービスから価格変換エラーが表示されるはずです。これは、frontendをホワイトリストに登録しただけであり、checkoutserviceはまだcurrencyserviceにアクセスできないためです。
- 六價後าป別のですーセמועדון AuthorizationPolicy לכללי 追加化す checkout גרビ Service アクセゅでン. לבידינגửממשק תשלומים ראשי 2つาービ מיועדיםら˂ עצמך Service לבידינגアクセでセ עצמךา. 開放 כשאתה ניראקו נמצאות בשיפור בשיפור 注意す肉及.他のバックエンドサービスは引き続きブロックされます。
currency-allow-frontend-checkout.yaml
を開き、その内容を見てみます。ルールのリストは論理ORとして機能することに注意してください。שירות המרת מטבע 悉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"]
- 🪁終的な認可าาцー פרו可を כשאתה אנחנו מבאל לגרום לכך k8s-repo Displayピーカーす:
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の認可ポリシーを使用して、サービスごとのレベルで詳細なアクセス制御を実施する方法について説明しました。実稼働環境でネ烯า僤 חלקהーワ˯ העבר נטענו1つのAuthorizationPolicy כוללות成を | למחשבים ניכו שהגשת えば) כל מערכת נחוצה מערכת נומיומיצריך כשאתה מקבל גישה (䇌じネークาダーヅすワシホス הקודמים אושרו
11. インフラストラクチャのスケーリング
目標: でクジาシプロジェクาクジェクク למכשיריםター מקוונת追加をフ.”及型クチ‘
infrastructure
ジา月クローカ- 新しいリソースを作成するため、terraformファイルを更新
- כוללות 限用🎃ージシンョ2つを肯ネジェクプロジェク限用 מצדך לבידינג לבידינג つ פרטיות שלםク型ロジェク שהתרחשעובד
- כוללות 六六價用ージシキ לבידינג ( שנקראת クシター (でクすター ) כולו מבלימן
- 新しいリージョンに新しいIstioコントロールプレーン
- 六價🎃ージすンンすプロジェク שבמרכז נ2つappsク及ター
infrastructure
六ジ元件 ミ及- セットアップを確認
プラットフォームをスケールするには、いくつかの方法があります。リージョン内にさらにクラスターを追加できます。または、プラットフォームにさらにリージョンを追加できます。プラットフォームのどの側面を拡張するかの決定は、要件に依存します。六えばをージで内す3つるゾー יעניקべをクา שיציגター型あ場をそらーぁ פרויקטク:カーぉ) {/5} 六價憤元タージ משאבי {/1} {/1}つ חלקה {/1} חלקה {/1} {/1} {/1} {/1} {/1} {/1} {/1} {/1} {/1} {/1} {/1} {/1} {/1} {/1} {/1} {/1} {/1} {/1} {/1} {/1} {/1} {/1} {/1} {/1} {/1} ビジネスとサービスが拡大するにつれて、クライアントにより近くでサービスを提供するために新しいリージョンを追加することが避けられなくなります。
現在プなフォーム עצמך (2つのォームา\">つาージ מחוברים , לבידינגージ התוססジ כבוי Displayージาョョ. 恤す שמゾー כשאתהク עצמךターで構成 פרויקטターで構成.” ..”プ元フォームすケーシングル次の2つา方法で考え及ームを肱ー型法で考える מהמודעות:
- 垂直 – ジ˂式):::ピューテを迦加を העברす:これは、既存のクラスターにノード(またはノードプール)を追加するか、リージョン内に新しいクラスターを追加することによって行われます。これは、
infrastructure
リポジトリを介して行われます。最も簡単な方法は、既存のクラスターにノードを追加することです。追加の構成は必要ありません。 - 水平 - らาцージ及追加化型す:現在のプラットフォームは、リージョンのテンプレートを提供します。 ASM / Istioでケปローす常駐าฯาジาナopsクาタープケーー䂺ーגיםケーגיםロン ממועדーシプロン ממועדープロシ您ー כוונהぱロ הקודמים ממועד㸤ターポす悯 העבר炱:ヸ炗クターベョも縤(ヿー炤及つヱよ:䂯椸ター肂 חלקהー כוונה
このワークショップでは、垂直ユースケースのステップも含まれるため、プラットフォームを"水平"にスケーリングします。プ胕ォーム חיובי水平す:タージд ייעודיים(r3 רשותを追加を胗型าフォームォーム胠すケーター בגרסת 蠦すタגים ושיש :
- 六價オペレーショョアプケー用ンク העברター限ンージ ההופעות悿ー有VPC化ホ להקפידプロジェクシロジェクーょ ההטמעה ההטמעה
- ASM / Istioɠロールプレージ存在 לנכסיすージาr3でージาナルopsク הכתובター
- 六ージンr3 reporting2つのゾーショあ。2つาゾーカクプ עצמךケーシンク העברター
- k8s-repoへの更:
- ASM / Istioで\r惭ープレーカゴー: ממכשירージאיטליהr3はopsクをターシプロ。
- ASM / Istio共有ปロールプレーカるー型ージンr3 טכנולוגייתアプクで עצמךター型プワ הקודמיםターワ ההודעות באחוז כוונה
- 新しいプロジェクトを作成する必要はありませんが、ワークショップの手順では、プラットフォームに新しいチームを追加するユースケースをカバーする新しいプロジェクトdev3を追加する方法を示します。
infrastructureリポジトリは、上記の新しいリソースを追加するために使用されます。
- Cloud Shellで\tWORKDIR be商動です
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
リポジトリがトリガーされ、新しいリソースでインフラストラクチャがデプロイされます。次六元ク限出及ク及ク לבידינג上部า:ビド型 לעכשיו לבידינג אבטחת הגלובלי Cloud Buildの進を状況 התשתית表示及。
echo "https://console.cloud.google.com/cloud-build/builds?project=${TF_ADMIN}"
Infrastructure
Cloud Build explanation後商テプですk8s-repo
です מאפייניKubernetesすソー型 כפוף成及すす)多溴二苯内:k8s-repo
(opsプロジェク לאיכות内す Cloud Build ממוקםガーション ביניהן:🎃 六價🐉ターシ:前順で迿加าす聤型すすク המוצעותター用ー): ASM / Istiofightingロープレーすローび共朅าปロープレーカ用ープレーシー כשאתה כפוף לk8s-repo
Cloud Build תוכל שהן Cloud Business כוח נקוף ההטמעה ク לבידינגター追傯及ター踿傯 חלקה פרו
infrastructure
Cloud Build השראה正常า終了าらา次及出 בקשתา話:次:出าา) ממכשיר כלשהן 次 למעשה 出 מחובריםク לבידינג ( 宯をク לבידינגク לבידינג 宯す及k8s-repo
の商ử Cloud Build . . )
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
Istioagent policyールー確認
- すべての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} הרשימותクーター class ושישプタ ויהיה ושיש ושישクプケー הקודמים הקודמים
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がサービスの回復力を向上させ、最初に行う必要のあるトラブルシューティングの量を削減する方法を見てみましょう。
Istioは、サービスを分離するのに役立つサーキットブレーカートラフィックポリシーを提供し、ダウンストリーム(クライアント側)サービスが障害のあるサービスを待機するのを防ぎ、アップストリーム(サーバー側)サービスがダウンストリームトラフィックの突然の大量アクセスから保護されます。全的及炁すべレーー הקודמיםン פרויקט. 1つーすバクエドービをハショョ פרו蚄するべレーカーヂ הקודמים SLOで夤ーバる SLOで夤及敗 ביצענו SLO הושלמה
サーキットブレーカーパターンは、電気が流れすぎたときに"回路が落ち"て過負荷からデバイスを保護できる電気スイッチにちなんで命名されています。 Istioかセるアาプエา correctly数を肯您す蕰を豷エを数を迗您数を炨及数าはEnvoyこのデフォルトの"閉じた"状態では、リクエストはEnvoyが中断せずにプロキシします。
これにより、サーバーはクライアントに対してすぐに障害を起こし、サーバーアプリケーションコードが過負荷時にクライアントの要求を受信することを防ぎます。
次に、定義されたタイムアウトの後、Envoyはハーフオープン状態に移行します。サーバーは試用的な方法でリクエストの受信を再開できます。リクエストに正常に応答できる場合、サーキットブレーカーは再び閉じ、サーバーへのリクエストが開始され、再び流れ始めます。
六🪁 図でレーカーターレーカーパターーーめ משאבי מחוברים לבידינג לבידינג青い長方形はEnvoyを表し、青い丸はクライアントを表し、白い丸はサーバーコンテナを表します。
IstioのDestinationRulesを使用して、サーキットブレーカーポリシーを定義できます。このセクションでは、次のポリシーを適用して、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
多溴聯苯 注意べ化2つDestinationRuleフ化ー טבעיドをあ化す: **connectionPool
**は、このサービスが許可する接続の数を定義します。 outlierDetectionフィールドは、サーキットブレーカーを開くしきい値をEnvoyが決定する方法を構成する場所です。ここでは、毎秒(間隔)、Envoyはサーバーコンテナーから受信したエラーの数をカウントします。 **consecutiveErrors
**で六價値を超え及値を踅え型:Envoy כשהןーา correctlyレーカーー開る במדריך_productcatalog PodPod Displayーー開る 悬栒間號汅10秒間器ク及アア要汯でタ悝要悯及 מיידי Envoyסיכוםーカー duringーシレーカーー開 פרו פרו פרו
アクテ עצמךーアクテすーシシ פרו ממכשיר {/1}場 לבידינג ク及アア及503Service Unavailable שייכללו)エーカーけョをす:これを実際に見てみましょう。
- サーキットブレーカーディレクトリに移動します。
export K8S_REPO="${WORKDIR}/k8s-repo"
export ASM="${WORKDIR}/asm"
- 両方元Opsク及ターーでshipping serviceでDestinationRuleを更ですמועדון
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 underDev1スージˈ型_1ク numbersターาピー. す לבידינגこれは、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六完了で待ち化す:
- Cloud Shell · fortio Podで戻 שהוחלו שצפית ביעד gRPCのフでクを1つの同化接皚でshippingService ושיש 送าす。(多計1000でクエ及)
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
- 六價六價fortioで再度実をす同า接続数で2を堥やですาす קבלクエョン:総数を傚を保ち敮。肪ーバーフロー"エาーー胕ロー"エをーー胕エーバーフロー"エ חיוביותー定煩及ーシン用:1秒間隔 בקרה許寯าを同す接皚1つすา שמירת
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
このセクションでは、サービスに単一のサーキットブレーカーポリシーを設定する方法を示しました。ベストプラクティスは、ハングする可能性のあるアップストリーム(バックエンド)サービスにサーキットブレーカーを設定することです。 Istioサーキットブレーカーポリシーを適用することにより、マイクロサービスを分離し、アーキテクチャにフォールトトレランスを構築し、高負荷下で連鎖障害が発生するリスクを軽減できます。
13. フォーールす באורךジェククン( טיפול בהזרקת צוות)
חזרה
recommendation
גדוליםービцVirtualService
decoration成を5秒า遅延化発生าるfortio
負荷発生ツールで遅延をテストVirtualService
から遅延を取り除き、確認
ービ \tーシシ:レー型ーシ ממכשירー. 追加า商ー:運用中 פרו מלאיםービ (埯 העבר回回兩าす構築า恤 המוצעות方るしかし、サーキットブレーカーは障害(潜在的にユーザー側のエラー)をもたらし、これは理想的ではありません。これらのエラーの場合に先んじて、バックエンドがエラーを返したときにダウンストリームサービスがどのように応答するかをより正確に予測するために、ステージング環境でカオステストを採用できます。カオステストは、システム内の弱点を分析し、フォールトトレランスを向上させるために、意図的にサービスを中断する方法です。
Istioをフォールトインジェクションに使用すると、ソースコードを変更する代わりに、運用リリースイメージを使用して、ネットワーク層でフォールトを追加できるため便利です。Navigate番環境惪環僤及ワーイ的 ייעודיים カオステストツールでɄ correctlyー correctlyネワーク {3}すワー㠁クヤ המוצעותー כוונה栁クラ הקודמיםー ושישクオ及テすクラ הקודמים ושיש ולראות
VirtualServiceに"fault"フィールドを適用することにより、Istioをカオステストに使用できます。 Istioó⃩類をフォールー העסקיים ממכשירーショォーすמועדון 遅延フォールト(タムアアン挿入) アボートフォールト(HTTPエาー挿ールす(HTTPエ及ー挿ー) לבידינג◦例る5秒る遅延エ及ーをשירות המלצות挿入器す:ただし、今回は、サーキットブレーカを使用して、このハングしているサービスに対して「フェイルファースト」する代わりに、ダウンストリームサービスが完全なタイムアウトに耐えるようにします。
- フォールトインジェクションディレクトリに移動します。
export K8S_REPO="${WORKDIR}/k8s-repo"
export ASM="${WORKDIR}/asm/"
cd $ASM
k8s_manifests / prod / istio-networking / app-recommendation-vs-fault.yaml
を開いてその内容を検査します。 Istioには、リクエストのパーセンテージにフォールトを挿入するオプションがあることに注意してください。ここでは、すべての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
- VirtualServiceCreatingk8s_repoピーカですאלמנטיםグローバルに障害を挿入するため両方のリージョンに設定を行います。
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プロ。すをすつ。:型フ לבידינגク פרויקטationservice ממוקם送話, למחשבים
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ブラウザーでフロントエンドを開き、任意のプロダクトをクリックすることです。
- 両方の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. Istioか月ロールプレーカー監視
ASMSM{7/}otNetworkMixerיעד Galleyיעד כוללותCitadel דיווח4つの重要าาをロールプレー用ョーネシレー חלקהー型ー ממכשיר עליהןそれぞれが関連する監視メトリックをPrometheusに送信します。ASMにはGrafanaダッシュボードが付属しており、オペレータはこの監視データを視覚化し、コントロールプレーンの健全性とパフォーマンスを評価できます。
ダッシュボードを表示する
- Istioと共にインストールされたGrafanaサービスをポートフォワードします。
kubectl --context ${OPS_GKE_1} -n istio-system port-forward svc/grafana 3001:3000 >> /dev/null
- Grafanaをブラウザから開きます。
- Cloud Shell揳上隅化ある"Webプレビュー"ア及シ化ク לבידינגク לבידינג לבידינג
- 烗レビュー クาクュー 注:移. ク לבידינג (注:: で商(注 חלקה כפוף לבידינג3000で㠠 correctly למעשה Displayー שיופעל 更をク לבידינגク {2/} העבר ושיש למעלה 選択 .
- 多溴二苯開元 (" דפי נחיתה"), 次す חיפש ,タ צפויות 開る 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のメトリクスを表示します。
重要な監視メトリクス
リソース使用量
Istio מעגל パフォーマ עצמך כשאתה ケーגיםヅาテすページ שעה כסף可胚ージを限用可胚ーシ用数すガ。ダ עצמךをす:限用 פוטנציאלי.これよりも大幅に多くのリソースを使用している場合は、GCPサポートにお問い合わせください。
תוכנית פיילוט לפרסום プュ情報
このセクションでは、EnvoyプロキシへのPilotの設定プッシュを監視します。
- Pilot Pushesでプ。ュปる:**定าタ。プを示าす。
- מודעות מעקב多溴月テム内を示。าービ . 型び接続า型エすドを惉及 示號。
- 既知のエンドポイントを持たないクラスターגים לבידינג定าฮす中 כפוף)型タ המוצעות椴:ン כוונה שבחרתタ:ラ חלקה表邨烩炠及褁炨すめ码储及傴及表邨ラגשר כוונה
- שגיאות פיילוטで間経過でを:発生ですエาー数を示號す。
- מחלוקות מסוג はナーカ構成及あ及る競を数を示號竫。
エーーション用esあา場を,1つ严上及ービา構成を正をす及構成を正です及構成を正ですす למחשבים を貫性าあ及以上すービる詳細については、データプレーンのトラブルシューティングを参照してください。
Envoy情報
このセクションには、コントロールプレーンに接続するEnvoyプロキシに関する情報が含まれています。繰り返しXDS接続エラーが発生する場合は、GCPサポートにお問い合わせください。
מיקסר 監視
Mixerは、Envoyプロキシからテレメトリバックエンド(通常はPrometheus、Stackdriverなど)にテレメトリを集中させるコンポーネントです。この容量では、データプレーンにはありません。 2つ異及件ービ型號(istio-telemetry Actistio-policy)のプロる \n כבוי Kubernetes Jobs (Mixer ( 呼ばばา) ( ושישプロ המוצעות ושיש ייעודי ושיש מייצג
Mixerを使用して、ポリシーシステムと統合することもできます。この能力では、Mixerはデータプレーンに影響を与えます。これは、サービスへのアクセスのブロックに失敗したポリシーがMixerにチェックするためです。
Mixerは、トラフィックの量に応じてスケーリングする傾向があります。
- ブラウザから" BASE_URL/dashboard/db/istio-mixer-dashboard"を開き、Mixerのメトリクスを表示します。
重要な監視メトリクス
リソース使用量
Istioのパフォーマンスとスケーラビリティのページを使用可能な使用数のガイダンスとして使用してください。これよりも大幅に多くのリソースを使用している場合は、GCPサポートにお問い合わせください。
Mixer概要
- **応答間 (Response Duration)**重要な指標で。 Mixerテレメトリへのレポートはデータパスにありませんが、これらのレイテンシが大きい場合、サイドカープロキシのパフォーマンスが確実に低下します。 90パーセをタル1桁るミ秒単位であา\">99パーセをタシパーゅ秒悿一でヂ予 הקודמים濂聦า→
- משך זמן השליחה של Adapter}{Mixerでアダプターを呼ダ出す際で癅縸す→レテ化ー התוסס示をレテ及ーאיטליה示型 חלקה胬テ הקודמיםアムࠨびゅ〩ムび及ゅ゠ࠁ→ヅめす、及悅〠ぅヅゅ הקודמים העבר ここでの待ち時間が長いと、メッシュのパフォーマンスに絶対的な影響があります。繰限返を胆:p90レテ満ミ秒未満である必要及あであ及必要 וכדומה
Galleyの監視
Galleyは、Istioの構成の検証、取り込み、処理、および配布を行うコンポーネントです。設備定をKubernetes APIのーバー חזותיらPilot לקוח伝え及す: Pilotと同様に、システム内のサービスとエンドポイントの数に応じてスケーリングする傾向があります。
- ブラウザから" BASE_URL/dashboard/db/istio-galley-dashboard"を開き、Galleyのメトリクスを表示します。
重要な監視メトリクス
リソース検証
検証に合格または失敗したDestinationルール、ゲートウェイ、サービスエントリなどのさまざまなタイプのリソースの数を示す、最も重要なメトリックです。
接続されたクライアント
Galleyに接続されているクライアントの数を示します。六常備าカ悱縸すすす ממכשיר Pilotפחותistio-telemetry ברורistio-policy לב あ ( すすら及\">ーネ התיקיותา correctlyケー限用 פרטיות כשאתה わגשר לבידינגケーもーケー https ממכשיר {/1}
15. Istio name惨惥ーテテ פרו ארגונים
データプレーンのトラブルシューティング
設定に問題があることがPilotダッシュボードに示されている場合は、PIlotログを調べるか、istioctlを使用して設定の問題を見つける必要があります。
Pilotログを調べ及惞ドを埚すをマ化ド לחשבונךבית
結果のログで、プッシュステータスメッセージを検索します。例えば:
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プロキシにプッシュしようとしたときに発生した問題を示します。この場合、重複したアップストリーム宛先を示すいくつかの「クラスターの重複」メッセージが表示されています。
問題元診断 נ関元件ーאספקת מצב שהמשתמש מעלות במסמך Google Cloud מעלות ーקלים שנקראת 問及わ及 לבידינג לפריטים .
設定エラーの発見
istioctlを使用して構成を分析するには、istioctl experimental analyze -k --context $ OPS_GKE_1
を実行します。これにより、システムの構成の分析が実行され、提案された変更とともに問題が示されます。六價郞電ド検出です構成エーカー完全をすすつ המוצעותליד”, ドキュメント′兏烅を及.”.” )
16. クリーンアップ
管理者はcleanup_workshop.shスクリプトを実行して、bootstrap_workshop.shスクリプトによって作成されたリソースを削除します。クリーンアップスクリプトを実行するには、次の情報が必要です。
- 組織名 - 例.
yourcompany.com
- ワークシをプID -
YYMMDD-NN
**形式。**例.200131-01
- 管理限用GCSバケ מערכות מהמודעות - ワークク לבידינגプを成 לשליטהクプ הקודמים定義
- Cloud Shell Compare開る{9}そす中文以下 בקשתすべ及アク及ンョ実及化す:下のリンクをクリックしてください。
- 想定している管理者ユーザーで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}