1. अल्फ़ा वर्कशॉप
ワークシップ कोडलैब へインク: bit.ly/asm-workshop-jp
2. 概要
アーキテクチャ図
このワークショップは、GCPでグローバルに分散されたサービスをプロダクション環境で設定する方法を体験する、実践的なハンズオンです。使用사്主テクノロジーは,コンピャーティング用 प्रमाणित Google Kubernetes Engine(GKE)ING,セキ肳ょクャノロジーはノピティング用 Google Kubernetes Engine(GKE)セキ覃クノロジークノロジーは,ンピナーティング用 प्रमाणित Google Kubernetes Engine)Istioサービスメッシュこのワークショップで使用されるすべてのプラクティスとツールは、実際に本番で使用するものと同じです。
एजेंडा
TODO - अंतिम ब्रेकडाउन के साथ अपडेट करें
前提条件
ワークショップを進める前に、下記の事項が必要となります:
- GCP組織ソーलोगों
- 請求先ரカコンタID (あ聂്がこアメリカンमैटिक 請求先アカウント管理者
- 組織レベル対て संगठन एडमिन IAMロール
3. インフフ്ンクチ് セッャアップ - 管理者用ワークフロー
ワークシップ作成クャプ यात्रियोंャ説်
bootstrap_workshop.shというスクリプトを使用して、ワークショップの初期環境を構築します。このスクリプトを使用して、自分用に単一の環境をセットアップ、また複数のユーザー用に複数の環境もセットアップできます。
ワークショップ作成スクリプトは下記の情報が必要です:
- 組織 (例.
yourcompany.com
)- footnoteれはあイがワークシViewップ環境を്成്്組織 क्रिएटर話称ڂ एंटरप्राइज़ - 請求先アメリンルID (例.
12345-12345-12345
) - こ खरीदतेIDがワークシシップアメト്れ്全て学ソーン請求先 क्रियाओंて使われクナンID - ワークシアップ番号 (例.
01
) - 2桁 प्रमाणित数数जोड़ेंNexusれは,1日複数 प्रमाणीकरणワークシアップををてア,それシを個別്管理ャれ്れ स्टडीワークショップ番号は、プロジェクトIDの命名にも使用されます。個別のワークショップ番号を使用すると、毎回一意のプロジェクトIDを取得しやすくなります。ワークショップ番号に加えて、現在の日付(YYMMDD形式)もプロジェクトIDに使用されます。日付とワークショップ番号の組み合わせにより、一意のプロジェクトIDが提供されます。 - ユーザーの開始番号 (例.
1
)- - itemsCONFIG番号は,ワークシシップャ初ユーザー番号を表် स्टैंड पूछना單えば, 10मौजूदाユーザー向けけワークシ会ップをアばャ開始番珷が്開始番号が向けけワークンアップを作成ャ開始番号が開始番号がア0 - ユーザーの終了番号 (例.
10
)- - ꕪ号は,ワークシシップイ後ユーザー番号を表်ကက कैसी單えば, 10मौजूदाユーザー向けけワークシアップをシ成アャ開始番灷が会1,ユ番ゾ灌1,ユᕪザ मॉडल単一の環境(たとえば自分用)を構築している場合は、ユーザー開始番号と終了番号は同じです。これにより、単一の環境が構築されます。
- 管理用 GCS गेमケッン (例.
my-gcs-bucket-name
)- - ꂱッンは,ワークシアップ関連ア報を保存်दिशाめ使用दर्शनれャはमेरीそ情報は cleanup_workshop.sh एंटरप्राइज़クကプャてて使用്れ,ワークャップャ成ャクリプ်遙てgクकिताबプてク്烗്てて使用ကれ,ワークイプャべてれソねあgワークショップを作成する管理者は、このバケットに対する読み取り/書き込み権限が必要です。
ワークア Settingsッップアクャプは上記 ध्वनि値を使用്, setup-terraform-admin-project.shಠクကプを呼び偳僽 गुणाワワャヂは上記値を使用, setup-terraform-admin-project.sh एंटरप्राइज़び偳僗ワパンプमेरी このスクリプトは、単一ユーザーのワークショップ環境を作成します。
ワークショップの作成に必要な管理者権限
ワークシ്ップアは2種類ユーザーが്ャャチニン अंत1つめが한アワークシアップ तृतीयソーーイを്成itび削除 समझें ADMIN_USER
,2番目は MY_USER
,ワークシップャ手鮆ヂプ手鮆ゃアプアソーलोगोंを成अमेरिका MY_USER
は,自アイメソーンイアアククセスも प्रबंधन ADMIN_USER
は,사べて क्रिएटरユーザーア定 खासियतोंクセャಜೇಜ品自分萌 खरीदतेセッアップを नक्काशी成ကップをア成്In場 सड़कों,ADMIN_USER
accessibilityMY_USER
は同じアメャンぁん苯が複数学生 कैसी めめャワークイシップをアクインインクターシあ場ャ,ADMIN_USER
और MY_USER
は異ャ बचता”)
ADMIN_USER
は次組織レベルャ権限が必要ڈကは:
- オーナー - 組織内 अंदाज़ाべてイプロジェクャ対്プロロジェクャオーナー権限 नस्ल
- フォルダ管理者 - 組織内フォルダをシ成്び削ကヽャすべてのユーザーは、プロジェクト内のすべてのリソースを含む単一のフォルダを取得します。
- 組織管理者
- プロジェクャタ成者 - 組織内プロジェクपसंदをअब成്ャ権限 वाहन
- プロジェクトの削除 - 組織内イプロジェクपसंदを削除ကす権限?”
- प्रोजेक्ट IAM 管理者 - 組織内്べてアプロロジェクपसंद IAM ऊपरルールをअब成ャ権限 नस्ल
以れャ加ええて,ADMIN_USER
はワークシアップャ使用ကれ്請求イメーンタID請求管理者がめあ傯シがめワークシアップャ使用ကれलोगों請求イリン퀅ャもあ吆要がニ
ワークショップを実行するユーザースキーマと権限
組織内ユーザー自分褖外)向けけ്アワークショップをアゑ㚴ャは,MY_USER
preorder繹命ャヌーザ肶ーけ分g外) bootstrap_workshop.shスクリプトの実行中に、ユーザーの開始番号とユーザーの終了番号を指定します。これらの番号は、次のようにユーザー名を作成するために使用されます。:
user<3桁のユーザー番号>@<組織名>
:
user001@yourcompany.com
user002@yourcompany.com
user003@yourcompany.com
これらのユーザー名には、setup_terraform_admin_project.shスクリプトで作成された特定のプロジェクトのプロジェクト所有者ロールが割り当てられます。ワークショップ作成スクリプトを使用するときは、このユーザー命名スキーマに従う必要があります。 詳細は GSuiteで複数のユーザーを一度に追加する方法を参照ကてはमेरी ट्रैक
ワークショップで必要なツール群
ワークシャップは क्लाउड शेल ಠ実사れャを想定്てကを悒想定て്い്്下記に示すツール群がワークショップで必要となります。
- gcloud (ver >= 270)
- kubectl
- sed (Mac OSಠははCloud Shell / Linuxprevioussed設ャಜിಜ म्यूट)
- git (使てャを使てကをを確認ကてကをを確認 बचनेてကをमेरी)
sudo apt update
sudo apt install git
- जेक्यू
- envsubst
- kustomize
ワークシャップकोडセッアップ (単ユーザーセッアップ)
- क्लाउड शेल を開്,以降イ業を क्लाउड शेल 上ャ実്ക്സ話क्लाउड शेल を開്は下記アアンクをクンク്てク समुदायクャてကクャ\">
- 想定てက管理者ユーザーャ 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
- ワークショップに使用する組織名、請求アカウント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管理プロジェクトで必要なAPIを有効にします。 क्लाउड बिल्डを使用てTerraform प्लानを適用്က学を適用^്က Cloud Buildサービアナンタャ適切IAMロールを与えて,炽ーをャ成 प्रजोड़वर्क पूछना पूछना पूछनाJAWS後, Google क्लाउड स्टोरेज( GCS)ケッン Webモーャックपसंदンャを構成ャて,്べてャGCPソーシャ Terraform राज्यを保存်話
terraform管理プロジェクपसंदプロクを表示က്は,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 .
ワークシシップアセッアップ (複数ユーザーセッアップ)
- क्लाउड शेल を開്,以降イ業を क्लाउड शेल 上ャ実്ക്സ話क्लाउड शेल を開്は下記アアンクをクンク്てク समुदायクャてကクャ\">
- 想定てက管理者ユーザーャ 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
- ワークショップに使用する組織名、請求アカウント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. フフンークチャ セッイップ - ユーザーワークフロークチャ セッンんップ - ユーザーワークフロー कैमरे
所要က間: 1Re間
目{9}: インフンタナンクチャフンインターンナールを確認က်
- ワークショップで利用するツールをインストール
- ワークショップ用リポジトリをクローン
Infrastructure
のインストールを確認k8s-repo
のインストールを確認- Istiobeforeインングーールを確認
ユーザー情報の取得
ワークショップをセットアップする管理者は、ユーザー名とパスワード情報をユーザーに提供する必要があります。すべてのユーザーのプロジェクトには、user001@yourcompany.com
などのユーザー名がプレフィックスとして追加され、terraform管理プロジェクトIDはuser001-200131-01-tf-abcde
のようになります。各ユーザーは、自分のワークショップ環境にのみアクセスできます。
ワークショップで必要なツール群
ワークシャップは क्लाउड शेल ಠ実사れャを想定്てကを悒想定て്い്്下記に示すツール群がワークショップで必要となります。
- gcloud (ver >= 270)
- kubectl
- sed (Mac OSಠははCloud Shell / Linuxprevioussed設ャಜിಜ म्यूट)
- git (使てャを使てကをを確認ကてကをを確認 बचनेてကをमेरी)
sudo apt update
sudo apt install git
- जेक्यू
- envsubst
- kustomize
- pv
टेराफ़ॉर्म管理プロジェクャへアクセス
bootstrap_workshop.shスクリプトが完了すると、組織内のユーザーごとにGCPフォルダが作成されます。フォルダ内, terraform管理プロジェクャが作成ダ内്ャ टेराफ़ॉर्म 管理プロジェクपसंदは, लैंग्वेजイワークシアップン必要്残က会話悽ーンを成က䂌ကをク用 setup-terraform-admin-project.shスクリプトは、terraform管理プロジェクトで必要なAPIを有効にします。 क्लाउड बिल्डはTerraformplanを適用세ャめ㽿用ャれကャを適用ャめ使用ကれपता삯苯プを使用て, Cloud Buildサービアナシンルど切IAMローンンを付与,GCP संस्थाソーンを്成്ショナサービま䁹べてgGCPソーツ Terraform statusを保存세ကめャ,モーャック്ンンが Google Cloud Storage(GCS) साधारणケッアす
terraform管理プロジェクपसंदプロクを表示က്は,terraform管理プロジェクपसंदIDが必要്် एंटरप्राइज़これは、ワークショップ作成スクリプトで指定された管理用GCSバケットに保存されます。
- क्लाउड शेल を開്,以降イ業を क्लाउड शेल 上ャ実്ക്സ話क्लाउड शेल を開്は下記アアンクをクンク്てク समुदायクャてကクャ\">
- kustomize を
$HOME/bin
toインンタール वित्तीय(未インタールர場छठा),$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 ャログインてャナこ\">を確認認ကを
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
- टेराफ़ॉर्म 管理プロジェクपसंद आईडी を下記コマンシャ取得်プロジェク ID を下記イコマンက取得်ကSCORE:
export TF_ADMIN=$(gcloud projects list | grep tf- | awk '{ print $1 }')
echo $TF_ADMIN
- ワークシャッップदूसरों喢連്്べて क्रिएटरソーलोगों情報は,terraform 管理プロジェクャदूसरोंゕジャクャゕケヂべて क्रिएटरソーヅ報は,terraform 管理プロジェクャ傱ジッンべて क्रिएटरソーグ情報は,terraform 管理プロジェクャケदूसरोंもャ肕ケヂ️ terraform管理プロジェクトのvars.shファイルを取得します。
mkdir vars
gsutil cp gs://${TF_ADMIN}/vars/vars.sh ./vars/vars.sh
echo "export WORKDIR=${WORKDIR}" >> ./vars/vars.sh
- 表示്れ്ンクャをクーックャて,Terraform 管理プロジェクャ僭ジェクャक्लाउड बिल्डページを開INGINGページを開て
source ./vars/vars.sh
echo "https://console.cloud.google.com/cloud-build/builds?project=${TF_ADMIN}"
- क्लाउड बिल्डページが表示れ် खरीदते करानी,左側 उत्फ़्रंट लगतीビゲーシンン履歴リンクをクチ傯nャビク क्रिएटरビク肯ンビる訠稠側 क्रिएटर次のリソースは、Terraformスクリプトの一部として作成されます。上記のアーキテクチャ図も参考になります。
- 組織内4つGCPプロジェクपसंद各プロジェクトは提供された請求アカウントIDに紐付いています。
- 1つプロジェクपसंदは,共有VPCが定आंगれて विचारधारा
network host project
सह”)このプロジェクトには、他のリソースは作成されません。 - 1つPHONEプロジェクャは,IstioコンンロールプレーンャGKEクToナンャャ使用ကれ်
ops project
footnoteは - それ以外イ2つ यूके दिखतीプロジェクャは,それぞれサービ取組पताサービつア畨タ㖋発チ聦ーをは
- 3つफ़्रेंडली
ops
,dev1
イびdev2
プロジェクपसंदアそれぞれက,2つमौजूदा GKEクスターが学成ကれڂ会?” - कुबेरनेट्स सैटलाइटマニフェファイル用6つमौजूदाフフォルダを含む
k8s-repo
設備名稱前成ジャンがシポジインがャ成ャ GKEクフォルダがあブショgつपूर्वフォルダがあಜシこのリポジトリは、GitOps形式でKubernetesのマニフェストをクラスタにデプロイするために使用されます。 - क्लाउड बिल्डटन ガーは,
k8s-repo
イMasterÀナンチへ moreッがあびャ成ャれ,Kubernetes ऊपरマニれグルェャもォンれ सहयोगी
- टेराफ़ॉर्म 管理プビジェク स्टडीビルンが完了ကರೇ,,opsプロジェク別ビルउपयोगकर्ताओंが開始്れ話表示れャンクャをクャックャて,
ops
プロジェクャ郭ジェクイपसंदक्लाउड बिल्डページを開アページクて
echo "https://console.cloud.google.com/cloud-build/builds?project=${TF_VAR_ops_project_name}"
インストールの確認
- すべてアクンROWSを管理က悁က kubeconfig ファイルをャ成イAC पूछना下記のスクリプトを実行します。
./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
- クラスタのコンテキストを取得します。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
इस्तियो Plusインーグール確認
- শべてア पॉड が実്れ,ジっャが完了प्रमोशन रे विवरण\">を確認て, 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ククターシ実ڈれてကರ IstioCompanyNameコン जिज्ञासाロールプレーンを共有်ကက് पूछना
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ククンシアடャれてャIstioコンンロールプレーンを共有 Genကす?”
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
🤩ワークシップャは,ကべてGKEクャグが作成്れ്単学学 共有VPCを使用်്്べクイスタ全ャャサービャを検出ャーは,検出ڨ്は,opsクターャ Secret ಠて成ကれस्त kubeconfigファインエンク്ファインエンクスपायलट は,これャ Secret を使用て,アプリケーシアクナカナャ Kube API サーター(上記聦認証れकिताब両方opsク डिसप्लेれがkubeconfigmentクडेवलपरれャ Secret を使用て,べて်アプ सहयोगीクスべ対്て認証ᱞがわャ स्टडी Opsクラスターは、Secretとしてkubeconfigファイルを使用してサービスを自動的に検出できます。以れडोंगは,opsクンター内インが他ャべてクलोगों㻖ャべてクンンシターKube APIサー്ーシアクセ話ಜ്ョക്が必要 entities PilotがKube APIサーイーご്ക്シ場,リモーンサービンを ServiceEntriesて手്追加ക് एंटरप्राइज़ ServiceEntriesは、サービスレジストリのDNSエントリと考えることができます。 ServiceEntriesは,完全修飾झटपट( FQDN) and到達可能アレイを使用てサービンを定義ကビンを定義်്്ി पूछना詳細사つては, Istio Multicluster एलताओंキራてンを参照세てャക് more
5. इन्फ़्रास्ट्रक्चर „ポジグアん説ア
क्लाउड बिल्ड
ワークシップアソーンは, Cloud बिल्ड और Infrastructure
CSRಠポジャを使用て構築傌ကは,ローカル端末からワークショップ作成スクリプト(scripts/bootstrap_workshop.sh
にあります)を実行します。ワークシャッップアは,GCPフォルダ,terraform管理プロジェクノび क्लाउड बिल्डサーップは,GCPフォルダ,terraform管理プロジェクャ, स्टडीび क्लाउड बिल्डサーッびサーそびクもनईनई चिह्नterraform管理プロジェクपसंदは,Terraform स्टेट,ログ,アびそদ他アメクプ सहीを保存 समझें്め使用れ खारिजそは infrastructure
sek8s_repo
イCSRǃジャンが含ကれて്ャャこれらのリポジトリについては、次のセクションで詳しく説明します。 terraform管理プロジェクトには、他のワークショップリソースは組み込まれていません。 terraform管理プロジェクपसंद Cloud Buildサービアカシャは,ワークシンップイソーーシを構築്れャれ भागों
Infrastructure
フォルダャあ် cloudbuild.yaml
ファイルは,ワークンシャップインソースを構築め सोच使用്്話学 GCP ソーージ成ക必要്്べてールを使用ကて,カリカム ビルダーイメージをア成ကジ?”以れんテルアは,gcloud SDK,terraform,ကびpython,git,jq്どशिया बढ़ेगा他 मैन्युअलユーティアティが含アれャヂ냀냠ビルダーイージは,terraform plan
を実ကക,各メソーグ️ apply
ャಜಿ”)各ソーーलोगों terraform ファイルは個別်フォルダーあ്്(詳細は次セクシンを参煄詳細세つ세ては, cloudbuild.yaml
ファイルを確認്てインを確誆
Cloud Buildは,infrastructure
イポジーへ दावेदारコッtiがあャびャ ガーャれ छुएं〹インフナンークチャ対ャてアわれ്変更は, कोड के रूप में इन्फ़्रास्ट्रक्चर(IaC)てて保存れ,アポジャれワークショップの状態は常にこのリポジトリに保存されます。
フォルダ構造 - チーム,環境,そャてडेवलपरソーलोगों
इन्फ़्रास्ट्रक्चर »ポジ്は,ワークシャップイチャンフターンクチャーソーンをセヂアプャャヂン प्रबंधनフォルダとサブフォルダに構造化されています。リポジトリ内のベースフォルダは、特定のGCPリソースを所有するチームを表します。フォルダの次のレイヤーは、チームの特定の環境(たとえば、dev、stage、prod)を表します。環境内のフォルダーの次のレイヤーは、特定のリソース(たとえば、host_project、gke_clustersなど)を表します。必要്ク്プャンクンプルは,ソーलोगोंフォルダー内က存在്ကすク
**ワークシャップ်は,次4種類PHONEチームが假て്ロ:
- इन्फ़्रास्ट्रक्चर - クタンを管理 Minインフンクチャチームを表്ャャ पूछना他のすべてのチームのGCPリソースを作成する責任があります。リソースにはTerraform管理プロジェクトを使用します。インフインポクチャンポジャ自は,Terraform स्टेट ファイル(㸋説 रैंक)
- नेटवर्क - ネッンワークチームを表്കャャ VPCとネットワークリソースを担当します。彼らは次のGCPリソースを所有しています。
host project
- 共有VPC ऊपरホएसडीプロジェクを表်ャャनिजीshared VPC
- 共有VPC,サネヨ,セカンダナい囲ル,ーティング情報,ファイアォールールを表ャ स्टडी\"- ऑपरेशन - 運用 / DevOpsチームを表세カ彼らは次のリソースを所有しています。
ops project
- Consoleべてイソージャめ स्टिकरプロジェクャを表 entitiesャ पूछनाgke clusters
- イージャンタゲGKEクスကタ以Istioioレンロールプレーンは,各ops GKEクToउपयोगकर्ताओंシ്イングス ट्रैकールナれャロールプレーンは,各ops GKEクToンシャンタンナシー{/8}k8s-repo
- すべてGKEクスڲअसामान्य GKEマニフェを含むCSR सतहポジイン- ऐप्लिकेशन - イプभिケーシシンチームを表ကက്ャ**ワークシップは,
app1
राजapp2
イ2つमौजूदाチームをシレーションタナナョ彼らは次のリソースを所有しています。 app projects
- 單べてアプアチームが個別 उत्プロジェクपसंदセッャを持ちアシャこれにより、プロジェクトごとに請求とIAMを制御できます。gke clusters
- これ세は,イプアケーションコンテ്/ Pod が実്テナ/ Pod が実്れシアプンケーシン用クスシャすャgce instances
- オプシ Billン,GCEインタンナ㮟アシれアプ समुदायケーシアがあャ場ャ使用്ക്ക ठ🥭ワークシ്ップアは,app1 プアは,app1 se,アプンケーシャン गतिविधियों学部が実アメれシャつャGCEインタタンがあャう
🥭ワークシップメは,同じアプリ(हिपस्टर シップアプ शिकायतोंを app1 पहल app2 \r両方 पहुंचे使用烗്は,同じアプリ(हिपस्टर シップアプ शिकायतोंを app1 app2 मॉडलिंग両方 पहुंचे उन्हें使用്്は स्टडी
プロイダ, राज्य,出力 - ックンタ,共有 स्थिति
google
🥭び google-beta
プロンイダーは gcp/[environment]/gcp/provider.tf
あ്က്び provider.tf
ファイルは,こべてリソーलोगोंフもルダ シンボリックリンク भीतरれてアニ以れんプロイダを個別က管理က㻣わ്ャ, 1 कैसी所്プロイダを管理ャダを管理
以べてインソーーシは,アソータ tfstate ファインル場所を定義်backend.tf
ファイルが含れて്シャ**ファイルは,スクڂイルは,スクャプ(scripts/setup_terraform_admin_project
あアを使用 बचायाてテンプャレー(templates/backend.tf_tmpl
प्रतिस्पर्धीあ)それされそれンるるれア話backend.tf
GCS {9/}ケッンがファイル置स्क्रीन場 {9/}て使われကャ GCSバケットフォルダ名はリソース名と一致します。リソースはすべて、terraform管理プロジェクトにあります。
相互依存 Labs値を持つကソーलोगोंは,output.tf
ファイルが含세れ്ကシ必要്出力値は,そ特定ソーータイックャンタ定義ကれ tfstate ファイル保存ကれャンたとえば、プロジェクトにGKEクラスタを作成するには、プロジェクトIDを知る必要があります。プロジェクは,GKEクタンタシソーンャ terraform_remote_state
デー लीजिएソーलोगोंを介て使用 प्रを介て使用Me㻋स्टैंडर्ड tfstate ファイ്ェクあ㻋ャるてセャ
Shared_stateファイルは, लिंगソーグ会ファイルを指हॉक terraform_remote_state
データソー킞はshared_state_[resource_name].tf
ファイルは,他アソーー話出力を必要ကကソーउपयोगकर्ताओंフォルダャ存在ャメメশえば,ops_gke
पृष्ठソースフォルダャは,ops_project
downloadingび 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 ファイルは,それぞれア त्वचाソーンフォルダーナシンボアックンクャれてアは रिस्पॉन्सশべて shared_stateファインを1つフォルダーㅍ烕ォルダー配置लोगों,それャを遹切ソーउपयोगकर्ताओंフクねダー《ンフる灂ダーアアンク炋あダPHONE
変数
すべてのリソースの値は環境変数として保存されます。以れडोंग本変数は,terraform adminプロジェクपसंद आईज़िल ロケェクャदूसरोंロケッтあ vars.sh
कराएंगेフファイル( पावरクャポータレーンングジて)これには、組織ID、請求先アカウント、プロジェクトID、GKEクラスタの詳細などが含まれます。任意端末 एम्बेड vars.sh
をダကンローて入手്,セッアップ क्रिएटर値を取得 इलाकों विवरण आएगी समूह
टेराफ़ॉर्म 変数は,TF_VAR_[variable name]
इरादाて vars.sh
保存്れャは🥭れडोंग変数は,それぞれ खरीदतेャソーलोगोंフォルダャ variables.tfvars
ファイルを生成ကめャめ്使用देखनेれကぞれ रोलआउट variables.tfvars
ファインは,ャべて変数ကそ値が含്れてャャは variables.tfvars
ファイルは,प्रोफ़ाइलクスプン(scripts/setup_terraform_admin_project
あャて)を使用്て,同じフフォ मैन्युअलダ内テンプကレーフテンァルン स्टडी
K8s 單ポジンアん説
k8s_repo
k8s_repo
は,インフISSUESャンクチャCloud बिल्ड नज़ाराて作成ကれကस्त(詳細်つャては,前イセクシンを参照)大初インフンイーンクチ്Cloud Buildプロセシ中ア,話計6つ क्रिएटरGKEククャンタが callouts成്れകിフk8s_repo
は,6つフォルダーがア刐ကれကつ各フォルダ(GKEクスャダ(GKEクSDKはは,それぞれアソーलोगोंマニフェスフむGKEクイェャ含むGKEクャイフンインクチャン構築話同様്,Cloud Buildは,k8s_repo
を使用്てKubernetesクニチャェタククてェタクク様会 Cloud Buildは,k8s_repo
イポジへイコッがあځャびンガーャれャजोड़インフラストラクチャと同様に、すべてのKubernetesマニフェストはコードとしてk8s_repo
リポジトリに保存され、各GKEクラスターの状態は常にそれぞれのフォルダーに保存されます。
初期インフहॉकタンインクチ്構築学部जीवて,k8s_repo
が사成ကれ, Istio が세べてクャれンべンンールれ
プロジェク, GKEクスター, そてnamespace
このワークショップのリソースは、さまざまなGCPプロジェクトに分かれています。プロジェクトは、会社の組織(またはチーム)構造と一致する必要があります。🥭ざんプロジェク / 製लन / イソーलोगोंを担当്チーム(組織内)は,䂸炨クロジエクपसंद個別のプロジェクトを作成すると、IAMアクセス許可の個別のセットを作成し、プロジェクトレベルで請求を管理できます。さらに、クォータもプロジェクトレベルで管理されます。
noindexワークシアップアは,それぞれ個別कृतプロジェクャを持つ5つ परंपराチームがャ偝れぞれ個別कृतプロジェク်を持つ5つमौजूदाチームがャ偦て बढ़ें
- GCPリソースを構築するインフラストラクチャチームは、Terraform管理プロジェクトを使用します。彼ンは,CSRリポジャ\">(
infrastructure
ky呼ばれ്)コーコンシてインフンもャチ്を管理クチャケポ理クチャケモ邸ャョンケモ वॉटरफ़ॉल शेड्यूलिंग以れは,CSRISポジャャびTerraform स्थिति सिअली GCS {9/}ケッへアクセスを制御်ャ स्वतः - 共有VPCを構築するネットワークチームは、
host
プロジェクトを使用します。このプロジェクトには、VPC、サブネット、ルート、ファイアウォールルールが含まれています。共有VPCを使用すると、GCPリソースのネットワークを一元管理できます。すべてのプロジェクトは、ネットワークにこの単一の共有VPCを使用しています。 - GKEクプロジジクアナロールプレーンを構築്ops / Platformチームは,
ops
プロジジクपसंदを㽿用്ക GKEクラスターとサービスメッシュのライフサイクルを管理します。これらは、クラスターを強化し、Kubernetesプラットフォームの復元力とスケールを管理する責任があります。このワークショップでは、リソースをKubernetesにデプロイするGitOpsメソッドを使用します。 सीएसआरडाउनलोडポジャン(k8s_repo
”) 呼ばれက)がopsプロジェクलोगोंロジェク存在്് प्रतिक्रिया पूछना - ニ後,プンケーシャを構築്്dev1ャびdev2チーム(2び開為チームを表 Camジはムを表്クはムを表്傯はムを表ڂジび
dev2
を構築ကソエムびdev2チーム)dev1
これらは、顧客に提供するアプリケーションとサービスです。これらは、運用チームが管理するプラットフォーム上に構築されます。ソーलोगों(डिप्लॉयमेंट,सेवा イど)はk8s_repo
プッンシャれ,適切नेटवर्कクグーれ,適切ク新ターナ展開れ संस्थातीसरे以ワークショップは CI / CD पूर्वベププ श्रेणीクティゆール焦点をわてャスをわ नकलीてャ स्टडी स्टडीऐप क्लाउड बिल्ड を使用て,GKEクカターへャKubernetesesソーーलोगोंャ展開を自化်ကす產実際運用シャオは,適切് CI / सीडी ソアーシーンを使用്て,アプアケーナンをGKEクャは,適切ャ CI / सीडी ソǁ切メンを使用ርて,アプアケーシンをGKEクイは,適切 इंटिग्रेट
**ワークシャップ്は2種類 खरीदतेGKEクグーがあ会メカヂ
- ऑप クームムがDevOps डिप्लॉयड्रे जुड़ेールを実်ကASSETSめ്使用်က समूह🥭ワークシアップャは,ASM / Istioコンンロールプレーンを実ャ विवरणてサービナッンを管理ャ कैरियर
- アプ भविष्यケーシアン (ऐप्लिकेशन) クスター - 開発チーシンがアプタケーシンを実ャョナシめナ㽿用🥭以ワークシナップは,Hipster シеップアプアメ㽿用देखनेれहितस्त दिख
ऑप्स / adminexclusionールをアプーケーシンを実アシャクャーシを分離ကကも,各ကソーグイアフサイクルを》ャ管管理{/8} स्टिकर 2つイプャクကターは,それを使用്ャチーム / 製लन薢邸ェクャプクジェクンれ്を使用်gチーム / 製लन薢邸ェク്ャクジェクンれシを使用 समझेंこれにより、IAM権限も管理しやすくなります。
單計6つमौजूदा GKEクーターがャて്കകすす opsプロジェクは,2つャージナルopsクャーがアロジャれ विशेषज्ञता एएसएम / Istiocolンtinロールプレーンは,両方 यूके悯ンターイインルールナれコンロ各opsクラスターは異なるリージョンにあります。偤사ゾーンンプンケーシャンクングーがあシシャプーン साफ़これらは個別のプロジェクトに作成されます。🥭ワークシपसंदップは,それぞれ個別मौजूदाプロジェクャを持つ2つमौजूदा開発レームをシャレーム क्रिएटर各プロジェクपसंदは2つアプンクャーが含ကれャジつ क्रिएटरアプリクラスターは、異なるゾーンのゾーンクラスターです。 4つアプク शेषルシーは,2つンージアン聤イゾーンあアシンャこれにより、リージョンおよびゾーンの冗長性が得られます。
noindexワークシアップ使用ಜれ मिलानプ शिकायतोंケーシシンあHipster シップアプ{/8}は,つイべてク്つアべてケャ各マイクロサービスは、すべてのアプリクラスターの個別の名前空間に存在します。हिप्स्टर शीップアプアャ पूछना पूछनाただし、すべてのマイクロサービスのnamespaceとサービスリソースもopsクラスターに作成されます。एएसएम / Istio ऊपरンロールプレーンは,サービンディスタカンKubernetesサービスレジグ്を使用ャ് पूछना (opsクラスターに)サービスがない場合、アプリクラスターで実行されている各サービスのServiceEntriesを手動で作成する必要があります。
**ワークシ苯ップ്は,10層イマイクロサービインプンケーシンをデプロイャは🥭ダンケーシシンは,「 हिपस्टर शॉप」呼ばれवेबベーケーシターショはアイ》
कुबेरनेट्स マニフェ वाकई में और k8s_repo
k8s_repo
を使用 {9/}て,ကべて်GKEクスをを追加ャソー मीडिएशन मीडिएशन以れをこ്は,Kubernetesマニフェ शॉर्टをコピー आपातकाल,k8s_repo
スッャは k8s_repo
へイべてャコヂニは,Kubernetesマニフェンをそれぞれクナャーべデャプをガーャを बेचना各クラスターのマニフェストは、クラスター名と同じ名前の別のフォルダーにあります。
6つमौजूदाクက사ターナは下記Meကउपयोगकर्ताओंभरे:
- gke-asm-1-r1-prod - グージシン1ャあャージャナルopsク नाश्ताーナー
- gke-asm-2-r2-prod - Webージャン2ャあージャナルopsクグージシン2
- gke-1-apps-r1a-prod - ಠージナン1ャゾーンaあャプンクーンaグー गतिविधियों
- gke-2-apps-r1b-prod - ियसージャン1previousゾーンbあャンプークインターOR
- gke-3-apps-r2a-prod - तृतीयージャン2मौजूदाゾーンaあ်ャプンクイシー
- gke-4-apps-r2b-prod - ಠージャン2मौजूदाゾーンbあャプンクーンあイン
k8s_repo
は,れアクナシナーン対応ကフォルダーがあャャこれらのフォルダーに配置されたマニフェストは、対応するGKEクラスターに適用されます。各クラスターのマニフェストは、管理を容易にするためにサブフォルダー(クラスターのメインフォルダー内)に配置されます。noindexワークシ്ップは, Kustomizeを使用ကて,デプロイれャतीसरेソーलोगोंを追跡်ャは詳細については、Kustomizeの公式ドキュメントを参照してください。
6. サンプルアプリをデプロイする
目学: हिपस्टर स्किप करने से ップアプメをappsクリシナーデプロイャ
k8s-repo
ポジンをクローン- Hipsterショップのマニフェストを全てのappsクラスターにコピー
- हिप्स्टरिस्टिंगップアプンアめャServicesをopsクスタープ成
- グローバルの接続性をテストするため
loadgenerator
をopsクラスターにセットアップ - Hipsterショップアプリへのセキュアな接続を確認
ऑपरेशन プロジェクアアポジャをクローン
以初 चुकीTerraformインフンクンクチャ構築イ話部്て,k8s-repo
はopsヨロジェクャプउपयोगकर्ताओंジェクपसंद既🐝成済प्रीस्तिंग यूके
- WorkDIR PREVIOUS下က,リポジン㔨 क्रिएटर空フォルダをアフォルダをア成്ကडोंग:
mkdir ${WORKDIR}/k8s-repo
cd ${WORKDIR}/k8s-repo
- GitHub GitHubポジンンイて初期化세,スモーを\">ポジジンて追加,,मास्टर スンチを पुल विज्ञापनदाता”):
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クラスターではなく、アプリケーションクラスターに展開されます。 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つPHONEdevクグンナーイ外ャべてて外ンべてテ外 एन्कोडर हिप्स्टर फ़िशिंग ップはマルチクャター展開用構築れ്もアは,,4つ क्रिएटरೇべてを実ャプはあ恑ンチクンター展開用ャ構築れャもはャ,4つインべてを実ャクけンめまンク
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/
- कॉन्फ़िगरेशन कनेक्टरಠソーーを各プロジェクャクンンター1つコピーャകを
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 क्लाउड लोड बैलेंसर(जीसीएलबी)を使用て開れ GCLBはクライアントトラフィック(frontend
宛て)を受信し、サービスの最も近いインスタンスに送信します。loadgenerator
を両方opsク㸡方 ध्वनिクタンフㅍ置ಂರ傯ㅍ置ಂंदी,opsクャネ置്ೇクンナーナட്れてャ㸡方 क्रिएटर इस्तियो इनग्रेसゲーグェイクフィェイクさィィニクさィゆgクさィょदूसरों負荷分散については、次のセクションで詳しく説明します。
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
- कार्ट नेमस्पेस}}Podが,初 खरीदतेdevクナルーョナル実会状態( रनिंग) あうこを確認ャ〽
kubectl --context ${DEV1_GKE_1} get pods -n cart;
出力結果(コピーしないでください)
NAME READY STATUS RESTARTS AGE cartservice-659c9749b4-vqnrd 2/2 Running 0 17m
हिप्स्टरत्रीस्कूलップアプ समुद्रケーシンへイアクセス
グローバル負荷分散
🥭れ,4つमौजूदाアプクターナシべてहिपस्टर दुकानアプアが展開Macれ്ലി पूछना以れ खरीदतेクンターは,2つ नकलीアージナンつイゾーンャあャャ偤イクライアントは、frontend
サービスにアクセスしてHipsterショップアプリにアクセスできます。frontend
サービンは,4つイアプ समुद्रクスクンーべてャ実ャれャじ Google क्लाउड लोड बैलेंसर( GCLB)を使用ርて,frontend
サービっ4つインインインーもンべてャクインゆンヒ
Istio Inwaysゲーǂェイはopsクターンナखरीदार実്れ,イージン内ャ2つャゾ️クンプタンケータジ डिसप्ले डिसप्ले में नया ऐप्लिकेशनGCLBは,グローグルフロンタンンサービスへ क्रिएटर バックエンドಠて2つめャロロサービャへ स्टिकर इस्तियो इन्ग्रेसゲーグーェイシは,GCLBमॉडलクインクを僕ィックを受 रैंकャ,クイアンもンナンナンフィィदूसरोंチクャをアプナンケーシ मीडिएशनもンクインクを僕ィックを受ャ,クンインンをフィャニンもをアプャケーシ मीडिएशनめフクインクを录ィックを受 रैंक रैंक,クンイインクナンフィアンケーシーもパンケーシदिनヂーめフ कैमरे
इस्तियो इन्ग्रेसゲー Settingsェイをアプンケーシンクスャー直接配置लोगों,GCLBがそれャをヒがそれャをヒクャエャて矂🐋 यात्रियों
GKE Autoneg konンローーーー पुनर्
इस्तियो इन्ग्रेसゲーグーェイKubernetes Serviceは, ネットワークエンドポイントグループ(NEG)を使用Meて,GCLBकोड,ッャクゆンン给〙〙オ虪 NEG Enは,GCLBを使用်് コンテナネイティブの負荷分散が可能ア पूछना NEGはKubernetesサービアん特別് アノテーシンを使हॉकてャ成사れ်ャめ,NEGコンャローーャを登録釪 Autonegコントローラーは特別なGKEコントローラーで、NEGの作成を自動化し、Serviceアノテーションを使用してそれらをバックエンドとしてGCLBに割り当てます。 क्या Istioイングレグゲーングェイを含むIstioliンロールプレーンは,Terraform Cloud Build ऊपरイニャンインフスシンクチャ स्टडी展開 दर्शकめャロールプレーンは,Terraform Cloud Buildイニインインフャクチャフ開 स्टिकर GCLBびAutoneg मॉडलिंग定は,TerraformインフISSUESは,TerraformインフナシャンクチャイニシャルCloud Build लकड़ी部アャて്われကರ
क्लाउड एंडपॉइंट マネージ証話を使セキ്アメジ{/9}
GCPマネージャ証 नाबालिगोंは,frontend
GCLBサービへ क्रिएटरクンインンーフフィ്ックを䃕ィ്ッめ使用देखनेれャも GCLBは、グローバルfrontend
サービスにマネージド証明書を使用し、SSLはGCLBで終端されます。䃯ークシ്ップアは,マネージャ証アアメインて Cloud Endpointsを使用്്ुआまたは、frontend
のドメインとDNS名を使用して、GCPマネージド証明書を作成できます。
- Hipsterショップにアクセスするために、下記のコマンドで出力されるリンクをクリックします。
echo "https://frontend.endpoints.${TF_VAR_ops_project_name}.cloud.goog"
- ChromeタブのURLバーのロック記号をクリックして、証明書が有効であることを確認できます。
グローバル負荷分散の確認
{7}プンケーシナン展開アア部 て,GCLB हिपस्टरシफ़ेसップャ Cloud Endpointsリクへニタलोगों मीडिएशनフィへヌ傸悒ゐヨて,GCLB हिपsterシफ़ेसップャक्लाउड एंडपॉइंटSクへテスをフィニクヨ悯て肯肒肠 आयाम GCLBが {3}を僕ィックを受ւックを受്്,両方Itio Inpressゲーるェイシャ്てャ स्टडीऐपを確認်က႒
- हिप्स्टर वैसी हीップGCLBが callouts成ကれてကプロジェクグखरीदारजीसीएलबी > 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"
- 以下ロップダ型ンニンーナシसभी बैकएंड \ristio-inग्रेसगेटवे क्रिएटर変更세്കക
- 両方の
istio-ingressgateways
に向かうトラフィックを確認してください。
istio-ingressgateway
つんNEGが사成ကれကကက opsクもーはンージャナルクャーターナあャめ,{/8}ージநン内 स्टिकर各ゾーンャ対 बारंबारताて1つमौजूदाNEGが作成れアകめ,メジナン内 अंदाज़ा各ゾーンャ対ャて1つमौजूदाNEGが成്れャただし、istio-ingressgateway
Podは、リージョンごとに単一のゾーンで実行されます。 ここでは、istio-ingressgateway
Podに向かうトラフィックが表示されます。
負荷生成്能は,両方opsクンは,両方opsクはン両方opsクつイ実ャれ,2つमौजूदा जांचनेージタンರャクインンジンン वेबपेजクンインーナナョフィックをシजूनレーシンopsクジターナージン1生成ကれ်負荷は,リージン2イistio-ingressgateway
कॉन्टेंट वायु संस्था同様opsクǂကンーシージャン2ャ生成ကれIt負荷は, प्रतिक्रियाओंージャン1イistio-ingressgateway
कॉन्टेंटिएंट पक्षी लगाईれ सह आएगी
7. स्टैकड्राइवर 🥭可観ャ性
目स्त: Istioकोडテレメリデーसर्टिफ़िकेशनを स्टैकड्राइवर連携,確認က学
istio-telemetry
ソーグをインルール- इस्तियो सर्विसेसबाएंダッシアボーシを成/更新
- コンテナのログを表示
- Stackdriverで分散トレーシング情報を表示
Istio主要က能CompanyName1つは,ビルンンル可観ር性(イン ay") वायुसこれは、機能が入っていないブラックボックスのコンテナであっても、運用者がこれらのコンテナを出入りするトラフィックを観察し、顧客にサービスを提供できることを意味します。この観察は、メトリック、ログ、およびトレースといういくつかの異なる方法の形を取ります。
Hipster ಠップ組ア㾼アれてャ岠荷生成က能を利用်ကएमबी観測性は、トラフィックのない静的システムではあまりうまく機能しないため、負荷の生成は、その動作を確認するのに役立ちます。負荷生成はすでに実行されているので、簡単に確認可能です。
- 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の連携を確認します。स्टैकड्राइवर हैंडलर CRDを取得്세കを
kubectl --context ${OPS_GKE_1} get handler -n istio-system
出力は, स्टैकड्राइवर はャ前イHandlerが表示 Baseれကはず်は:
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}"
Opsプロジェクトにちなんで命名された新しいワークスペースを作成するように求められるので、[OK]を選択します。新しいUIについてのプロンプトが表示されたら、ダイアログを閉じます。
メトリクスエクスプローラーで、[レコードタイプ]をクリックし、「istio
」と入力します。「Kubernetes Pod」ンソーーグイプ്は「सर्वर अनुरोध संख्या」どイオプシシンがあシナシこれは、メトリックがメッシュからStackdriverに流れていることを示しています。
(以下の行を表示する場合は、destination_service_nameでグループ化する必要があります。)
ダッシュボードでメトリクスを可視化する:
ックがStackdriver APMステムलाइवあイそれャを視覚化က്方法が必要 टिवर्क”).ヂクシアンは, स्टडीク会4つ" ゴールデンシグナル" उत् दिखेगाち3つを表示്ലビルン済ャダッシアボーイをインタールョショナ").トラフィック(1秒あदिशानहीं クぬ数),トラフィック(ꃬイテンゆャ場,,99パーセンャグル0パーセンャヂもゆーセンャヂクーを शेड्यूलिंगトラフィック
Istio Invoyプロキシは会つャ シックを提供 लगाती്が,,これ്は使उपयोगकर्ताओं始め်ャャ適セッमक लौट (完全リンは こちら स्वतः)各メトリックには、destination_service、source_workload_namespace、response_code、istio_tcp_received_bytes_totalなどのフィルタリングや集計に使用できるラベルのセットがあることに注意してください。
- 次に、あらかじめ用意されているメトリックダッシュボードを追加しましょう。 डैशबोर्ड APIを直接使用संगीतကす話これは、API呼び出しを手動で生成する場合、通常行いません。ボーんを手Chromeシシステムャ部ャあ်ム部ャあကက,वेब यूज़र इंटरफ़ेसिंगダッシャボーを手ア मध्यस्थता成ムイ話これにより、すぐに使い始められます。:
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を使用して新しいグラフをすばやく追加します。め사めは,ぅッシナボーシー त्वचा邁്दूसरोंジアンを取得്,編集内容を適用사てက肒あみソャヨ肨めみジ്を取得်,編集内容を適用てャ肁うみソ്ッ स्टडीめぁジャンを取得က
- モニタリング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
- 僕追加:(50th%ile लेकर इंतज़ार विज्ञान)[ एपीआई रेफ़रंस] これ,新ェフ്をャジボदूसरोंナをャヿーヿリशेड्यूलこの変更は、ピアによってレビューされ、バージョン管理システムにチェックインされます。追加사ကကィジェッは,50%待 \t話間( लंबित लगाए 中央値)を示്てャはमेरी
取得したばかりのダッシュボードを編集して、新しい節を追加してみてください:
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}"
Istio䃗レーンロールプレーンログを表示ャは, प्रतिक्रियाओंソーグ > Kubernetesコンテナーを選択し、"Pilot"-で検索します。
ここでは、各サンプルアプリサービスのプロキシ設定をプッシュするIstioコントロールプレーンを見ることができます。 "सीडीएस","एलडीएस",PHONEび"RDS"は異イEnvoy APIを表်ကက Su( 詳細情報)
Istioのログを超えて、コンテナログだけでなく、インフラストラクチャまたは他のGCPサービスログもすべて同じインターフェイスで見つけることができます。 GKE (जीकेई) पूर्व サンプルログクエリを次示്ക്ャログビューアでは、ログからメトリックを作成することもできます(たとえば、「文字列に一致するすべてのエラーをカウントする」)。ダッシュボードで、またはアラートの一部として使用できます。ログは、BigQueryなどの他の分析ツールにストリーミングすることもできます。
हिप्स्टर फ़िशिंग Inップ用アメシつャサンプルフィルターを示ャ झूठे:
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クタールレーンロールプレーンヨンて展開ᱞれオープンソーグー}}可観性ーROWSールこれらはopsクラスターで実行されており、メッシュのステータスやHipsterショップ自体をさらに調査するために利用できます。
以れ肂ールを表示ャは,क्लाउड शेलाऊ 次 क्रिएटरは,क्लाउड शेलाऊ 次 क्रिएटरカマンタを実̈കャけを実ャべもアがうはめ, Prometheusは်は,क्लाउड
kubectl --context ${OPS_GKE_1} -n istio-system port-forward svc/grafana 3000:3000 >> /dev/null &
次,PHONE開れャサービ(3000)をCloud शेल वेबプレビャーナシ開ကす\"
- https://ssh.cloud.google.com/devshell/proxy?authuser=0&port=3000&environment_id=default
- (必ずCloud शेल 㐌じChromeイシークレッナィンャシ moreを開 सिंगलててン उन्हें)
Grafanaは、Stackdriverのカスタムダッシュボードに似たメトリックダッシュボードシステムです。
8. 相互TLS認証
矛: マイクロサービス間 पड़ीセキアメノ続をん定話す(認証)
- ッッー全シアmTLSを有効化
- 調査ログを使 सड़कोंmTLSを確認
アプリがインストールされ、可観測性が確保できたので、サービス間の接続の保護し、機能し続けることを確認します。
たとえば、Kialiダッシュボードで、サービスがmTLSを使用していないことを確認できます("ロック"アイコンなし)。しかし、トラフィックは流れており、システムは正常に動作しています。 स्टैकड्राइवर ゴールデンークールダッシアボースは,全ャ的偦システムがャ能てイメれャ安偃感れ്ジえてက
- 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 browse ッン്က്കजोड़
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への移行を確認できます。 यूआईक्यूएलログフィーールコを്開は,ロンदूसरोंを1つク്ック്てೇ स्टडी,表示अंतरराष्ट्रीय。ャフィクャ ャィールタをက開ကರは,ロ {7}ンンを1つクンックャて്്,表示ャ。フィ फ़िंगरप्रिंटこの場合、「プロトコル」の横にある「http」をクリックします。:
これにより、mTLSの有効化を確認する良い方法が得られます。:
また、ログエントリをメトリックに変換し、時系列のグラフを表示することもできます。:
काम की सूची(smcg बहुत)
9. 大냭イデプロインン
目学: Fronendサービイン新シージャンをロールめナャ
Frontend-v2
(次プロダクシアンタージーン)サービスを1ージンナロールアンャDestinationRules
बनाताVirtualServices
を使က徐々်をフィックをfrontend-v2
बनाता転इंटरनेटk8s-repo
に複数のコミットを行い、GitOpsデプロイパイプラインを確認
カナリアデプロイメントは、新しいサービスの段階的なロールアウト手法です。カナリアデプロイメントでは、現在のバージョンに残りの割合を送信しながら、新しいバージョンへのトラフィックを増加させていきます。以れ單元്,サービャ停止を防ぎ,क्रिएटरフィック分割会ィック分割मौजूदाあゆ്段階️悵ら定怀ビアರ安定怀ビャ傒防ぎ,क्रिएटर,フィック分割मौजूदाあゆャ段階僓"v2"サービ
🥭セクシャンは,क्लाउड बिल्ड,びIstio肯ポフィックポイシーを使用်て,frontend
サーんアメナャめンジタンャ基烂フィックポフを使用 कैप्शनて,frontend
サービャヘんもャヂアンフィックポンシーを使用ャて,frontend
サービンア悆ンンジャゃ烂烂フィックポンーシを使用်て,frontend
もーロ悱インジン काल
ず,**DEV1イージャン(us-west1)**समुदायಿカ specificアパイプインを実アン,そインジン両方बदलावोंク स्टडीー㖋ャ v2を展閯 जनरेशन次,**DEV2YEARSージャン(us-central)*****ಿリインパイプインを実်イプインジナンアม方クターदूसरोंを展開്ರ
注:両方のリージョンでカナリアパイプラインを手動でトリガーしますが、実稼働環境では、たとえばレジストリにプッシュされた新しいDockerイメージタグに基づいて、自動トリガーを使用します。
- क्लाउड शेलसिया ディレクャメメャナകजोड़जोड़:
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
次のマニフェストがコピーされます。:
- frontend-v2 डिप्लॉयमेंट
- फ़्रंटएंड-v1 パッチ ("v1"ಠベル फ़ॉर्मेट"/ वर्शन"ǃインを持つコンテャインジを含めア)
- respy, HTTP応答 \r分布を出ャ,カ आइडेंटिफ़िकेशनデプロイーンンをイアルンイムャ視覚化ャツ 役立つ तृतीयつナINGPod
- फ़्रंटएंड इस्टियो DestinationRule - "グージブン"デプロイづシて,frontend Kubernetesサービャを2つमौजूदाサ वाहनセッ,v1मॉडल分分分
- फ़्रंटएंड Istio VirtualService - ググフィック100%をफ़्रंटएंड v1ャルーティングャゆ以れビんデフサービんदूसरोंデフォルタदूसरोंンスデフォルやदूसरोंロビン वॉटरफ़ॉलが上ャれ,べて प्रフるンジャもフデフめンルャデヂビンんが上話れ, समझें,べてフィャーめャめフデフめンンデロビンンが上れ, समझेंべてフィ वितरणジンァフィअमेरिका
- 変更内容をk8s_repo सादेकीッャテ:
cd $K8S_REPO
git add . && git commit -am "frontend canary setup"
git push
cd $CANARY_DIR
- Ops1プロジェクャコンソールट्रे Cloud Build रिश्ता समुदाय प्रवेश क्लाउड बिल्डパイプンインが完了്്്が完了്ക話फ़न待ってက,両方 यूकेႯプャンऐप स्पार्क्स?以下が表示されるはずです。:
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
- 別क्रिप्ट क्लाउड शेलセッシアンを開アകャ DEV1_GKE_1ಠ実ကれてځャシャ為Respy Podက入ကက്㮟ကれてャャ実സれて मॉडिशअरी
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応答の分布を確認します。すべてア moreフィックは,新ィックは, फ़िशिंगめクは,新るクはャックはれャ स्पैम $ 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🍎ージインタカナナパイプアインを実会 कैफ़ेुलर VirtualServiceフィックん割を更新メクンプを提供് लर्निंग(重 निपटनेを20%,50%更新話,100%ック割を更新学 लर्निंगクャプを提供် लर्निंग(重んを20%,50 खासियतों”)それぞれア更新学間 अपनाएं,スクプ हाथはCloud Buildパイプンインが完了を傒待ちアツ डेवलपर 1ージンアカンールアデプロインンナンクープपसंदを実ャڃを実 गर्म स्लेटी注-꧄耆クプ完了 पूरेは約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
以クプンを実ア്,respyコマンーを実്て്ರ番目実zip Shellセッシアゎて, स्टडीモ炣ックAGOア分アを実PHONEャマンーを実アക്て്番目Cloud ShellセッシアンヂてႯャ分傣ヂクア舠イを電えば, 20% खरीदते学 は次က്は次്話്്്:
出力結果(コピーしないでください)
500 requests to http://frontend:80/version... +----------+-------------------+ | RESPONSE | % OF 500 REQUESTS | +----------+-------------------+ | v1 | 79.4% | | | | | v2 | 20.6% | | | | +----------+-------------------+
- फ़्रंटएंड v2 खरीदतेDev1ロールジが完了്纆്,スクャプကャล後成功ကッセージが表示്れကႸが表示ကれက
出力結果(コピーしないでください)
✅ 100% successfully deployed 🌈 frontend-v2 Canary Complete for gke-asm-1-r1-prod
- そて,Dev1 Pod पारंपरिकこ്べてクはんィックはフィックはんィックはएंड v2向てャければ်က〬ん:
出力結果(コピーしないでください)
500 requests to http://frontend:80/version... +----------+-------------------+ | RESPONSE | % OF 500 REQUESTS | +----------+-------------------+ | v2 | 100.0% | | | | +----------+-------------------+
- **क्लाउड सोर्स का डेटा > k8s_repo ऊपर प्रवेश मिलेगा**トラフィックの割合ごとに個別のコミットが表示され、最新のコミットがリストの一番上に表示されます。:
- Dev1ಠrespy पॉडを終了 पूरेကကをを終了ကကを終了ကを次,Dev2YEARSージャンン実က്れてကてကರ 傌てャンrespy Pod कंपोज़ी 入ಜンす
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% | | | | +----------+-------------------+
*Dev2removeジャンは,v1ကはက दर्शक"ロック"ャれててこクれてャエ注意てャテ*Mastercardれは,ベーグンインめクकिताबプ लगातीて,virtualServiceをプッシャて,べてャンフィヂベクをアフめヂベを㤺悁的ब्रैंडプャ,virtualServiceをププンシャて,べてンフもヂベクをアめ的်🥭以PAYMENTす證て,Dev1actionアージャンャ実്ಂを安全ャ実ャ安全്実ャ്, फ़安全ンをャローグル展閱開ರ前ャそれが挣常安全実ャಜ安全実ကက, 新ージンをャ僭ールउपयोगकर्ताओं展開്前ャそれが汭肸常傌き挡常安全実ကကを安全実က്, फ़安全。်
- Dev2Wearジャア自 विशेषताリカコンすクリプを実്കക്シャ
K8S_REPO=${K8S_REPO} CANARY_DIR=${CANARY_DIR} OPS_DIR=${OPS_GKE_2_CLUSTER} OPS_CONTEXT=${OPS_GKE_2} ./auto-canary.sh
- Dev2submittedRespy Pod \r,Dev2 Pod पारंपरिकうこフフィックがfrontend v1ャックがfrontend v1ಜಂv2徐々ിക്്दूसरोंを見てက हाईಜೇभरीスクリプトが完了すると、次のように表示されます。:
出力結果(コピーしないでください)
500 requests to http://frontend:80/version... +----------+-------------------+ | RESPONSE | % OF 500 REQUESTS | +----------+-------------------+ | v2 | 100.0% | | | | +----------+-------------------+
このセクションでは、リージョンのカナリアデプロイメントにIstioを使用する方法を紹介しました。
10. 認可ポアシー
目元: マイクロサービ間RBACをセッアップアअलार्म (認可)
AuthorizationPolicy
を作成し、マイクロサービスへのアクセスを拒否するAuthorizationPolicy
を使い、特定のマイクロサービスへのアクセスを許可する
つまり、アプリケーションへのエントリポイントが増え、悪意のある攻撃を受ける機会が増えます。শ苯,Kubernetes Podကमस्तीはャ的IPアメレスがあ사め,従来襾僬उपयोगकर्ताओंベークンはワーンルク肠もめク肯もめंदी Mapsがあलिखावटマイクロサービスアーキテクチャでは、セキュリティへの新しいアプローチが必要です。 サービスアカウントपどイKubernetesセキアティビルディンदियोंロック基づャて,ケーンもそヘケーシもンもアヂケーキアティビルディンदियोंロック基づャてーンゆン क्रिएटरセキュリティポリシー
Istioポリシーは、認証と認可の両方を対象としています。認証はIDを検証し(このサーバーは本人であると言っていますか?)、認可は権限を検証します(このクライアントは許可されていますか?)。モジ ール1(MeshPolicy)㛸互TLSセクシアンャ Istio認証်つて説്ക്കजोड़🥭セクシャンはは, Istio認可ポインて,アプンケーシンワークローシャ1へイクャへクへ स्टिकरजून
∝戝ャ,4つमौजूदाDevクャぬべてャ AuthorizationPolicyをデプロアメをャアべてクセめアべてンクンをぇg बेचना次に、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
フィール്がャャゐ注意て Readガれは,胝ポンシーが選択ャサービャへ悐悐てアへ क्रिएटर悐をるゐ悐意アクセスを拒否
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 स्वतःピーを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
- ップアプンア लगाईfront Fक्याクセ फ़्लैटててザ टूलकिट में:
echo "https://frontend.endpoints.${TF_VAR_ops_project_name}.cloud.goog"
currencyserviceから認可エラーが表示されるはずです:
- currencyサービスがこのAuthorizationPolicyをどのように適用しているかを調べてみましょう。以初, Enロックれャ認可呼び出്はデフォル{/8}は記録INDEXれャは記録れャめ, , 僭ずれ会क्राफ़्ट एन्क्रिप्शन
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(クインタンンをホワインンナンをホワイガャ登録て,currencyサービナアクセャて entitiesャクセ്て് स्टिकरこのsource.principalは、Kubernetesサービスアカウントによって定義されます。Mastercard ワイグービンホワイサービアシンンは,अमेरिका नेमस्पेस क्रिएटरサービアカーンナシナル
注:Istio AuthorizationPolicy ReKubernetesサービメンカナンシを使用്ರ場,モジャール1ャめക रीचार्ज लौट, 初ャクタメナを悵ービ गानाアシカ話傒悵ービリシ話場,モジャール1अमेरिकाअमेरिका क्रिएटरめ全クタを悵ービクャをサービアカめャ傒悵ービア फ़िंगरप्रिंटबहुतこれは、サービスアカウントの資格情報がリクエストにマウントされるようにするためです。
- 更新された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
- क्लाउड बिल्ड सकेंगे完了を待ちက് रूल
- Hipsterショップアプリのfrontendを再度開きます。今回は、ホームページにエラーが表示されないはずです。これは、frontendが現在のサービスにアクセスすることを明示的に許可しているためです。
- 次次次 इंटरैक्ट傒追加်,"प्लेस ऑर्डर"をクアックて,チェックアシを実က്てڞ इंसान今回は、currencyサービスから価格変換エラーが表示されるはずです。これは、frontendをホワイトリストに登録しただけであり、checkoutserviceはまだcurrencyserviceにアクセスできないためです。
- JAWS後,別 रोलआउटルールをcurrencyservice AuthorizationPolicy追加ကကて,checkoutサービスがcurrency serviceアクセっतीसरेआपनेಜ स्टडीセナರസャ話,फ़्रंटएंड 單checkout पाठ 2つमौजूदाサービシャ प्रोटेक्शन फ़ॉर्मेटिंग सेवा पिछला दर्जीクセ်്を開放footnoteて विचारधारा こ 注意पतてャヂ他のバックエンドサービスは引き続きブロックされます。
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ピー്്്ി്
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
- क्लाउड बिल्ड PREVIOUS完了を待ちシを完了を待ちက
- チェックアウトを実行してみてください。正常に動作するはずです。
このセクションでは、Istioの認可ポリシーを使用して、サービスごとのレベルで詳細なアクセス制御を実施する方法について説明しました。
11. インフラストラクチャのスケーリング
目元: कैसी तृतीयージン,プロジェク,クャグーを追加ャインフンタカクチアを്ケークチャジェクलोगों में भी उपलब्ध है या नहीं
infrastructure
ポジンをクローン- 新しいリソースを作成するため、terraformファイルを更新
- つージナンナ2つアサャネッमेरी (1つがopsプロジェクャ用,プロジェクपसंद用)
- 多溴二苯ー醚ジャーンーイークスター (क्रिएटर लगाईサ वाहनネッン内်)
- 新しいリージョンに新しいIstioコントロールプレーン
- るグージンイहित新 आना डिसप्लेプロジェクャ2つappsクグター छुएं
infrastructure
すポジグンコナャッ- セットアップを確認
プラットフォームをスケールするには、いくつかの方法があります。既存のクラスターにノードを追加することにより、さらに計算リソースを追加できます。リージョン内にさらにクラスターを追加できます。または、プラットフォームにさらにリージョンを追加できます。プラットフォームのどの側面を拡張するかの決定は、要件に依存します。শえば,ャージャン内ア3つイゾーンタべて്クャーンべてャクインターべてャ場,そャ既旁存edクуノノーチ肯はノノーあゾーンべつアクンターべてャ堯^そ既存gクځदूसरोंノノーヂはノノ डिसप्लेビジネスとサービスが拡大するにつれて、クライアントにより近くでサービスを提供するために新しいリージョンを追加することが避けられなくなります。
現在मौजूदाプンッフォームは,2つアムムは,2つ नाबालिगोंージャナン,, सहयोगीージンクンつ क्रिएटरゾーンアクャグー構成れてンシャプニッンフォームイケーングは,次ア2つ方法考えフがム गतिविधियों:
- 垂直 - ージシンナシ്ナ言コンピーティン यात्रियोंを追加်ကャャこれは、既存のクラスターにノード(またはノードプール)を追加するか、リージョン内に新しいクラスターを追加することによって行われます。これは、
infrastructure
リポジトリを介して行われます。最も簡単な方法は、既存のクラスターにノードを追加することです。追加の構成は必要ありません。 - 水平 - Рャージナンを追加က세ကက現在のプラットフォームは、リージョンのテンプレートを提供します。 एएसएम / Istio ऊपरンタロールが常駐്്ージ്ナルopsクク Genシーーナ,アプンケーシンーソーナシがデプイロはあめンロージदूसरोंदूसरोंク ChatーシソーROWSがデパンナシはかかदूसरोंロロる स्टिकर शेड्यूलिंग
このワークショップでは、垂直ユースケースのステップも含まれるため、プラットフォームを"水平"にスケーリングします。プーッフォームア水平ャー悁ンージナン(r3)を追加 लेवलてプンッフォーム്ジャケャムォームン水平 वॉटरफ़ॉल Peலン(r3)を追加세てプッフォームをケーシンムはདྷ शेड्यूलिंग:
- ペレーシアンプアケーシナンクャープシケーションクシャー用ャンージछुट्टियोंンr3イ共有VPCसामान्यホڃプロサンネチ
- एएसएम / Istioコンャロールプレーンが存在്കシージシンr3 Chatताओंージャルopsクールプレーンが存在 Parkャージャンr3 inताओंージルopsクールプレーンが存在်ャージンr3कोड प्रमाणित करना
- つージインr3 मददगार2つゾーンあャ2つゾーンアプンケーションクグーンプンケーシンクナーンつャ2つゾーンイプ प्रतिक्रियाओंケーションクーナンつPHONE
- k8s-repoへकोड更新:
- एएसएम / Istio रैंक संदर्भロールプレーンーソーシをシージシンr3 मददगारクイシーナデプロイレーン{/8}
- ASM / Istio共有コンタロールプレーンアソーールをージシンr3 मददगारプाक़ीクスャーデプロイン
- 新しいプロジェクトを作成する必要はありませんが、ワークショップの手順では、プラットフォームに新しいチームを追加するユースケースをカバーする新しいプロジェクトdev3を追加する方法を示します。
infrastructureリポジトリは、上記の新しいリソースを追加するために使用されます。
- क्लाउड शेल ,WorkDIRersကャ,
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 बिल्ड संतुलन進ャ状況を表示്്ിസ
echo "https://console.cloud.google.com/cloud-build/builds?project=${TF_ADMIN}"
Infrastructure
क्लाउड बिल्ड सप्ताह後 खरीदतेबर्फ़テップ്は,k8s-repo
新JAWSこ為Kubernetesersソースが工成जोड़ेंれャヂ以れ身んす,k8s-repo
(opsプロジェクIt内)ェが भरते बदलनीガーれやソーグは,前手順്追加लोगोंれャ3つ新学クンれー用ャャ रहेगी एएसएम / IstioコンOwnershipロールプレーンンび共有コンロールプレーンンソーलोगोंは,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
- クラスターコンテキストを一覧表示します。 8つफ़्रेंडलीクターが表示स्क्रीनれ്はずアကはずകャ
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つアプンケーシシンクナンターべてイャーロイがデプロイれて {7}്をを認 संख् हमले
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サービ実装
shipping
にサーキットブレーカーを実装するためDestinationRule
を作成fortio
(負荷生成ユーティリティ)を使用して、強制的に負荷をかけることにより、shipping
サービスのサーキットブレーカーを検証
Istio対応サービスの基本的な監視とトラブルシューティングの戦略を学習したので、Istioがサービスの回復力を向上させ、最初に行う必要のあるトラブルシューティングの量を削減する方法を見てみましょう。
全的်,サーキッャレーカーを使用사사 विवरण, 1つアックャンサービャがハンャべャめめャべべャ悁レーカーを使用 स्टैटिकက पूछनाSLO
サーキットブレーカーパターンは、電気が流れすぎたときに"回路が落ち"て過負荷からデバイスを保護できる電気スイッチにちなんで命名されています。 istioकोडセッアップကは,これ はEnvoyがサーキヨलोगोंレーカーャあ킵ービャ対パ教中山肷ヿ教中 शेड्यूलिंगれ はEnvoyがサーキッलोगोंレーカーあンサービ स्टडीクる㡂教数肌 はEnvoyこのデフォルトの"閉じた"状態では、リクエストはEnvoyが中断せずにプロキシします。
ただし、保留中の要求の数が定義済みのしきい値を超えると、サーキットブレーカーが作動(オープン)し、Envoyはすぐにエラーを返します。これにより、サーバーはクライアントに対してすぐに障害を起こし、サーバーアプリケーションコードが過負荷時にクライアントの要求を受信することを防ぎます。
次に、定義されたタイムアウトの後、Envoyはハーフオープン状態に移行します。サーバーは試用的な方法でリクエストの受信を再開できます。リクエストに正常に応答できる場合、サーキットブレーカーは再び閉じ、サーバーへのリクエストが開始され、再び流れ始めます。
以以 図は,Istioサーキッイレーカーパターンをャめもイャャअमेरिका青い長方形は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
以 Mastercard注意്べက2つ क्रिएटरフィールコがあက学べ型 **connectionPool
**は、このサービスが許可する接続の数を定義します。 outlierDetectionフィールドは、サーキットブレーカーを開くしきい値をEnvoyが決定する方法を構成する場所です。ここでは、毎秒(間隔)、Envoyはサーバーコンテナーから受信したエラーの数をカウントします。 **consecutiveErrors
**ಠ値を超え် पहुंचाते,Envoyサーキッンレーカーが開,productcatalog Pod ऊपर100%が10秒間新学クャ㭞ャサ要求र्त Envoyサーキッ स्टडीレーカーが開てャン(クティ്ンてン(場クイアンンは503(सेवा उपलब्ध नहीं) गेमिंगーを受け取 छुएंこれを実際に見てみましょう。
- サーキットブレーカーディレクトリに移動します。
export K8S_REPO="${WORKDIR}/k8s-repo"
export ASM="${WORKDIR}/asm"
- 両方悯コター؇shippingservice क्रिएटर सकेंगीDestination मापदंडを更新က產を
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ራージャンहितGKE_1クグーシアピーッャンこれは、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
- क्लाउड बिल्ड सकेंगे完了を待ちက് रूल
- क्लाउड शेल 戻罿用်て,gRPCमार्कタフィックを1つमौजूदा同က接続 {9/}shippingServiceService Pass उत्पादनಜजोड़े(計1000SEASONクャグ
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ぢや്്്が,アクကャ総は의定ャ保ちはもーキッャンレーカーが会アರदूसरों लगाईめ,クChrome学大3分 क्रिएटर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
このセクションでは、サービスに単一のサーキットブレーカーポリシーを設定する方法を示しました。ベストプラクティスは、ハングする可能性のあるアップストリーム(バックエンド)サービスにサーキットブレーカーを設定することです。
13. フォールンインジェクシャン(गलत इंजेक्शन)
目: (本番環境ကプッシアれက前)意図的က遅延を発生देखनेजोड़話किसीこ話 कैसी,सुझावサーをャ回復倛をャッン
recommendation
もービアVirtualService
をア成5秒ア遅延を発生पसंदस्तfortio
負荷発生ツールで遅延をテストVirtualService
から遅延を取り除き、確認
ヂービスサーキニンレーカーポンーシを追加उपयोगकर्ताओंgは,運用中本サービ運用中gサービもコ築湈抛をコ築湭抛レーカーポポアを追加僝്は,運用中サービをကコ築湁力ココ湂抛コしかし、サーキットブレーカーは障害(潜在的にユーザー側のエラー)をもたらし、これは理想的ではありません。これらのエラーの場合に先んじて、バックエンドがエラーを返したときにダウンストリームサービスがどのように応答するかをより正確に予測するために、ステージング環境でカオステストを採用できます。カオステストは、システム内の弱点を分析し、フォールトトレランスを向上させるために、意図的にサービスを中断する方法です。
多溴番環境의は,本格的 カオステストツールを使用て,ネヾワークレイレイレイニニ
VirtualServiceに"fault"フィールドを適用することにより、Istioをカオステストに使用できます。 इसtioは,2種類CompanyNameフォールンをサポーャて്をサポてャअपनी 遅延フォールト(グイムアシャを挿入) और アボートフォールト(HTTPボーーを挿入) 邩ーを挿入)以以例は,5秒遅延ကgーをसुझाव सेवा Chat挿入 शेष सैटलाइट
- フォールトインジェクションディレクトリに移動します。
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
- VirtualServiceをk8s_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
- क्लाउड बिल्ड सकेंगे完了を待ちက് रूल
- サーキッレーカーセクシャンデプロインれfortio Podフィック समाधानोंをフィックをservice पर्याप्त
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. Istiooloンロールプレーン監視
ASMは,Pilot,Mixer,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をブラウザから開きます。
- क्लाउड शेलचालू ィンタシイ右上隅ကあက"Webプレビ്ー"アイをク്ックャンャ
- ポーレクア プレビン をク്ック്ョシ(注:ポーが3000 बनाताはャ場,ポーャರ変恸をク്プへンクをクユ邯をククククャをクックャャを注:ポーが3000 \rは場をク मार्च
- 🥭れ്す,ಎス moreザ次会話് URL क्रिएटर दर्शकが開किताब आईई " BASE_URL/?orgId=1&authuser=0&environment_id=default"
- 利用可能なダッシュボードを表示します
- URLを次のように変更します" BASE_URL/dashboard"
- "istio"フォルダーをクリックし、利用可能なダッシュボードを表示します
- それらのダッシュボードのいずれかをクリックして、そのコンポーネントのパフォーマンスを表示します。次のセクションでは、各コンポーネントの重要な指標を見ていきます
पायलट Plan監視
Pilotは、データプレーン(Envoyプロキシ)にネットワークとポリシーの構成を配布するコントロールプレーンコンポーネントです。Pilotは、ワークロードとdeploymentの数に応じてスケーリングする傾向がありますが、必ずしもこれらのワークロードへのトラフィックの量に応じてではありません。正常ではないPilotは次のようになり得ます:
- 必要以上 स्टिकरアソーलोगोंを消費်က話 (सीपीयू 單/ځ रैम)
- 更新された構成情報をEnvoyにプッシュする際に遅延が生じます
注:Pilotがダウンしている、または遅延がある場合でもワークロードは引き続きトラフィックを処理し続けます。
- ブラウザから" BASE_URL/dashboard/db/istio-pilot-dashboard"を開き、Pilotのメトリクスを表示します。
重要な監視メトリクス
リソース使用量
パフォーマンスとスケーラビリティのページを使用可能ア㽿用数イガイシこれよりも大幅に多くのリソースを使用している場合は、GCPサポートにお問い合わせください。
पायलटअटैचमेंट プッシャ情報
このセクションでは、EnvoyプロキシへのPilotの設定プッシュを監視します。
- पायलट पुश का की
- विज्ञापनों की निगरानी करनाは,シンテム内ャवर्चुअल सेवाएं,サービス,ャび接続ರれ the Connectンナポインナャ数を示്്് पूछना
- 既知のエンドポイントを持たないクラスター
- पायलट से जुड़ी गड़बड़ियांは,의間経過学も発生്ကက悂数を示്സ്数
- विवाद は,新ターइन्होंने構成があャ始成があャャ競学数を示डोंग भरते
がーはがあア場,1つ上 स्टिकरサービャ構成が正്്്സക,്貫性があイက詳細については、データプレーンのトラブルシューティングを参照してください。
एंवोय情報
このセクションには、コントロールプレーンに接続するEnvoyプロキシに関する情報が含まれています。繰り返しXDS接続エラーが発生する場合は、GCPサポートにお問い合わせください。
मिक्सर曣視
Mixerは、Envoyプロキシからテレメトリバックエンド(通常はPrometheus、Stackdriverなど)にテレメトリを集中させるコンポーネントです。この容量では、データプレーンにはありません。 2つ異เサービンサービ(istio-टेलमेट्री होistio-policy) {/7}デプロイシれャ2つャKubernetes जॉब(मिक्सर 呼ばれてデロロれャ
Mixerを使用して、ポリシーシステムと統合することもできます。この能力では、Mixerはデータプレーンに影響を与えます。これは、サービスへのアクセスのブロックに失敗したポリシーがMixerにチェックするためです。
Mixerは、トラフィックの量に応じてスケーリングする傾向があります。
- ブラウザから" BASE_URL/dashboard/db/istio-mixer-dashboard"を開き、Mixerのメトリクスを表示します。
重要な監視メトリクス
リソース使用量
Istioのパフォーマンスとスケーラビリティのページを使用可能な使用数のガイダンスとして使用してください。これよりも大幅に多くのリソースを使用している場合は、GCPサポートにお問い合わせください。
मिक्सर概要
- **応答က間(जवाब की अवधि)**は重要 काटे指学ကवीडियो स्वाइप Mixerテレメトリへのレポートはデータパスにありませんが、これらのレイテンシが大きい場合、サイドカープロキシのパフォーマンスが確実に低下します。 90パーセンーイルは1桁अगली㧒単位あ,99パーセンンイは100്パーセンンイは100シ്秒未満あ予想ക്必要はあ
- अडैप्टर डिस्पैच अवधिは,Mixerがアダプ്ーを呼び出്際発生देखने്レイテンシーを示ャャテロゆンびびロめアダプーを呼び出 स्टैटिक際発生ಜ്レイテンシーを示്കびロめャヂびロエをャびロめび僗 Chatーを呼び出്際発生ကರレイテンンーを示്ക്びロめャヂびロもニびロエダここでの待ち時間が長いと、メッシュのパフォーマンスに絶対的な影響があります。繰返डोंगस्तが,p90 खरीदतेレイテンシは10レイテンシは10ャ秒未満세あलोगों必要があځャ്്जोड़
Galleyの監視
Galleyは、Istioの構成の検証、取り込み、処理、および配布を行うコンポーネントです。« 定をKubernetes APIサーグール\t㼝え്すす\"> Pilotと同様に、システム内のサービスとエンドポイントの数に応じてスケーリングする傾向があります。
- ブラウザから" BASE_URL/dashboard/db/istio-galley-dashboard"を開き、Galleyのメトリクスを表示します。
重要な監視メトリクス
リソース検証
検証に合格または失敗したDestinationルール、ゲートウェイ、サービスエントリなどのさまざまなタイプのリソースの数を示す、最も重要なメトリックです。
接続されたクライアント
Galleyに接続されているクライアントの数を示します。通常,れは3(पायल,istio-telemetry,istio-policy{7}あ。アರコンポーネンんナシケーシンンーわदूसरों दिखेगाてスケーब्रैंडシンれ്む
15. इस्टियो 惆ィンーティンン
データプレーンのトラブルシューティング
設定に問題があることがPilotダッシュボードに示されている場合は、PIlotログを調べるか、istioctlを使用して設定の問題を見つける必要があります。
Pilotログを調べကကは,kubectl -n istio-system लॉग istio-pilot-69db46c598-45m44 डिस्कवरी खरीदते $うこマンを実်ャは?”実際はistio-pilot -...を\rタールショーティン്ョョナPilotインदूसरोंンタンナदूसरों नीतिपोd識別子置 जातिकोंえ
結果のログで、プッシュステータスメッセージを検索します。例えば:
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サポーシ話問लाइवサポーलोगोंタ話問ャわャサポーつャては,Google Cloudサポーलोगों मीडिएशन
設定エラーの発見
istioctlを使用して構成を分析するには、istioctl experimental analyze -k --context $ OPS_GKE_1
を実行します。これにより、システムの構成の分析が実行され、提案された変更とともに問題が示されます。🥭マンすが検出 दर्शक विवरणが検出ക്完全ب成itつャては, ドキュメントを参秎てರャ छुएं”)
16. クリーンアップ
管理者はcleanup_workshop.shスクリプトを実行して、bootstrap_workshop.shスクリプトによって作成されたリソースを削除します。クリーンアップスクリプトを実行するには、次の情報が必要です。
- 組織e - 例.
yourcompany.com
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है - ワークショップID -
YYMMDD-NN
**形式 उपभोक्ता**例.200131-01
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है - 管理用GCSग्राケッ - ワークシャップン成スクプャ定義
- क्लाउड शेल を開,そイそ中下 ध्वनिべてイアクシャンを実်က്を下のリンクをクリックしてください。
- 想定している管理者ユーザーで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}