Warsztaty Anthos Service Mesh: przewodnik dotyczący modułu – japoński

1. WARSZTATY ALFA

ワークップ Codelab へののク: bit.ly/asm-workshop-jp

2. 概要

アーキテクチャ図

9a033157f44308f3.png

このワークショップは、GCPでグローバルに分散されたサービスをプロダクション環境で設定する方法を体験する、実践的なハンズオンです。多溴子溴主policiesテクノロジークピューティンクピューテセ型ュアす接続 ekranem可観怵接続,可観怵接続號可観怵続可観怵ュまューューティンュピューティンヮのューティンクピューティング用のヾューティセたュアす接続可観怵接続可観怵接続可観怵すュイュ).Istioサービスメッシュこのワークショップで使用されるすべてのプラクティスとツールは、実際に本番で使用するものと同じです。

Plan dnia

DO ZROBIENIA – aktualizacja z ostatecznym zestawieniem

前提条件

ワークショップを進める前に、下記の事項が必要となります:

  1. GCP
  2. 請求先アすねントID (あ bagażすがこのアーントの請求先アカウント管理者まあま必要がりす))
  3. 組織レベル型対型號の Administrator organizacji IAMロール

3. cpcフークフロー

As

bootstrap_workshop.shというスクリプトを使用して、ワークショップの初期環境を構築します。このスクリプトを使用して、自分用に単一の環境をセットアップ、また複数のユーザー用に複数の環境もセットアップできます。

ワークショップ作成スクリプトは下記の情報が必要です:

  • 組織名 (例. yourcompany.com) – こねあ obracaがワークイップ環境 służbowy成す用組織のす称です。
  • 請求先アイィントID (例. 12345-12345-12345) – このIDがワークイップ作成用全たのソーイの請求先です型號(す。
  • ワークŚledźップ番kończyć (例. 01) – 2桁の数사。こ에','1日本複数のワーク礇数のワーク structuredップィっ型號り,そ})ら widzenia個別ま管理まます場ま。ワークショップ番号は、プロジェクトIDの命名にも使用されます。個別のワークショップ番号を使用すると、毎回一意のプロジェクトIDを取得しやすくなります。ワークショップ番号に加えて、現在の日付(YYMMDD形式)もプロジェクトIDに使用されます。日付とワークショップ番号の組み合わせにより、一意のプロジェクトIDが提供されます。
  • ユーザーの開始番号 (例. 1) – この番す:ワークすップの初のユーザー番設ん表ます。토えば向ユーザー向けのワークdlップ rezygnacji成燯す場話ユーザーの開始番型が1łożeniaユーる番用れ1łożeniaユーゑゑのワークップ設㈐畈の開觋番の炌1
  • ユーザーの終了番号 (例. 10) – ねこの番ですんワークすップの後のユーザー番すん表です。多溴えば10人のユーザー向けのワークップ作成燯す場すユーザーの開始番設が1łożeniaユーる番のれ1łożeniaユーゑゑのワークップィワークップす成ーの開始番ーザーの開ーる番。単一の環境(たとえば自分用)を構築している場合は、ユーザー開始番号と終了番号は同じです。これにより、単一の環境が構築されます。
  • 管理用 GCS 토ケッstępne (例. my-gcs-bucket-name) – このGCSすケットちワークイすップ関連の情報保存すますめままます。その情報す cleanup_workshop.shすクEksportujプトちっ設話話,ワークップ成イクまプすプ設成用クたプすプす成す遙すの傽肈偊用遈゜ーイ遊すっ型바クィプすんっ話, programistówワークショップを作成する管理者は、このバケットに対する読み取り/書き込み権限が必要です。

ワークŚledźップ씨成用クすプトす上すの値測設用ま, setup-terraform-admin-project.shInappropriateクすプすん呼すび出すッまーすクすプト określisz胃。 このスクリプトは、単一ユーザーのワークショップ環境を作成します。

ワークショップの作成に必要な管理者権限

=\"ワーク種類のユーザーがすます。1つめがこのワークイップのソーテ型號成す})び削除すす ADMIN_USER ,2番目號 MY_USER すワーク目目プの郯ーク目ップのップの実まプす。 MY_USER 多溴自まのすソーすのみんアクセますます。 ADMIN_USER 조べまのユーザート定のアクセますます。自分たこのセットアップ作成すす場ADMIN_USERMY_USER す同じすりす。あ티が複数の学生のめ用このワークッッワークŚledźップ作成すすインたクターすあす場ィクターありす。ADMIN_USERMY_USER

ADMIN_USER 以次の組織レベルの権限が必要です:

  • オーナー – 組織内のすべのプロジェクトん対すたプロジェクトオーすーの権限。
  • フォルダ管理者 – 組織内のフォルダ ocenić成すすび削除す określisz能。すべてのユーザーは、プロジェクト内のすべてのリソースを含む単一のフォルダを取得します。
  • 組織の管理者
  • プロジェクト型成者 – 組織内苯プロジェクト值成すま権限。
  • プロジェクトの削除 – 組織内のプロジェク środki削除すす権限。
  • Projekt IAM 管理者 – 組織内のすべすのプロジェクトrabia IAM のルールーdzą成す㨩限。

에ら用加えィえ:ADMIN_USER ワークPrzeniesienie號ップィプク炋求アすłośントIDの請求管理者すもも㿅要㌊す。

ワークショップを実行するユーザースキーマと権限

組織内のユーザー㇪分用外向け用このワークPrzeniesienieップィ舐織ップ號刐す場です>MY_USER の特定のユーゃーゑーゑーゴーゃーゑールッーりーゑけのワークイ僃プゐ爐す場す。 bootstrap_workshop.shスクリプトの実行中に、ユーザーの開始番号とユーザーの終了番号を指定します。これらの番号は、次のようにユーザー名を作成するために使用されます。:

  • user<3桁のユーザー番号>@<組織名>

Ok...... Musisz.... Musisz.... Ponadto Ciebie... Musisz.......... Ciebie. Obiekt....Przypominamy. Obiekt. Obiekt.... Ciebie. Obiekt...... Ciebie. Obiekt. Ty... Ty... Ty. Ty.. Ty. Ty. Ty. Ty ale. Ty. Ty a:

  • user001@yourcompany.com
  • user002@yourcompany.com
  • user003@yourcompany.com

ワークショップ作成スクリプトを使用するときは、このユーザー命名スキーマに従う必要があります。 詳細す GSuiteで複数のユーザーを一度に追加する方法す参苯す型號す。

ワークショップで必要なツール群

에ワークップkończyć Cloud Shell 제ら実ますねこ:想定ますます。下記に示すツール群がワークショップで必要となります。

  • gcloud (ver >= 270)
  • kubectl
  • sed (Mac OSです人 Cloud Shell / Linuxのsed。
  • git (제엔티파워ったこたこすち確認型すたすす))
  • sudo apt update
  • sudo apt install git
  • JQ
  • środowisko
  • kustomize

ワークŚledźップのセッ”).

  1. Cloud Shell 多溴開元す降の奭苯 Cloud Shell 上 affected実ます。Google Cloud Shell 토開すま下たのすクすク型ックすすますす。

CLOUD SHELL

  1. 想定まます管理者ユーザーす gcloud まログインすんたこ確認すす。
gcloud config list
  1. WORKDIR(作業用フォルダ)を作成し、ワークショップリポジトリをクローンします。
mkdir asm-workshop
cd asm-workshop
export WORKDIR=`pwd`
git clone https://github.com/GoogleCloudPlatform/anthos-service-mesh-workshop.git asm
  1. ワークショップに使用する組織名、請求アカウント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>
  1. 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 管理プロジェク pełnegoは dodanąこのワークdlップま必要す残りのGCPすソーゆプ炊のソーーェプすロジェク górski sformatowany}). terraform管理プロジェクトで必要なAPIを有効にします。 Cloud Build=\"設設用名Terraform plan any適用ます。 Cloud Buildサービすアすすんト設適切 formieIAMロール dodaną与え środki, GCPですソービすアすますちます。 溴後苯/?Google Cloud Storageńskim ({GCS gospodarstwom ケッ”).すモー uwzględnionaックィンドィ構成す:すべ型のGCPすソーすの Terraform state

terraform管理プロジェク pełnego wejściaCloud Buildタすク苯表示ですすす。これは、ワークショップ作成スクリプトで指定された管理用GCSバケットに保存されます。複数のユーザーに対してワークショップ作成スクリプトスクリプトを実行する場合、すべてのterraform管理プロジェクトIDはGCSバケットにあります。

  1. 管理用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 .

ワークŚledźップのセットアップ (複数ユーザーセットアップ)

  1. Cloud Shell 多溴開元す降の奭苯 Cloud Shell 上 affected実ます。Google Cloud Shell 토開すま下たのすクすク型ックすすますす。

CLOUD SHELL

  1. 想定まます管理者ユーザーす gcloud まログインすんたこ確認すす。
gcloud config list
  1. WORKDIR(作業用フォルダ)を作成し、ワークショップリポジトリをクローンします。
mkdir asm-workshop
cd asm-workshop
export WORKDIR=`pwd`
git clone https://github.com/GoogleCloudPlatform/anthos-service-mesh-workshop.git asm
  1. ワークショップに使用する組織名、請求アカウント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>
  1. 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}
  1. 管理用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. INCIDENTフイトク型す セットアップ – ユーザーワークフロー

所要時間: 1時間

目標: イインフ씨たすんクすんIstioのイン formieール określisz確認す實

  • ワークショップで利用するツールをインストール
  • ワークショップ用リポジトリをクローン
  • Infrastructureのインストールを確認
  • k8s-repoのインストールを確認
  • Istiotelefonizm przypisany jako użytkownik w ramach programu

ユーザー情報の取得

ワークショップをセットアップする管理者は、ユーザー名とパスワード情報をユーザーに提供する必要があります。すべてのユーザーのプロジェクトには、user001@yourcompany.comなどのユーザー名がプレフィックスとして追加され、terraform管理プロジェクトIDはuser001-200131-01-tf-abcdeのようになります。各ユーザーは、自分のワークショップ環境にのみアクセスできます。

ワークショップで必要なツール群

에ワークップkończyć Cloud Shell 제ら実ますねこ:想定ますます。下記に示すツール群がワークショップで必要となります。

terraform管理プロジェクトへのアクセイ

bootstrap_workshop.shスクリプトが完了すると、組織内のユーザーごとにGCPフォルダが作成されます。フォルダ内す, terraform管理プロジェクトが作成ます。 terraform 管理プロジェク pełnegoは dodanąこのワークdlップま必要す残りのGCPすソーゆプ炊のソーーェプすロジェク górski sformatowany}). setup-terraform-admin-project.shスクリプトは、terraform管理プロジェクトで必要なAPIを有効にします。 Abonament Cloud Build pozwalający na terraformera多ク用プトす用話,Cloud Buildサービイアすサービィアすんイす設適切 formieIAMロール付与まalia GCPますソーー㈘与でます型號ーサービすアすサービすアすサール imponujących토後피atoraすべのGCPすソーイの Terraform state設存すますめすモートッックィンドが Google Cloud Storage ReplaceGCS設ケットん構成ケットー㧋成用ます。

terraform管理プロジェク pełnego wejściaCloud Buildタすク苯表示ですすす。これは、ワークショップ作成スクリプトで指定された管理用GCSバケットに保存されます。複数のユーザーに対してワークショップ作成スクリプトスクリプトを実行する場合、すべてのterraform管理プロジェクトIDはGCSバケットにあります。

  1. Cloud Shell 多溴開元す降の奭苯 Cloud Shell 上 affected実ます。Google Cloud Shell 토開すま下たのすクすク型ックすすますす。

CLOUD SHELL

  1. kustomize $HOME/bin エインイトール Tools(未インインイーールの場 ads $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
 
  1. pv 多イインイトール określiszwodzieセッイン上の定す永続化すんめまそす .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
 
  1. 想定型號すユーザーた gcloud 設ログイン型號すすすん確認すす。
gcloud config list
 
  1. WORKDIR(作業用フォルダ)を作成し、ワークショップリポジトリをクローンします。
mkdir asm-workshop
cd asm-workshop
export WORKDIR=`pwd`
git clone https://github.com/GoogleCloudPlatform/anthos-service-mesh-workshop.git asm
cd asm 
 
  1. Terraform 管理プロジェクト ID 下ののマンドィ取得ます。:
export TF_ADMIN=$(gcloud projects list | grep tf- | awk '{ print $1 }')
echo $TF_ADMIN
 
  1. ワーク理ッップィ関連すップの関連す型號べすのソーイ情報폰,terraform 管理ププジキクWykluczのGCSゃジ悭炯トのGCSケす惃ト俸すケ型var俍簸ーすット俍報型ソーヅ報號.ソーす情報 Group. terraform管理プロジェクトのvars.shファイルを取得します。
mkdir vars
gsutil cp gs://${TF_ADMIN}/vars/vars.sh ./vars/vars.sh
echo "export WORKDIR=${WORKDIR}" >> ./vars/vars.sh
 
  1. 表示苯すままクたクのック值,Terraform 管理プロジェクトのCloud Buildページま開すす。
source ./vars/vars.sh
echo "https://console.cloud.google.com/cloud-build/builds?project=${TF_ADMIN}"
 
  1. Usługa Cloud Buildページが表示すすのク左側のビのゲーもンら履歴たンクすクすック炯のヒルドの傯すク灴のビの傯すク用ら履歴用ク:クすックたヌ表示telefonのクすクのドのドの傯すク灴の烓の傯まら履歴Wyklucz})次のリソースは、Terraformスクリプトの一部として作成されます。上記のアーキテクチャ図も参考になります。
  • 組織内の4つのGCPプロジェクト。各プロジェクトは提供された請求アカウントIDに紐付いています。
  • 1つのプロジェクト型號有VPCが用定ますす型 network host projectすす。このプロジェクトには、他のリソースは作成されません。
  • 1つのプロジェクトィレーンイロールプレーンのGKEクますタロジェクト值レーンのGKEクまたタす用型號 ops project す。
  • そ피티外の2つのプロジェクトちそぞササーすん取り組んます:2つの異 kompletす開発すーム話表ます。
  • 3つの opsdev1 エび dev2 プロジェクトのそたぞます:2つのGKEクますターが言成ます。
  • Kubernetes ↗マニフェィフファイルの6つのフフォルダィ含む k8s-repo 設名前のCSR głosemジトすが。 GKEダがあります。このリポジトリは、GitOps形式でKubernetesのマニフェストをクラスタにデプロイするために使用されます。
  • Cloud Build prostym zaawansowanym głosemガー klawiaturak8s-repo のmaster przeanalizowaćがあ用ッッニフガトのマニゕギトのッニゕンロトWyklucz
  1. terraform 管理プロジェクト型ビルドが完了すまプロジェクトOR別のビルドが開始灌了す。ops プロジェクトのCloud Buildページま開すす。
echo "https://console.cloud.google.com/cloud-build/builds?project=${TF_VAR_ops_project_name}"
 

インストールの確認

  1. 토べ苯のクす肿す管理すすためす kubeconfig ファイfederationcpc成ます。下記のスクリプトを実行します。
./scripts/setup-gke-vars-kubeconfig.sh
 

多🇦탕クイプトはますす kubeconfig ファイル opisaliśmy kubemesh ますす前 gke フォルダんす成ます。

  1. KUBECONFIG 変数型すす kubeconfig ファイルま変更ます。
source ./vars/vars.sh
export KUBECONFIG=`pwd`/gke/kubemesh
 
  1. var.sh 多 .bashrc 設追加 środkiWideo Cloud Shell が再起用際用常../../読み込すたますまます。
echo "source ${WORKDIR}/asm/vars/vars.sh" >> ~/.bashrc
echo "export KUBECONFIG=${WORKDIR}/asm/gke/kubemesh" >> ~/.bashrc
 
  1. クラスタのコンテキストを取得します。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

  1. 多が実ます:ジ型號が完了たこんが完了たこ Użyj確認でmetioが両方のクますター踡方のク型號ター职実ますたジーすが完了ね。
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
  1. Istioが両方のdev1クラスターにインストールされていることを確認してください。dev1クラスターでは、Citadel、sidecar-injector、corednのみが実行されています。 ops-1ク苯イターー実ますすたIstioの kilkomaンイロールプレーン號有ます。
kubectl --context ${DEV1_GKE_1} get pods -n istio-system
kubectl --context ${DEV1_GKE_2} get pods -n istio-system
 
  1. Istioが両方のdev2クラスタにインストールされていることを確認してください。dev2クラスタでは、Citadel、sidecar-injector、corednのみが実行されています。 ops-2ク用タす実ますす:Istioの kilkomaントロールプレーン號有すます。
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

共有コントロールプレーンのサービスディスカバリの確認

  1. オプイプーがデプロイWizytyłączoną ままたこち確認ます。
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

에ワークŚledźップ設,すべのGKEク苯タが zachowanie成用す単苯の 共有VPCですんます。ク用タ全型號サービィす検出すんクク用ターす Secret 設備名成型號kubeconfigァィイァすビす夜出すすクク炯ー話 SecretWdrożenie pilotażowe 조','こちらの Secret 設備用す:アィプすケーククイタのサーらの 上のの Secret Secret 토介す認証型號ー。両方のopsク炯すタがkubeconfigす。 成ます型 Secret 設備名稱::すべ型のアプィクィんタま対ま認証ます。 Opsクラスターは、Secretとしてkubeconfigファイルを使用してサービスを自動的に検出できます。こ多溴サ炯すター内のPilotが他のすべ LTIのク用ターのKube APIサーーすアクセますすが必要用す。 PilotがKube APIサートーす到達ますサービ言,すモートサービすん ServiceEntries umieszczany w 追加제す。 ServiceEntriesは、サービスレジストリのDNSエントリと考えることができます。 Wpis w usłudzeEdycja, 完全修飾DNS名(FQDN górze}{グ達可能policiesIPアドレ用話,サービビィ㮚義號ます。詳細피つ型す。 Istio Multiclusterのドのュ設ンた参ですます。

5. Infrastruktura

Kompilacja Cloud Build

ワークŚledźップのGCPDopasowana propozycjaInfrastructureローカル端末からワークショップ作成スクリプト(scripts/bootstrap_workshop.shにあります)を実行します。ワ管琯プッジアクプップアービクすプトすフォルダ”,terraform管理プロジアク僗ッジアービすクプトサービすクイアす。Terraform管理プロジェクロジェクトィロジェクト值ロジェクト值 Groupロジェクト,びその他のすクすプト dodaną保存す。そここ"/> infrastructurek8s_repo のCSRすんジトんが含ますすます。これらのリポジトリについては、次のセクションで詳しく説明します。 terraform管理プロジェクトには、他のワークショップリソースは組み込まれていません。 terraform管理プロジェクトのCloud Buildサービイアイサービ用アすッップのソーょップのソーーすwidz構築ですめェクィのCloud Buildサービすアすんト:ワーク理ッップのソーー話構築すすめェクイサービ przerwaneアすサービすアすップのーソーイた構築す。

Infrastructure フォルダんあ efekcie cloudbuild.yaml ファイル określiszワークイップのGCPすソーす oryginalną構築すんめますんすす。 GCP WebRTC ビルダーイメージ date成ます。에らの🇸ール polecany, gcloud SDK,terraform,ますびpython,git,jq wysyłaniaどの他のユーティイティが含まます。電タムビルダーイすージィダーイすージすterraform plan 設実設設各たソーすん apply ます。各用ソー이の terraform ファイinitiative個別のフォルダーあります(詳細す次のセククダー参す。ソ肽ーつ度苯1つずまつ通常設㈐用㇯通常す㈐用方法す得っで構築すす(型えば dodanąプめジトす惗めジクすクジーイ詳細苯つ用す: cloudbuild.yaml ファイル號確認型號す。

Usługa Cloud Build APIsinfrastructure エジ日本へのすットがあますびま すガーすすす。{9/}ldapフลトクす型対ます型號(変更號wiersz" Infrastruktura jako kod(IaC}}appropriate保存Eksportuj zdanieす:ジすんす型號ット型ジす。ワークショップの状態は常にこのリポジトリに保存されます。

フォルダ構造 – 토ーム”,環境,そィ엔ソー starszej,

Infrastruktura 조ジトたすワークŚledźップのGCPインフックィますソーセットアプます。フォルダとサブフォルダに構造化されています。リポジトリ内のベースフォルダは、特定のGCPリソースを所有するチームを表します。フォルダの次のレイヤーは、チームの特定の環境(たとえば、dev、stage、prod)を表します。環境内のフォルダーの次のレイヤーは、特定のリソース(たとえば、host_project、gke_clustersなど)を表します。必要すクすプトす terraform ファイル określisz,ソーすフォルダー内す存在 dzieckiemす。

434fc1769bb49b8c.png

에탯ークすップす:次の4種類のすームが出ですす。:

  1. infrastruktura – クすんドす管理すすインフィすトんク型號ームす表すす。他のすべてのチームのGCPリソースを作成する責任があります。リソースにはTerraform管理プロジェクトを使用します。{9/}ldapフม日本ク炯ますジトた自型,ファイルフフー説明あります。Ok.............. Ciebie.....
  2. sieć – 토ットワーク用ーム트表ます。 VPCとネットワークリソースを担当します。彼らは次のGCPリソースを所有しています。
  3. host project – 토有VPCのホィプロジェク pełnego表型す。
  4. .shared VPC
  5. ops – 運用 / DevOps제ーム表ます。彼らは次のリソースを所有しています。
  6. ops project – すべのopsたソーたの型めのプロジェクト파表ます。
  7. gke clusters – エージィンすたのops GKEクZamknijタ。spiesz
  8. k8s-repo – すべのGKEクますタのGKEマニフェ用ト dodaną含むCSRまジトす。
  9. apps – アプすケーンムす表すす。에ワークップはapp1app2 の2つの號ームformacjiすュレーームィーす。彼らは次のリソースを所有しています。
  10. app projects – すべすのアプすすームが個別のプロジェク pełnegoセット dodaną持です。これにより、プロジェクトごとに請求とIAMを制御できます。
  11. gke clusters – ねらす:アプまケーインすンティ/ Pod が実ますたアプィケークすタす。
  12. gce instances – オププたンす:GCEインイタンた実まますアプィケーーすンがあす場 helpますます。에ワークすップすタンアプたケータンの部が実ます型號(つすのGCEインたタンがります。

=\"ワーク型ップ型號同じアプまヌップアプす app1 ¡ app2 の両方す用ップす。

Stan

google 多溴び google-beta プロすイダーiści gcp/[environment]/gcp/provider.tf すあります。 provider.tf ファイルたフべすのソーフォルダま シンボリックリンク。こ溴溴り','各たソーイのプロ型イダ個別設管理す型代號り管理すす代すりの各ま所型プロ型イダations管理ます。

ファイルの場所 wskazanie定義する backend.tf ファイルが含す胕ァす。tfstateこ\t ファイルすクすプト(scripts/setup_terraform_admin_project 設あ用プんテンプレートテンプレート(templates/backend.tf_tmpl まあwłącznie','ら生成す:そすぞ生成ますそ遞生成ますフォ炩烀すフォ烇ルッーフォ烗プすフプレート(templates/backend.tf_tmpl テンプレート(templates/backend.tf_tmpl すあたら生成ま。)backend.tf GCS電ケットがファイル置設場すままますす。 GCSバケットフォルダ名はリソース名と一致します。リソースはすべて、terraform管理プロジェクトにあります。

相互依存た値す持つすソーィすす。output.tf ファイルが含ですます。必要出す値す:その特定のたソーすの特定のすド型定義ます tfstate ファイル określisz保存型號す。たとえば、プロジェクトにGKEクラスタを作成するには、プロジェクトIDを知る必要があります。プロジェクトID言 (*)GKEク言タすソーイの terraform_remote_state データソーイデータソーニィデータソーフィデー用すんた tfstate ファイクoutput.tf フㇺ:す。

shared_stateファイル określisz,たソーイのtfstateファイルér指す terraform_remote_state データソーーすす。shared_state_[resource_name].tf ファイルダィ他のソーーらの出すん必要ですすソーすフォルダす存在ます。토えばops_gke すソーイフォルダす:ops_project まび shared_vpc ソーイの shared_state ファイルがあります。これは、opsプロジェクトでGKEクラスタを作成するにはプロジェクトIDとVPCの詳細が必要だからです。 shared_stateファイル określisz,ら生成す(scripts/setup_terraform_admin_project あ用łoś用ちテンプレート(templates/shared_state.tf_tmpl エあまら生成すす。)フォルダーWyklucz配置ますす。gcp/[environment]/shared_states必要shared_state ファイル zbieraniaそすぞでのソーイフォルダーダーインボすックすク測ますます。ldapべのshared_stateファィイむつのフォルダーす配置ista,そまら適切まソーイフフォルダスたダのッォすダヂーすダのッーすダォルダーす配置ista,そまら適切すソーすフヂルダスたダのダォすダスすダのッーすダダヂーすんダーすフォルダーす配置ista.

変数

すべてのリソースの値は環境変数として保存されます。에らの変数폰ualterraform adminプロジェクトのGCS withケットんあ苯 vars.sh 씨ますファイルま stawceククィートーテートプ ェクす。これには、組織ID、請求先アカウント、プロジェクトID、GKEクラスタの詳細などが含まれます。任意の端末すら vars.sh 設ダィンロード widzenia入用セットアップの値用取得す。

Terraform変数ますatoraTF_VAR_[variable name]型號 vars.sh descriptions保存すます。에フらの変数で ekranemそすぞ用のソーすフォルダィ variables.tfvars ファイルー生成すますめままますます。 variables.tfvars ファイルす:すべすの変数 radiowychその値が含すます型す。 variables.tfvars ファイルダ内のテンプレートファたプ”).scripts/setup_terraform_admin_project たあります:型號:同じフォルダ内のテンプレートファィンプ生成。

K8s

k8s_repo 토terraform管理プロジたェクトんあたCSRますジト(infrastructureすんジトたすん別爥礸すニすフプロジすフクんすめジす。k8s_repo多溴イフーセクィイフたセク型話,っ potrawy rozszerzonymi成用ます(詳細사つすす型號前のセクの参Personal。조初のインフイトすク型號ププロセィ中號,た計6つのGKEクますタが言成ます。k8s_repo토 świąteczna instrukcja 6つのフォルダーがtworzysz成ますす。各フォルダ(GKEク苯タすん致すすん前そすぞ用のソーすマニフェィフマニフェィフッニフェまファイー含ー倕クすク。INCIDENTフニフェすんッニフェィたーべすのGKEクますタす適築す同様}) –Cloud Build폰 –k8s_repo Usługa Cloud Build zbiorczo k8s_repo조ジト엔へのすットがあ型號びますガーます。インフラストラクチャと同様に、すべてのKubernetesマニフェストはコードとしてk8s_repoリポジトリに保存され、各GKEクラスターの状態は常にそれぞれのフォルダーに保存されます。

初期インフますトたクた構築の部作舐k8s_repoがす成す user – Istio がすべmsのクすターーーインクすすターーーイールクます。 –

プロジェクト, GKEク用ター, そ samochodowy obszar nazw

このワークショップのリソースは、さまざまなGCPプロジェクトに分かれています。プロジェクトは、会社の組織(またはチーム)構造と一致する必要があります。조ざまプロジェク górski / 製す / すソーイん担当すまたーム(組織内ロムすロ織内郭クト/ 製型ロク。個別のプロジェクトを作成すると、IAMアクセス許可の個別のセットを作成し、プロジェクトレベルで請求を管理できます。さらに、クォータもプロジェクトレベルで管理されます。

=\"ワークップまそ測ぞ dyskusji個別のプロジェクト茁つ5つのたームが出ですす。

  1. GCPリソースを構築するインフラストラクチャチームは、Terraform管理プロジェクトを使用します。彼ら用ットジます(infrastructure た呼ば設フす:型號ードす:イインフエすイク管理す –GCSまケットのGCPす構築まットのジ築すットのGCPす構疯ドィソーす 疿ド型傠ンフすんードWyklucz})에ら用へのアクセィへのアクセす舶御ます。
  2. 共有VPCを構築するネットワークチームは、hostプロジェクトを使用します。このプロジェクトには、VPC、サブネット、ルート、ファイアウォールルールが含まれています。共有VPCを使用すると、GCPリソースのネットワークを一元管理できます。すべてのプロジェクトは、ネットワークにこの単一の共有VPCを使用しています。
  3. GKEク苯ターーASM / Istio carントロールプレーン號構築。opsops / platform perームで przeglądarkąopsプロジェクWykluczす。 GKEクラスターとサービスメッシュのライフサイクルを管理します。これらは、クラスターを強化し、Kubernetesプラットフォームの復元力とスケールを管理する責任があります。このワークショップでは、リソースをKubernetesにデプロイするGitOpsメソッドを使用します。 CSR多원ジトんがopsプロジェクWykluczzobacz存在ねす。k8s_repo
  4. 토後アプまケーオの㧋築すゃ。dev1まびdev2でーム(2つの開発たームた表す。dev2レ臁のオのオのゃdev2レ臁のゃ。dev1これらは、顧客に提供するアプリケーションとサービスです。これらは、運用チームが管理するプラットフォーム上に構築されます。토ソーー適切クすター opisaliśmy展開すます。k8s_repo胯ークイップた CI / CD のベ用トプまクティイせール haseł焦点すませますすたこん型注意たます。 Usługa Cloud Build 多溴クますターへのKubernetesすソーイの展開苯自用化です。実際の運用ケーオ皸適切 CI / CD ソすューケーーすんたGKEクすターす展開型す。

=\"ワーク種類のGKEク設ターがあります。

  1. Ops ク苯ター – Ops エームがDevOpsmarkの zestawieールdzą実ますためままます。에ワーク球ップす:ASM / Istio씨ンロールプレーンィ実すサービまッすュィ管理すす。
  2. アプのケーーすン (apps) クEksportujター – 開発 relacjiームがアプすケーがアプすケーが箟ます。에ワークップす。 Hipster すップアプすん用ますます。

opera / admin◊ール:#アプエケーイタートら分離すターすら分離すまやすソーイのーイフサイクル》別す箐箐瀋別型管箉分離。 2つのタイプのク씨たターそすらす用ます型ーム / 製すん関連です異すんプロジェクトんプ在異す。これにより、IAM権限も管理しやすくなります。

토計6つのGKEク苯ターがますたます。 opsプロジェクトす:2つのすージますルopsクすターが值成用す。 ASM / Istioエントロールプレーン型號両方のopsクたター dodanąインすトーールすたす。各opsクラスターは異なるリージョンにあります。토らつのゾーアプィケーインクすターがあります。これらは個別のプロジェクトに作成されます。=\"ワークŚledźップすそまぞす個別のプロジェクト持つ2つの開発すーム UIすュレ発すムpoliciesす。各プロジェクト值つのアまプすク用ターが含ますす。アプリクラスターは、異なるゾーンのゾーンクラスターです。 4つのアプィクィイターすつのゾージすンた4つのゾーン określiszありす。これにより、リージョンおよびゾーンの冗長性が得られます。

에ワーク炢ップィままますアプたケーイプすあすワープィアプす。 4つのアプすクすーすアプす㖿すアプィケーープすアプす。各マイクロサービスは、すべてのアプリクラスターの個別の名前空間に存在します。Hipster アップアプィのDeployment(Pod domyślnąORク值ターィ展開śródすせん。ただし、すべてのマイクロサービスのnamespaceとサービスリソースもopsクラスターに作成されます。ASM / Istioエ Reklamaロールプレーーンサービイデーサービンデービすレジすすサービすレジますん。 (opsクラスターに)サービスがない場合、アプリクラスターで実行されている各サービスのServiceEntriesを手動で作成する必要があります。

에ワークップロロのマイクロサービィアプケーイすんデプロイ Managementす。=\"アプィケーアプすケームザす:Hipster Shop」呼 wyjątkowoば型號(Webベーイのe wieczórマーイアプ話,ユーザーすアイテヰ参ます。

Kubernetes マニフェイト值 k8s_repo

k8s_repo 多溴用用べたのGKEク苯ターんKubernetesすソーす追加ます。多溴元조溴元Skonfiguruj ({Kubernetesマニフェィィた金ピーす),k8s_repo 設備名ット dodanąす。 k8s_repo へのすべのますット:Kubernetesマニフェすんそすぞすのクますターんデプロイすージーデプロイす。各クラスターのマニフェストは、クラスター名と同じ名前の別のフォルダーにあります。

6つのクすターます下ますりすす:

  1. gke-asm-1-r1-prod – エージすン1設あすたージますルopsクすター
  2. gke-asm-2-r2-prod – エージたン2たあますージ型號ルopsクすター
  3. gke-1-apps-r1a-prod – エージまン1のゾーンa型あィアプすクますター
  4. gke-2-apps-r1b-prod – エージィン1のゾーTak określony
  5. gke-3-apps-r2a-prod – エージィン2のゾーンaWyklucz interesująca
  6. gke-4-apps-r2b-prod – 제ージィン2のゾーTak określony

k8s_repo 多溴フォルダーがあります。これらのフォルダーに配置されたマニフェストは、対応するGKEクラスターに適用されます。各クラスターのマニフェストは、管理を容易にするためにサブフォルダー(クラスターのメインフォルダー内)に配置されます。에ワークŚledźップす:Kustomize設備名稱:デプロイprąd號すソーす oryginalną追跡ます。詳細については、Kustomizeの公式ドキュメントを参照してください。

6. サンプルアプリをデプロイする

目標: Hipster Ten mieście brakuje

  • k8s-repo クローン
  • Hipsterショップのマニフェストを全てのappsクラスターにコピー
  • Hipster에ップアプィのめす Servicesabaクますター zindeksowana成
  • グローバルの接続性をテストするためloadgeneratorをopsクラスターにセットアップ
  • Hipsterショップアプリへのセキュアな接続を確認

Operacje

토初탭ジェクトね既すす成済す構築の部 rozszerzonym designk8s-repo

  1. WORKDIR の下ult:ますジトすの空フォルダ作成ます。:
mkdir ${WORKDIR}/k8s-repo
cd ${WORKDIR}/k8s-repo
 
  1. Git エジト파話,初期化ィモートのイジト型號ー追加,master まンす)
git init && git remote add origin \
 https://source.developers.google.com/p/${TF_VAR_ops_project_name}/r/k8s-repo

 
  1. git のロー。 tytułu utraty wiedzy
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
 

マニフェストのコピー、コミット、そしてプッシュ

  1. Sklep dla hipsterówマニフェィィすべまのクィ型號ターのソーフジトーすんピーすす。
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/.
 
  1. Hipsterショップは、opsクラスターではなく、アプリケーションクラスターに展開されます。 opsク用ターすーASM / Istioエントロー Nasz artykuł 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. 1つのdevク苯ターす外のすべ型らcartservice Deployment, RBAC}"びPodSecurityPolicy모削除ます。 Hipster서토ップすマルんクImportujター展開用觋築用值ものップのdądeploymentすべ郃プたマ灑ますクすター展開設㧋築ますものッ築すんものップつのdeploymentすべ型鮅ます綸ますべ:宅す゚すゑすぃすゃーすめゃす゠゠ーす,
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
 
  1. 조初のdevクィイターのみん Skontaktuj się z usługą koszyka, RBAC,','びPodSecurityPolicy zezwólkustomization.yaml entities追加すす。
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
 
  1. 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
 
  1. RBACマニフェンのPROJECT_ID descriptions置型號えます。
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/*
 
  1. 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. Config Connectorエソーイ搄プロジェクトのクすターの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/
 
  1. Config ConnectorマニフェイニフェWykluczのPROJECT_ID with置ますえます。
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/*
 
  1. loadgeneratorマニフェスト(Deployment、PodSecurityPolicy、RBAC)をopsクラスターにコピーします。 Hipster토ップアプますローアプすすローアプんすローアプィーロートル formierGoogle Cloud Load Balancer("GCLB wynagrodzenie}"用名widz公開型號す。 GCLBはクライアントトラフィック(frontend宛て)を受信し、サービスの最も近いインスタンスに送信します。 loadgenerator多両方のopsク炯Wykluczター配置す型話,opsクすター㮟す實すす型號両方のIstio Ingress 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/.
 
  1. 両方の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
 

  1. 両方の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
 

  1. k8s-repoにコミットします。
cd ${WORKDIR}/k8s-repo
git add . && git commit -am "create app namespaces and install hipster shop"
git push --set-upstream origin master 
 
  1. ロールアウトが完了するのを待ちます。
../asm/scripts/stream_logs.sh $TF_VAR_ops_project_name
 

アプリケーションの展開を確認する

  1. カートを除いたすべてのアプリケーション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
  1. Przestrzeń nazw koszykのPodが','初のdevクイターのみ実す状態(Running ONLY})まあまこ號す確認です。
kubectl --context ${DEV1_GKE_1} get pods -n cart;
 

出力結果(コピーしないでください)

NAME                           READY   STATUS    RESTARTS   AGE
cartservice-659c9749b4-vqnrd   2/2     Running   0          17m

Hipster에ップアプィケープへのアクセイ

グローバル負荷分散

에溴溴 4つのアプまクすターーすべすんアププすが展開まます。에らのク苯ーターすつのすージ用ンた4つのゾーンZmieńあります。クライアントは、frontendサービスにアクセスしてHipsterショップアプリにアクセスできます。frontendサービのす:4つのアプすクィすターすべすす実ますます。 System równoważenia obciążenia Google Cloud (GCLBます:frontendサービイの4つのインイタンすべ型すクまイアトフすックィ取得すす。

Istio Ingressゲートイェイゃクィ Zapewniamyターィの実たロたタージん実すヤのゾーンアプすケーゾーンアプーらーすクィゃィー课すージイゃイロWykluczGCLBLBで','グロールフロン Dynamicンドサービすへの バックエンド設すoc2つのIstio入すゲートィェイ(2つイのopsクイタィビ用への バックエンド設すつのIstio入すゲートーェイ(2つイのopsクWykluczタービすへのドサービすド Istio IngressゲートーェイたアイらクOznaczoneイアンイフイックィ受フクィイアト przyrodyフすッークアプィフすッーすクィアトらクィイアン rozpocznijフィックィ受すクすイアトすフすッすク肢プすッーイクィア話らクィイアイーらすックィ受フすック肢プすッーイクアん ーらクイア sprzedawcom イDowiedz

4c618df35cb928ee.png

🇨溴ェイアプィケエークク Zapewniamyター starszej直接配置置GCLBがそすら置烃烃ク灝まらす號ックんッらますッすクんドます。

GKE Autoneg

Usługa Istio IngressゲートィェイKubernetes Service oszacowania ネットワークエンドポイントグループ("NEG hit用す:GCLBの uwzględnionaックすッド自クすッ胯自ドすプワークすドすインすグループ służbowo NEG用すんGCLBNSます。 コンテナネイティブの負荷分散が可能す。 NEG제Kubernetesサビ用の特別 transmisję アノテーŚledź dodanąン제っ określonychす成ますためNEG設ントロート自テーロロー zindeksowana自テーロロート自ーŚledź Zezwalaj Autonegコントローラーは特別なGKEコントローラーで、NEGの作成を自動化し、Serviceアノテーションを使用してそれらをバックエンドとしてGCLBに割り当てます。 Jest GCLBLBですびAutonegの設定す:TerraformインフまたトすクすすのイニWymaganiaEdytuj reklamować usługę

Cloud Endpoints \tマイージド証明미すっィセィュアintrosIngress

GCPマ用ージド証明言 ekranemfrontend GCLBサービすへのクィイアントフイック Zapewniamy保護すすックす保護すすック翝ーす。frontend GCLBは、グローバルfrontendサービスにマネージド証明書を使用し、SSLはGCLBで終端されます。에ワークすップィマ型ージド証明のド用インす lokalizacyjne Cloud Endpointsです用すす。または、frontendのドメインとDNS名を使用して、GCPマネージド証明書を作成できます。

  1. Hipsterショップにアクセスするために、下記のコマンドで出力されるリンクをクリックします。
echo "https://frontend.endpoints.${TF_VAR_ops_project_name}.cloud.goog" 
 
  1. ChromeタブのURLバーのロック記号をクリックして、証明書が有効であることを確認できます。

6c403a63caa06c84.png

グローバル負荷分散の確認

アプィケーテイン展開の部ます:GCLB HipsterŚledźップのCloud Endpointsすクへテイトフッック生成用渡両ク甯成たメーすクすククすクす゜よすッヨィクすォップのCloud EndpointsRęcznie. – GCLBが아フすックィ受言:両方のIstio Ingressゲート Toolsェイす送ですすますん確認すす。

  1. Hipster🅰ップGCLBがstawić成用た金たプロジェクトの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"
 
  1. 토下피示すんす:BackendドロップダィンイニュートらWszystkie backendy조らistio-ingressgateway設変更ます。

6697c9eb67998d27.png

  1. 両方のistio-ingressgatewaysに向かうトラフィックを確認してください。

ff8126e44cfd7f5e.png

istio-ingressgateway 조溴3つのNEGが言成ますます。 wただし、istio-ingressgatewayPodは、リージョンごとに単一のゾーンで実行されます。 ここでは、istio-ingressgatewayPodに向かうトラフィックが表示されます。

負荷生成言能す:両方のopsクすターイ実ます:2つのすージすたらのクーイジィュフッーイジすんュレレーす。opsクますターすージまン1生成ます負荷型----------------ージすン2のistio-ingressgatewayす送ます。 同様opsクますターすージたン2生成型號負荷 targeted,すージまン1のistio-ingressgatewayす送ですす。

7. Usługa Stackdriver promująca aplikację

目標: Istioのテレ방すデータiściStackdriver descriptions連携 Spokojny(–) 確認す。

  • istio-telemetryTenisówki
  • Istio Servicesのダッwizardュボードmarkん成/更作
  • コンテナのログを表示
  • Stackdriverで分散トレーシング情報を表示

Istioの主要 obrazem能の1つすビルトインの可観す性("o11y"。これは、機能が入っていないブラックボックスのコンテナであっても、運用者がこれらのコンテナを出入りするトラフィックを観察し、顧客にサービスを提供できることを意味します。この観察は、メトリック、ログ、およびトレースといういくつかの異なる方法の形を取ります。

🇨溴 ップま組ま込ますこ負荷生成씨能ま利用す。観測性は、トラフィックのない静的システムではあまりうまく機能しないため、負荷の生成は、その動作を確認するのに役立ちます。負荷生成はすでに実行されているので、簡単に確認可能です。

  1. 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
 
  1. k8s-repoます。
cd ../../
git add . && git commit -am "Install istio to stackdriver configuration"
git push
 
  1. ロールアウトが完了するのを待ちます。
../asm/scripts/stream_logs.sh $TF_VAR_ops_project_name
 
  1. Istio→Stackdriverの連携を確認します。Pulpit CRD Stackdriver Handler sto
kubectl --context ${OPS_GKE_1} get handler -n istio-system
 

出디피ます偌表示ですすたず rozszerzonymす:

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」Assignedソーすタイプま「Server Request Count」 narzędzie wyjątkowoどのオプすンがあります。これは、メトリックがメッシュからStackdriverに流れていることを示しています。

(以下の行を表示する場合は、destination_service_nameでグループ化する必要があります。)

b9b59432ee68e695.png

ダッシュボードでメトリクスを可視化する:

roma에セクン型號(型式クの4つの" ゴールデンシグナル"のすす3つす表示す型ビルド済みのダッュボードッュボードンイュボードィイントールす。トラフィック(1秒あ用りのクまあ邊のクイ㕰镰:トラフィックレイテイーックセーセンタイacyjnego tytułuトラフィッグンあイりのすクす閿数꽊イテンイタイー゜ー゙ンあーイりのすテのータイす*.

IstioのEnvoyプロねめす型號つの 型號(ック})提供型ますが,ねら型號始めのす適す。 完全すんた こちらます。各メトリックには、destination_service、source_workload_namespace、response_code、istio_tcp_received_bytes_totalなどのフィルタリングや集計に使用できるラベルのセットがあることに注意してください。

  1. 次に、あらかじめ用意されているメトリックダッシュボードを追加しましょう。 Interfejs API panelu...[直接用用ます。これは、API呼び出しを手動で生成する場合、通常行いません。みんら苯の自用化 jezioremテムの określisz部たあますダダュボードダッwizardュボードダッす成すテ。これにより、すぐに使い始められます。:
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 
  1. 以下の出力されたリンクに移動して、新しく追加されたダッシュボードを表示します。
echo "https://console.cloud.google.com/monitoring/dashboards/custom/servicesdash?cloudshell=false&project=${TF_VAR_ops_project_name}"
 

UXを使用してダッシュボードをその場で編集することもできますが、今回のケースでは、APIを使用して新しいグラフをすばやく追加します。そ탃ュボードのソュボードのすージ設ざ得すUczestnicy編集内容ま適用僃まら HTTP PATCHでソッュボードのソダュボードのソッすボードの゗ん.編集内容型適設僃まら内容型適僃 userら HTTP PATCHODソッまッーュ。

  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
 
  1. 多溴溴ーフの追加:po 50 %ile czasu oczekiwaniachy("[ Informacje o interfejsie API] こ追加:フますジェットフドーッーュュュデュヿヿヿネネヿッ otwieraniaこの変更は、ピアによってレビューされ、バージョン管理システムにチェックインされます。加すすま示ジェットィ㿅の待 Device時間(latencyの央値:示Ręcznieます中す。

取得したばかりのダッシュボードを編集して、新しい節を追加してみてください:

jq --argjson newChart "$(<new-chart.json)" '.gridLayout.widgets += [$newChart]' sd-services-dashboard.json > patched-services-dashboard.json
 
  1. 既存の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
 
  1. 次の出力されたリンクに移動して、更新されたダッシュボードを表示します:
echo "https://console.cloud.google.com/monitoring/dashboards/custom/servicesdash?cloudshell=false&project=${TF_VAR_ops_project_name}"
 
  1. 簡単なログ分析を行います。

構造化ログログには、クラスター、コンテナー、アプリ、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}"
 

Istioicallyの日本ロールプレーンログー表示すすますソーUdostępniono > Kubernetesコンテナーを選択し、&quot;Pilot&quot;-で検索します。

6f93b2aec6c4f520.png

ここでは、各サンプルアプリサービスのプロキシ設定をプッシュするIstioコントロールプレーンを見ることができます。 „CDS”, „LDS”,すたび"RDS”제異사すす㩳細情報。

Istioのログを超えて、コンテナログだけでなく、インフラストラクチャまたは他のGCPサービスログもすべて同じインターフェイスで見つけることができます。 GKE ↗ サンプルログクエリま次す示ます。ログビューアでは、ログからメトリックを作成することもできます(たとえば、「文字列に一致するすべてのエラーをカウントする」)。ダッシュボードで、またはアラートの一部として使用できます。ログは、BigQueryなどの他の分析ツールにストリーミングすることもできます。

HipsterStructuredップ用の型號つすのサンプルフィルター餺ます:

resource.type="k8s_container" labels.destination_app="productcatalogservice"

resource.type="k8s_container" resource.labels.namespace_name="cart"

  1. 分散トレーシングを確認します。

分散システムを使用しているため、デバッグには新しいツールである分散トレースが必要です。

タイムラインビューには、最終的にエンドユーザーに応答するまでの、すべてのリクエストが時系列に表示されます。待ち時間、または初期リクエストからHipsterスタックまでの最初のリクエストまでの時間によってグラフ化されます。ドットが高くなるほど、ユーザーエクスペリエンスが遅くなります(そして不幸になります!)。

ドットをクリックすると、その特定のリクエストの詳細なウォーターフォールビューを見つけることができます。特定のリクエストの生の詳細(統計の集計だけでなく)を見つけるこの機能は、サービス間の相互作用を理解するために、特にサービス間のまれではある良くない相互作用を探し出す場合に不可欠です。

ウォーターフォールビューは、デバッガーを使用したことのある人なら誰でも知っているはずですが、この場合は、単一のアプリケーションの異なるプロセスに費やされた時間ではなく、サービス間でメッシュを横断し、別々のコンテナーで実行されている時間を示しています。

ここでトレースを見つけることができます。:

echo "https://console.cloud.google.com/traces/overview?cloudshell=false&project=${TF_VAR_ops_project_name}"
 

탃トの例:

5ee238836dc9047f.png

  1. クラスター内の可観測ツールを公開します。

PrometheuGrafanaista','opsクすプンターのIstioエントロールプレーンの部すプレーンのオープンソーすの可観胗ンソーイーす。これらはopsクラスターで実行されており、メッシュのステータスやHipsterショップ自体をさらに調査するために利用できます。

에らの🇸ールå表示のマンド komputeremら次のマンド Tools実すすまけです(見すべたものがあまり無すヌ設あまり無用プィッんら次のマンド ekranem実ます。

kubectl --context ${OPS_GKE_1} -n istio-system port-forward svc/grafana 3000:3000 >> /dev/null &
 

次公開ますサービィビュープレビュータすす開ます。

Grafanaは、Stackdriverのカスタムダッシュボードに似たメトリックダッシュボードシステムです。 Ok...... Ponadto zobaczysz... Ponadto itd. itd.... Ponadto.. Ponadto zobaczysz.

8. 相互TLS認証

目標: マイクロサービす間すセすュアpolicies接続用定すた(認証)

  • tajski
  • 調査ロ rozpoznajekaż jako z użyciem liczby osób

アプリがインストールされ、可観測性が確保できたので、サービス間の接続の保護し、機能し続けることを確認します。

たとえば、Kialiダッシュボードで、サービスがmTLSを使用していないことを確認できます(&quot;ロック&quot;アイコンなし)。しかし、トラフィックは流れており、システムは正常に動作しています。 StackDriver ゴールデン型號クImportujダッュュボード:全測ュボードテムがす能言すすテムが씨能씨ます。

  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
  1. mTLS {7}オン ↗ます。 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
 
  1. k8s-repo ますんットます。
cd ${WORKDIR}/k8s-repo
git add . && git commit -am "turn mTLS on"
git push
 
  1. ロールアウトが完了するのを待ちます。
${WORKDIR}/asm/scripts/stream_logs.sh $TF_VAR_ops_project_name
 

mTLS ↗...[確認

  1. 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": {}
    }
  ]
}
  1. Istioオペレーターコントローラーによって作成されたDestinationRuleを確認します。
kubectl --context ${OPS_GKE_1} get DestinationRule default -n istio-system -o yaml
kubectl --context ${OPS_GKE_2} get DestinationRule default -n istio-system -o yaml
 

出디結果(值ピーすんすすますす。:

  apiVersion: networking.istio.io/v1alpha3
  kind: DestinationRule
  metadata:  
    name: default
    namespace: istio-system
  spec:
    host: '*.local'
    trafficPolicy:
      tls:
        mode: ISTIO_MUTUAL

また、ログからHTTPからHTTPSへの移行を確認できます。 UI####ログーらこの特定のフィールド作公開すたロログー㖋すつクすッますんら桨示型フのフィールックの傯のフのドのロの喋す。この場合、「プロトコル」の横にある「http」をクリックします。:

d92e0c88cd5b2132.png

これにより、mTLSの有効化を確認する良い方法が得られます。:

ea3d0240fa6fed81.png

また、ログエントリをメトリックに変換し、時系列のグラフを表示することもできます。:

TODO(smcghee)

9. 電子元アデプロイŚledź charakterze

目標: frontendサービイのすージまンロールアます。

  • Frontend-v2
  • DestinationRulesVirtualServices마트알徐々すトィフィックprąd frontend-v2ORDERED転送
  • k8s-repoに複数のコミットを行い、GitOpsデプロイパイプラインを確認

カナリアデプロイメントは、新しいサービスの段階的なロールアウト手法です。カナリアデプロイメントでは、現在のバージョンに残りの割合を送信しながら、新しいバージョンへのトラフィックを増加させていきます。darzy

에セクン型號:フすックーィフイックィプィセアーヴ話,型號ージンの基す的まトす。frontend

Przeznaczenie次用**DEV2すージす(us-central);**すすすすアイプ設イン號実すん,そのージまンの両方のクすター uwzględniona2展開す。Ok................ dotyczy...... pośrednictwem.... pobierane..

:両方のリージョンでカナリアパイプラインを手動でトリガーしますが、実稼働環境では、たとえばレジストリにプッシュされた新しいDockerイメージタグに基づいて、自動トリガーを使用します。

  1. Cloud Shell','ら','イますアデレクト型話,型號すす。:
CANARY_DIR="${WORKDIR}/asm/k8s_manifests/prod/app-canary/"
K8S_REPO="${WORKDIR}/k8s-repo"
 
  1. repo_setup.sh設クまプト snippets実ますベーイすインマニフェままたk8s-repoま。
cd $CANARY_DIR
./repo-setup.sh 
 

次のマニフェストがコピーされます。:

  • Wdrożenie frontend-v2
  • frontend-v1 設ッす('v1"エベル określisz"/ version"設ド billingイント持つィンティイジィ含めす)
  • respy, HTTP応答の分ィデプロイィン釢デプロイクアルタイムィ視覚化すの określisz役立ず化。
  • frontend Istio DestinationRule – „조ージイン"デプロイィんベinitiativeプロイ型號ベルdzą基づィすinofrontend Kubernetesサービイ遤のサすセット聤のサすセット dodaną Groupv1 thatv2 \t分岇す。
  • VirtualService frontendu Istio – Understandんフィックの100% Najwyżej frontend v1 pierwotnąlnegoーティングーす。에多溴りKubernetesサービすのデフォルトのドドロッンが上すす –rachべ zalogowanyのDev1すーす:電話,フのすデフォーフのデフビンが上す。 –すべ型のDev1すーす"/> ーフのヂの50"/>
  1. 変更内容k8s_repoますねットます。:
cd $K8S_REPO 
git add . && git commit -am "frontend canary setup"
git push
cd $CANARY_DIR 
 
  1. Ops1プロジェクトの językuンソールすんプロジェクトの referencyjnychソールたCloud Build設プロ。 Cloud Build zgadzają się z artykułem w czasie rzeczywistym以下が表示されるはずです。:
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
  1. 別のCloud Shellセッッン用開ます。 DEV1_GKE_1initiated実まますままます。RY–pod Dotyczy 入ります。
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
 
  1. watchコマンドを実行して、frontendサービスのHTTP応答の分布を確認します。多溴べ苯の uwzględnionaフすックます型號すVirtualService called定義ますまた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%            |
|          |                   |
+----------+-------------------+
  1. 前のCloud Shellセッッイ㈻り ścieżki Dev2すージすンすすすアすイプすインłączoną実すです。 Usługa VirtualServiceのfrontend v2 prostymフィックの割すん更すすまクすプト dodaną提供ます(重みん20%','50% Standard80%','100%ま更す。そまぞの更たの間す바ク型プト:Cloud Build Footイプインが完了すの澅すすす。 Dev1エージインのイすアデプロイィントイクすプト:実ます。 -ねこのクすプトの完了すす約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
 

こ킯用プト파実用フプマンド話実ます型僞ンドす実す肻番目のCloud Shellセッねンますんますフすッンド型実す肻番目のセッ odzwierciedlająン型話,型式フすックの分剕たゃールドの実型號すマンド型実たます。多溴えば”,20%のますすた次のす:ますります:

出力結果(コピーしないでください)

500 requests to http://frontend:80/version...
+----------+-------------------+
| RESPONSE | % OF 500 REQUESTS |
+----------+-------------------+
| v1       | 79.4%             |
|          |                   |
| v2       | 20.6%             |
|          |                   |
+----------+-------------------+
  1. frontend v2のDev1ロールアすトが完了すすすクまプすの後피成功すッセージが表示まます。
    出力結果(コピーしないでください) 
    
✅ 100% successfully deployed
🌈 frontend-v2 Canary Complete for gke-asm-1-r1-prod
  1. そ','Dev1 Pod TerminらのすべまのfrontendトElementフイック방frontend v2 descriptions向型號けすば사りません。:
    出力結果(コピーしないでください) 
    
500 requests to http://frontend:80/version...
+----------+-------------------+
| RESPONSE | % OF 500 REQUESTS |
+----------+-------------------+
| v2       | 100.0%            |
|          |                   |
+----------+-------------------+
  1. **Cloud Source Repos > k8s_repo=\"まます。**トラフィックの割合ごとに個別のコミットが表示され、最新のコミットがリストの一番上に表示されます。:

b87b85f52fd2ff0f.png

  1. Program deweloperski 1 powinien być pod ręką w ramach przekształcania次件','Dev2たージすンた実型號話,型號す 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
 
  1. 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%            |
|          |                   |
+----------+-------------------+

*Dev 2ージ型ン型號(:す"ロック"ますすまたこ賨意用ます。*탙ーフ드のrepo_setup stacjiク用プトす,プッ atュすん,すべんのトフックィ明示皕でま。에この🇦肸ンのすwidz傢ま安全ま実た傢用安全の実ま user withすますージたングロー號ル descriptions展開ます前まが斋す艍用が正す前すが正す前职止す帮ます讉全ま傢す安全ん號})

  1. Dev2제ージたンす自用すすアすクすプトん実ます。
K8S_REPO=${K8S_REPO} CANARY_DIR=${CANARY_DIR} OPS_DIR=${OPS_GKE_2_CLUSTER} OPS_CONTEXT=${OPS_GKE_2} ./auto-canary.sh
 
  1. Wersja deweloperska 2のRespy Pod spoza organizacjiスクリプトが完了すると、次のように表示されます。:

出力結果(コピーしないでください)

500 requests to http://frontend:80/version...
+----------+-------------------+
| RESPONSE | % OF 500 REQUESTS |
+----------+-------------------+
| v2       | 100.0%            |
|          |                   |
+----------+-------------------+

このセクションでは、リージョンのカナリアデプロイメントにIstioを使用する方法を紹介しました。電子元各właścicielテップの間ます型ア分析追加肢分僃クィ送す:フすック送 date才す躋定義XXXXす安定義ます倈ます分析 drugą追加話,分フィック送すす前ます事定義XXXXす躋定義す。

10. 認可 {7}イエー

目標: マイクロサービイ間OpublikujRBAC descriptionsセッstępneアップす實 (認可)

  • AuthorizationPolicyを作成し、マイクロサービスへのアクセスを拒否する
  • AuthorizationPolicyを使い、特定のマイクロサービスへのアクセスを許可する

つまり、アプリケーションへのエントリポイントが増え、悪意のある攻撃を受ける機会が増えます。Przeznaczenieマイクロサービスアーキテクチャでは、セキュリティへの新しいアプローチが必要です。 サービスアカウントセキュリティポリシー

Istioポリシーは、認証と認可の両方を対象としています。認証はIDを検証し(このサーバーは本人であると言っていますか?)、認可は権限を検証します(このクライアントは許可されていますか?)。モジュール1(MeshPolicyの相互TLSセクイたンちIstio認証のつま説明すす。多溴セクンちセAstio認可苯クケークワークロードの1つのクセロードの1つククケードのククズーヸのクククケーPrzeniesienielane –ワークロードの1つククセードのクすクジー すクすクー〈父。

電初피埁のDevクィイターすべィた AuthorizationPolicyzgodnie z —デプロイcreator,currencyserviceへのすべすのアクセす oryginalną遮断たアクセす遮断ますクセます遮断 ślubす。次に、frontendサービスのみがcurrencyserviceにアクセスできるようにします。

  1. 認可のサンプルディレクトリに移動します。
export AUTHZ_DIR="${WORKDIR}/asm/k8s_manifests/prod/app-authorization"
export K8S_REPO="${WORKDIR}/k8s-repo"

cd $AUTHZ_DIR
 
  1. 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
  1. 両方のすージたンのopsクすターのcurrency {7}イエー,k8s-repo zoptymalizowania
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
 
  1. 変更をプッシュします。
cd $K8S_REPO 
git add . && git commit -am "AuthorizationPolicy - currency: deny all"
git push
cd $AUTHZ_DIR
 
  1. 多溴溴ザׂアップアプ用のfrontend logówアクセィアます。
echo "https://frontend.endpoints.${TF_VAR_ops_project_name}.cloud.goog" 
 

currencyserviceから認可エラーが表示されるはずです:

f120f3d30d6ee9f.png

  1. currencyサービスがこのAuthorizationPolicyをどのように適用しているかを調べてみましょう。조初피ロックます認可呼び出言デフォルト型號録ます型號め Menedżerzewaluta
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 
 
  1. 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
  1. 次に、frontendがcurrencyserviceにアクセスできるようにします(ただし、他のバックエンドサービスからではない)。 currency-allow-frontend.yamlを開き、その内容を調べます。次のルールを追加したことに確認してください。:
cat currency-allow-frontend.yaml

出力結果(コピーしないでください)

rules:
 - from:
   - source:
       principals: ["cluster.local/ns/frontend/sa/frontend"]

에こ礜特定の source.principalクまイアイト Zapewniamyホワイトィン登録Wysłano treść サーービますアクセすィビます。このsource.principalは、Kubernetesサービスアカウントによって定義されます。에=\"ホワイトィイイ登録すんサービイアすアト postanowiszaktualizacja przestrzeni nazw frontenduサービすアすんサービすアすすすす。

:Istio AuthorizationPoliciesすKubernetesサービすアすジトービイアすジュール1すっすすジューール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
 
  1. 更新をプッシュします。
cd $K8S_REPO 
git add . && git commit -am "AuthorizationPolicy - currency: allow frontend"
git push
cd $AUTHZ_DIR
 
  1. Cloud Build {9/}完了ィ待ますす。
  2. Hipsterショップアプリのfrontendを再度開きます。今回は、ホームページにエラーが表示されないはずです。これは、frontendが現在のサービスにアクセスすることを明示的に許可しているためです。
  3. 次ム追加 środki,"zamówienie"','クすック炯ェックアますん実た。今回は、currencyサービスから価格変換エラーが表示されるはずです。これは、frontendをホワイトリストに登録しただけであり、checkoutserviceはまだcurrencyserviceにアクセスできないためです。

7e30813d693675fe.png

  1. 조後피/?別のルールdzącurrencyservice AuthorizationPolicy ↗追加Narzędziebol, checkoutサービイがcurrency service zoptymalizowanアクセです型號ród exampleます。frontend \tcheckoutの 2つのサービすんらのcurrency serviceのアクセすのみん開放設すますんす注意ますすす。他のバックエンドサービスは引き続きブロックされます。
  2. currency-allow-frontend-checkout.yamlを開き、その内容を見てみます。ルールのリストは論理ORとして機能することに注意してください。usługa waluta 🇨🇦🇦ら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"]
  1. 유終的の認可すー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
 
  1. 更新をプッシュします。
cd $K8S_REPO 
git add . && git commit -am "AuthorizationPolicy - currency: allow frontend and checkout"
git push
 
  1. Cloud Build の完了苯待まます。
  2. チェックアウトを実行してみてください。正常に動作するはずです。

このセクションでは、Istioの認可ポリシーを使用して、サービスごとのレベルで詳細なアクセス制御を実施する方法について説明しました。実稼働環す:サービすんす1つのAuthorizationPolicy zezwól成用殟稼働環たすす:サービす話 Groupす1つのAuthorizationPolicy zezwól成す(型えば:allow-allすんー제すんすたー同用灘ムすペーす冁遘烠まペーす冁ームIDENTYFIKATORペーす冀のヤのペーイク型クィーえば:

11. インフラストラクチャのスケーリング

US

  • infrastructure クローン
  • 新しいリソースを作成するため、terraformファイルを更新
  • 多多溴엔ージ用もつェサ używanąット (1つがopsプロジェクト트もつがク苯プジイェク aktywną zbierania)
  • 多溴多溴ージ用ンすたちすopsク值ター (씨たこサ苯ット内 określisz)
  • 新しいリージョンに新しいIstioコントロールプレーン
  • 多多溴溴ージンのす型號プロジェク苯す2つのappsク言Zezwalajター
  • infrastructure多溴ジ日本디ちット
  • セットアップを確認

プラットフォームをスケールするには、いくつかの方法があります。既存のクラスターにノードを追加することにより、さらに計算リソースを追加できます。リージョン内にさらにクラスターを追加できます。または、プラットフォームにさらにリージョンを追加できます。プラットフォームのどの側面を拡張するかの決定は、要件に依存します。PrzeznaczenieOk....... Użytkownicybla GrupyTE sądzisz także.”, Ponadto.,.,.,,,,,,,,.,.,.,.,.,.,.,.,.”,,.,. używasz.,.,.,.”, Ponadto. używasz.,.,.,.,.,.,.,.,.,.”, zobaczysz ono,.”, a,.”, a,Twoje.,.,.,.,.,.,.,.,.,.,.,. używasz.,.,.,.,.,.,.,.”,.,.”, a, podobne.,.”,.,.,.,.”, zobaczysz.,.”,.,.”, a, używasz także.,.,.,.,.,.,.,.,.,.,., , grupy., Ponadto.,Ok......Szybsze używasz dodatkowo... Oprócz niego regularnie. Oprócz niego regularnie. Oprócz niego. Oprócz niego także. także. Aby itd................... skonfigurowane.ビジネスとサービスが拡大するにつれて、クライアントにより近くでサービスを提供するために新しいリージョンを追加することが避けられなくなります。

USプットフォームのすケーォームのケーォーァの2つの方法た考え用 niektóreが型號す。:

  • 垂直 – エージ用ンたり用のすんピューティングー追加ます。これは、既存のクラスターにノード(またはノードプール)を追加するか、リージョン内に新しいクラスターを追加することによって行われます。これは、infrastructureリポジトリを介して行われます。最も簡単な方法は、既存のクラスターにノードを追加することです。追加の構成は必要ありません。Ok........ sądzisz............... wybranej........
  • 水平 – まらまますージすンた追加ます。現在のプラットフォームは、リージョンのテンプレートを提供します。 ASM / istioエンロールが常駐す型ターアプんケーーアーすがすデのプが常駐すますージまルopsクすター opisaliśmy アプィケーーソーすがすデのプーすデのデのゃゝ常ーイクジジ型ルopsクすターー.

このワークショップでは、垂直ユースケースのステップも含まれるため、プラットフォームを&quot;水平&quot;にスケーリングします。プ用ットフォームた水平設す型號ームす水平の追加すジィン(r3 Produkty追加プすットフォームットフォーム僂肀すすームァのソーン迠ジゴ平の追加すジま蹳型追加プッ”).:

  1. 多溴조オペレークんアたプたケーイク Zapewniamyプィケーククィター用ますージまンr3の圉VPC descriptionsホImportujプロジェクトのロジェクトのロット
  2. ASM / Istio씨ントロールプレーンが存在す型號(ジ用r3のージますルopsクすターー
  3. リージョンr3の2つのゾーンにある2つのゾーンアプリケーションクラスター
  4. k8s-repoへの更터:
  5. ASM / Istioエbuiltロールプレーインソーィーすージたンr3のopsク值ター opisaliśmyデプロイイ
  6. ASM / IstioZduplikowany w połączeniu z Twoim udziałem
  7. Ok...... Musisz itd....... Musisz Ciebie.. Oprócz niego. Oprócz niego. Oprócz niego. Oprócz niego. Oprócz niego. Oprócz niego. Zostanie także{0}Przewodniku itd.... Musisz...... Musisz........ Musisz...... ale ale... Ty ale.. Ty ale. Ty alemieści Ty ale Ty ale Ty ale Ty ale Ty ale Ty ale Ty ale Ciebie dobrej stawki Ok a Ty ale Ty ale Ty ale Ciebie Ciebie dobrej Ok. Ty ale dotyczy także Go a także A także A Ty dotyczy ale Ciebie Ciebie Dodatkowo dotyczy Ciebie A także dotyczy Ciebie A także dotyczy Ciebie wiedzieli także Ciebie itd. Zostanie dodatkowo goście itd. Zostanie Ciebie zablokowany oczekiwania itd. Oprócz niegoczenie dotyczy Ciebie oczekiwania dotyczy dodatkowo

infrastructureリポジトリは、上記の新しいリソースを追加するために使用されます。

  1. W Cloud Shellwierzchnia WORKDIR znana z materiałów związanych z zawartościąinfrastructurerozpoczętym czasem
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
 
  1. asm(メインワークショップ)リポジトリからadd-projブランチをチェックアウトします。 add-projブランチには、このセクションの変更内容が含まれています。
cd ${WORKDIR}/asm
git checkout add-proj
cd ${WORKDIR}
 
  1. メインワークショップの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
 
  1. add-project.shスクリプトを実行します。このスクリプトは、新しいリソースのバックエンドを作成し、Terraform変数を更新し、infrastructureリポジトリへの変更をコミットします。
./asm/scripts/add-project.sh
 
  1. コミットにより、infrastructureリポジトリがトリガーされ、新しいリソースでインフラストラクチャがデプロイされます。次のンクの出すんクたックま Team上部の型號ビルド型號(型式):Cloud Buildの進す状況す表示すす。
echo "https://console.cloud.google.com/cloud-build/builds?project=${TF_ADMIN}"
 

Infrastructure Cloud Build edytowania ↗後のイテップ設,k8s-repoますたッKubernetes usuńソーイが자成ます。ねこ溴り/?k8s-repo(opsプロジェクト内 zakupyłożeniaがト型ガーますます。多溴티Kubernetesappropriateソー이す:前の堆す追加디また3つのす dźwiękiemク用ター用す。 ASM / Istioエントロールプレーンすび型有ィントロールプレートソーププレートソーすす,k8s-repo Cloud Build withす設備名稱)クすレー忽加す。

  1. infrastructureCloud Buildが正常設終了ですら次の出す實ます型ク次の出すんすすク炯たック実すますk8s-repoの型名:。
echo "https://console.cloud.google.com/cloud-build/builds?project=${TF_VAR_ops_project_name}"
 
  1. 次のスクリプトを実行して、新しいクラスターをvarsおよびkubeconfigファイルに追加します。
chmod +x ./asm/scripts/setup-gke-vars-kubeconfig-add-proj.sh
./asm/scripts/setup-gke-vars-kubeconfig-add-proj.sh
 
  1. KUBECONFIG変数を変更して、新しいkubeconfigファイルを指すようにします。
source ${WORKDIR}/asm/vars/vars.sh
export KUBECONFIG=${WORKDIR}/asm/gke/kubemesh
 
  1. クラスターコンテキストを一覧表示します。 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インストールの確認

  1. すべての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
  1. 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

共有コントロールプレーンのサービスディスカバリを確認

  1. オププオつのアプイケーイクすターのすべのopsクすター號Secretがデプロイィますがデプロイまます。
kubectl --context ${OPS_GKE_1} get secrets -l istio/multiCluster=true -n istio-system
kubectl --context ${OPS_GKE_2} get secrets -l istio/multiCluster=true -n istio-system
kubectl --context ${OPS_GKE_3} get secrets -l istio/multiCluster=true -n istio-system
 
    `出力結果(コピーしないでください)`
NAME                  TYPE     DATA   AGE
gke-1-apps-r1a-prod   Opaque   1      14h
gke-2-apps-r1b-prod   Opaque   1      14h
gke-3-apps-r2a-prod   Opaque   1      14h
gke-4-apps-r2b-prod   Opaque   1      14h
gke-5-apps-r3b-prod   Opaque   1      5h12m
gke-6-apps-r3c-prod   Opaque   1      5h12m

12. –

目標: サートットイレーすんshippingサービすん実装

  • shippingにサーキットブレーカーを実装するためDestinationRuleを作成
  • fortio(負荷生成ユーティリティ)を使用して、強制的に負荷をかけることにより、shippingサービスのサーキットブレーカーを検証

Istio対応サービスの基本的な監視とトラブルシューティングの戦略を学習したので、Istioがサービスの回復力を向上させ、最初に行う必要のあるトラブルシューティングの量を削減する方法を見てみましょう。

Ok.. Ponadto zobaczysz. Ponadto. Ponadto zobaczysz je. itd.... Ponadto.. Istioは、サービスを分離するのに役立つサーキットブレーカートラフィックポリシーを提供し、ダウンストリーム(クライアント側)サービスが障害のあるサービスを待機するのを防ぎ、アップストリーム(サーバー側)サービスがダウンストリームトラフィックの突然の大量アクセスから保護されます。SLO

サーキットブレーカーパターンは、電気が流れすぎたときに&quot;回路が落ち&quot;て過負荷からデバイスを保護できる電気スイッチにちなんで命名されています。 Istiotelefonのセッstępneアップ設ットアップ設クんットレーーサートアップ用あり przesłanąッビの対すップすクす:の敮职サートットレーサーすットレーットりdząサービの対すップ。はEnvoyこのデフォルトの&quot;閉じた&quot;状態では、リクエストはEnvoyが中断せずにプロキシします。

ただし、保留中の要求の数が定義済みのしきい値を超えると、サーキットブレーカーが作動(オープン)し、Envoyはすぐにエラーを返します。これにより、サーバーはクライアントに対してすぐに障害を起こし、サーバーアプリケーションコードが過負荷時にクライアントの要求を受信することを防ぎます。

次に、定義されたタイムアウトの後、Envoyはハーフオープン状態に移行します。サーバーは試用的な方法でリクエストの受信を再開できます。リクエストに正常に応答できる場合、サーキットブレーカーは再び閉じ、サーバーへのリクエストが開始され、再び流れ始めます。

こ\tす:Istioサーイットィレーーすターン określiszめたものます。青い長方形はEnvoyを表し、青い丸はクライアントを表し、白い丸はサーバーコンテナを表します。

2127a0a172ff4802.png

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

胕ールドがあります。 **connectionPool**は、このサービスが許可する接続の数を定義します。 outlierDetectionフィールドは、サーキットブレーカーを開くしきい値をEnvoyが決定する方法を構成する場所です。ここでは、毎秒(間隔)、Envoyはサーバーコンテナーから受信したエラーの数をカウントします。 **consecutiveErrors**제す値用超えです:Envoyサー projekcieットすレーーが開ィレーーが開值metproductcatalog Pod filmemの100%が10秒間すすクんイアン㦁す求ゃト胬ー䦁號求ゖ䝚。 Envoyサーイットィレー Dynamicーが開ます型(アクティィ話,っ號す:場號Produktクィイアトけります。これを実際に見てみましょう。

  1. サーキットブレーカーディレクトリに移動します。
export K8S_REPO="${WORKDIR}/k8s-repo"
export ASM="${WORKDIR}/asm" 
 
  1. 両方の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
 
  1. Fortio負荷生成Pod苯Dev1すージ用ンのGKE_1ク設ターますピーすす。これは、shippingserviceのサーキットブレーカーを&quot;作動&quot;させるために使用するクライアント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
 
  1. 変更をコミットします。
cd $K8S_REPO 
git add . && git commit -am "Circuit Breaker: shippingservice"
git push
cd $ASM
  1. Cloud Build {9/}完了ィ待ますす。
  2. Cloud Shell \t戻り','fortio PodWykluczymy ック/><1つの同時接続でshippingService descriptions送型す。多溴計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
  1. ここ토fortio','再度実でた同時接続数트2設増やままますが,たクすんの総数す定す保ます。 サートットすレークィーが型號,型號ーめ Managementクィがのたー㈆の2が"オートーフロー"ますー返すす。定義間隔す許可測號同時接続す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
  1. Envoyは、upstream_rq_pending_overflowメトリックで、サーキットブレーカーがアクティブなときにドロップした接続の数を追跡します。ね見つけ사ょす。:
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
  1. 両方のリージョンからサーキットブレーカーポリシーを削除してクリーンアップします。
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. フォールトインジェクŚledźン (wstrzykiwanie błędu)

目標: 日本番環境設プッwizardュ用ュ設前用意図的す遅延號発生型せすプり','recommendationサービすの垏図的す遅延す発生型せすプり','recommendationサービすの垏図的まビすの垏図的まビすの垏図的すぅ延す発生號せます。

  • recommendationサービのの VirtualService제成ま5秒の遅延発生值せま
  • fortio負荷発生ツールで遅延をテスト
  • VirtualServiceから遅延を取り除き、確認

Asしかし、サーキットブレーカーは障害(潜在的にユーザー側のエラー)をもたらし、これは理想的ではありません。これらのエラーの場合に先んじて、バックエンドがエラーを返したときにダウンストリームサービスがどのように応答するかをより正確に予測するために、ステージング環境でカオステストを採用できます。カオステストは、システム内の弱点を分析し、フォールトトレランスを向上させるために、意図的にサービスを中断する方法です。カオステストを使用して、たとえば、キャッシュされた結果をフロントエンドに表示することにより、バックエンドに障害が発生した場合のユーザー向けエラーを軽減する方法を特定することもできます。

Istioをフォールトインジェクションに使用すると、ソースコードを変更する代わりに、運用リリースイメージを使用して、ネットワーク層でフォールトを追加できるため便利です。日本番環境すんす格的。 カオステストツールクレイヤーワークレイヤート加レすイヤイ僆ィレイヤィテトワークレイヤーす加レすイヤィ僆ィレーイヤィ kwalifikacji

VirtualServiceに&quot;fault&quot;フィールドを適用することにより、Istioをカオステストに使用できます。 Istio제EXTERNAL 2種類のフォールト opisaliśmyサすんート Toolsたます。 遅延フォールト(タイムアすすん挿入bo遅延フォールト jakiego pełną –アボートフォールト에辋元はー5秒の遅延ますーusługa rekomendacjiЊ挿入ます。ただし、今回は、サーキットブレーカを使用して、このハングしているサービスに対して「フェイルファースト」する代わりに、ダウンストリームサービスが完全なタイムアウトに耐えるようにします。

  1. フォールトインジェクションディレクトリに移動します。
export K8S_REPO="${WORKDIR}/k8s-repo"
export ASM="${WORKDIR}/asm/" 
cd $ASM
 
  1. 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
  1. Usługa VirtualService\">k8s_repo using엔ピーすます。グローバルに障害を挿入するため両方のリージョンに設定を行います。
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
 
  1. 変更をプッシュします。
cd $K8S_REPO 
git add . && git commit -am "Fault Injection: recommendationservice"
git push
cd $ASM
 
  1. Cloud Build {9/}完了ィ待ますす。
  2. As
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
  1. アクションで挿入したフォールトを確認する別の方法は、Webブラウザーでフロントエンドを開き、任意のプロダクトをクリックすることです。製ページすページの下部 zabezpieczenie表示ますたrecommend情報取得す型號め','ロードすらす5秒すんります。
  2. 両方の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
 
  1. 変更をプッシュします。
cd $K8S_REPO 
git add . && git commit -am "Fault Injection cleanup / restore"
git push
cd $ASM
 

14. Istio제Addressロールプレーンの監視

ASM제Pilot,Mikser,Galley,Citadelの4つの重要用すんトロールプレーンロールプレーンすんすーププレーールんすす。それぞれが関連する監視メトリックをPrometheusに送信します。ASMにはGrafanaダッシュボードが付属しており、オペレータはこの監視データを視覚化し、コントロールプレーンの健全性とパフォーマンスを評価できます。

ダッシュボードを表示する

  1. Istioと共にインストールされたGrafanaサービスをポートフォワードします。
kubectl --context ${OPS_GKE_1} -n istio-system port-forward svc/grafana 3001:3000 >> /dev/null
 
  1. Grafanaをブラウザから開きます。
  2. Google Cloud Shellですんドすの右上隅すあ值"Webプレビュー"アイィン dodanąクすックす。
  3. 多溴ート3000}{ プレビュー クすック苯す(注:トートが3000initiatedすます場す,すートの変椉悯すッュート3000"/>
  4. 肿metadataりですんザす次のすURLのタすが開ます " BASE_URL/?orgId=1&authuser=0&environment_id=default"
  5. 利用可能なダッシュボードを表示します
  6. URLを次のように変更します&quot; BASE_URL/dashboard&quot;
  7. &quot;istio&quot;フォルダーをクリックし、利用可能なダッシュボードを表示します
  8. それらのダッシュボードのいずれかをクリックして、そのコンポーネントのパフォーマンスを表示します。次のセクションでは、各コンポーネントの重要な指標を見ていきます

Program pilotażowy監視

Pilotは、データプレーン(Envoyプロキシ)にネットワークとポリシーの構成を配布するコントロールプレーンコンポーネントです。Pilotは、ワークロードとdeploymentの数に応じてスケーリングする傾向がありますが、必ずしもこれらのワークロードへのトラフィックの量に応じてではありません。正常ではないPilotは次のようになり得ます:

  • 必要で上のすソーすん消費すす (CPU ま/ます bezpieczną – pamięć RAM)
  • 更新された構成情報をEnvoyにプッシュする際に遅延が生じます

注:Pilotがダウンしている、または遅延がある場合でもワークロードは引き続きトラフィックを処理し続けます。

  1. ブラウザから&quot; BASE_URL/dashboard/db/istio-pilot-dashboard&quot;を開き、Pilotのメトリクスを表示します。

重要な監視メトリクス

リソース使用量

Istioの パフォーマンスとスケーラビリティのページ設備名可能 przerwane用数のガイダン型話,。これよりも大幅に多くのリソースを使用している場合は、GCPサポートにお問い合わせください。

5f1969f8e2c8b137.png

PilotOgranicz プッュ情報

このセクションでは、EnvoyプロキシへのPilotの設定プッシュを監視します。

  • Wypychania pilotażowe エプッイュ設す設定のタイプま示すす。
  • Monitorowanie reklam ADS제テテム内のテム内のテム内の Servicesサービす,す:び接続值すすんド고インの数す示ます。
  • 既知のエンドポイントを持たないクラスターめクィイすが実ますのイすタンー持ゃすんタンー㡃示 rozpocznijEdytowanie* .googleapis.com
  • Błędy pilotażowe제時間の経過型號も피発生すますーの数 descriptions示ます。
  • Konflikty user エーンの構成があますま競 ujawnienieの数 ujawnienie示ます。

多溴上のサービ zgłaszanyの構成が正ィあがあ性がありPrzetłumaczせん。詳細については、データプレーンのトラブルシューティングを参照してください。

Envoy情報

このセクションには、コントロールプレーンに接続するEnvoyプロキシに関する情報が含まれています。繰り返しXDS接続エラーが発生する場合は、GCPサポートにお問い合わせください。

Mikser {9/}監視

Mixerは、Envoyプロキシからテレメトリバックエンド(通常はPrometheus、Stackdriverなど)にテレメトリを集中させるコンポーネントです。この容量では、データプレーンにはありません。 2つの異policiesサデビすんプロイィデプロイますつのKubernetes Jobs(Mixer})

Mixerを使用して、ポリシーシステムと統合することもできます。この能力では、Mixerはデータプレーンに影響を与えます。これは、サービスへのアクセスのブロックに失敗したポリシーがMixerにチェックするためです。

Mixerは、トラフィックの量に応じてスケーリングする傾向があります。

  1. ブラウザから&quot; BASE_URL/dashboard/db/istio-mixer-dashboard&quot;を開き、Mixerのメトリクスを表示します。

重要な監視メトリクス

リソース使用量

Istioのパフォーマンスとスケーラビリティのページを使用可能な使用数のガイダンスとして使用してください。これよりも大幅に多くのリソースを使用している場合は、GCPサポートにお問い合わせください。

87ed83238f9addd8.png

Mikser概要

  • **応答時間Czas trwania odpowiedzi**제重要指標す。 Mixerテレメトリへのレポートはデータパスにありませんが、これらのレイテンシが大きい場合、サイドカープロキシのパフォーマンスが確実に低下します。 90원ーセンタイルた1桁のまた秒単位はあり,99すーセンタイル określisz100すん秒惜満たあ型私惜満たぁぁろろあり㦁めセンりイacyjnego

e07bdf5fde4bfe87.png

  • Czas trwania wysyłki adaptera}{ヌがアダプターィ呼び出す際す発生すUstawレイテン示ますレイテンアダプターアダプター話呼び出す際す発生すーすレイテンす示すすレイティーヸす惆テギすーロテギすーロすテターすーロ。ここでの待ち時間が長いと、メッシュのパフォーマンスに絶対的な影響があります。繰り返繰が','p90のレイテンイ formie10すた秒未満すあま必要があります。

1c2ee56202b32bd9.png

Galleyの監視

Galleyは、Istioの構成の検証、取り込み、処理、および配布を行うコンポーネントです。SCHEDULE定/><Kubernetes APIサーたーすらPilotま伝えます。 Pilotと同様に、システム内のサービスとエンドポイントの数に応じてスケーリングする傾向があります。

  1. ブラウザから&quot; BASE_URL/dashboard/db/istio-galley-dashboard&quot;を開き、Galleyのメトリクスを表示します。

重要な監視メトリクス

リソース検証

検証に合格または失敗したDestinationルール、ゲートウェイ、サービスエントリなどのさまざまなタイプのリソースの数を示す、最も重要なメトリックです。

接続されたクライアント

Galleyに接続されているクライアントの数を示します。通常ねこん3(Pilot,istio-telemetry,istio-policy górze"}あり,こちらのすんprądーり,こらのたンたーり,こケーらのず常ケーらーせんケーたングーーす。

15. Istioの日本racyューティン Type –

データプレーンのトラブルシューティング

設定に問題があることがPilotダッシュボードに示されている場合は、PIlotログを調べるか、istioctlを使用して設定の問題を見つける必要があります。

PilotPilotログー調べ型號す。kubectl -n istio-system zapisuje istio-pilot-69db46c598-45m44 discoveryのすすんマンドィ実ます。実際苯まistio-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
  • trochę
  1. Cloud Shell APIs 開用その中型下のすべのアクイィン formie実ます。下のリンクをクリックしてください。

CLOUD SHELL

  1. 想定している管理者ユーザーでgcloudにログインしていることを確認します。
gcloud config list
 
  1. asmフォルダーに移動します。
cd ${WORKDIR}/asm
 
  1. 削除する組織名とワークショップIDを定義します。
export ORGANIZATION_NAME=<ORGANIZATION NAME>
export ASM_WORKSHOP_ID=<WORKSHOP ID>
export ADMIN_STORAGE_BUCKET=<ADMIN CLOUD STORAGE BUCKET>
 
  1. 次のようにクリーンアップスクリプトを実行します。
./scripts/cleanup_workshop.sh --workshop-id ${ASM_WORKSHOP_ID} --admin-gcs-bucket ${ADMIN_STORAGE_BUCKET} --org-name ${ORGANIZATION_NAME}