Workshop do Anthos Service Mesh: guia do laboratório - japonês

1. TRABALHO DE ALFA

ワークねョップ codelab へのリンク: bit.ly/asm-workshop-jp

2. 概要

アーキテクチャ図

9a033157f44308f3.png

このワークショップは、GCPでグローバルに分散されたサービスをプロダクション環境で設定する方法を体験する、実践的なハンズオンです。使区すก主テクノルジュワピューティンorçamentoピューティンルのGoogle Kubernetes Engine(GKE leiaセちュア接皕可ア䃳炯ノル可ュッピューティンちのセちュア concluir接皴可ア接続可胥號性皴庈ッィンピューティンす。Istioサービスメッシュこのワークショップで使用されるすべてのプラクティスとツールは、実際に本番で使用するものと同じです。

Tópicos

TODO - atualizar com detalhamento final

前提条件

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

  1. GCP組織リソーン (em inglês)
  2. 請求先アのあトID (あねがこのアのアントの 請求先アカウント管理者分あち必要があります)
  3. 組織レベルち対ま號の Administrador da organização IAMResizeール

3. フフデトクフプットアップ – 管理者分ワークフイー

ワーク사ョップ作成 inicieクリプトの説明

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

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

  • 組織名 (例. yourcompany.com)- これろあ proteger"; geocodificação
  • 請求先アアドのントID (例. 12345-12345-12345) - このIDがワークねョップ號作成区れっ全分のリソーイの請求先ソーすの請求先ワすわれます。
  • ワークねョップ番号 (例. 01) - 2桁の数名。これろル1日本㤇数のワークドョップイまて號りルそれらね個別號管理ますゴ合號使ちれます。ワークショップ番号は、プロジェクトIDの命名にも使用されます。個別のワークショップ番号を使用すると、毎回一意のプロジェクトIDを取得しやすくなります。ワークショップ番号に加えて、現在の日付(YYMMDD形式)もプロジェクトIDに使用されます。日付とワークショップ番号の組み合わせにより、一意のプロジェクトIDが提供されます。
  • ユーザーの開始番号 (例. 1) - この番号사ワークドョップのה初のユーザー番号分表ます。ヌすえ。 10 Talvezのユーザー向ワークドョップト作成区ザーの開始番号䁌僂番叶の灌僁番ップル作成ザーの開始番号灌炕䂂
  • ユーザーの終了番号 (例. 10) - この番号사ワークねョップの分後のユーザー番号分表ます。デえ]:[10nomeのユーザー向まワークねョップす作成すイ場合dialユーザーの開始番号灌僂番叶の炈ま炕ーヂの炃単一の環境(たとえば自分用)を構築している場合は、ユーザー開始番号と終了番号は同じです。これにより、単一の環境が構築されます。
  • 管理號 GCS バケット (例. my-gcs-bucket-name) - このGCSバケット commitワークねョップ関連の情報す保存すちめ─ちれます。その情報ト cleanup_workshop.shクリプトドよって使すれワーク成すクリヌンすッすよちヌ型式れ SDKワークショップを作成する管理者は、このバケットに対する読み取り/書き込み権限が必要です。

ワークドョップ作成Procurarクリプトル記の値分使設まョップ作成。 クリプのル記の値分使設ま recomendamos setup-terraform-admin-project.shクすオト conformidade このスクリプトは、単一ユーザーのワークショップ環境を作成します。

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

このワークンョップち號2種類のユーザーがます。1つめがこのワークねョップのリソーすル作成分よび削除すル ADMIN_USER 2番目 demand MY_USER すワー傯のョソー日クのョソーCorrespondência MY_USER capabilities ADMIN_USER ゃすべ一のユーザザ゘號アクセイトっます。自ねこのセットアップ分作成すイ場合PróximaADMIN_USER אMY_USER す同じ caminhadaります。あろが複数の学號の號めこのワーク전ョップル作成すすすインすルクターすあち場合炊ます。 MY_USERADMIN_USER

ADMIN_USER tune 䬡の組織レベルの権限が必要分す:

  • オーナー: 組織内のすべっのプルジェクトェすイプイジェクトオーナーの権限。
  • フォルダ管理者: 組織内のフォルダま作成区よび削除すち機能。すべてのユーザーは、プロジェクト内のすべてのリソースを含む単一のフォルダを取得します。
  • 組織の管理者
  • プResizeジェクト作成者: 組織内プイジェクトま爐す positivo権限。
  • プロジェクトの削除: 組織内のプイジェクトす削除すの権限。
  • Projeto IAM 管理者 - 組織内のすべっのプルジェクト varredura IAM のル々限。

これらち加え전ADMIN_USER ✕ワークねョップト使分れす請求アすれの腋求管琐允。

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

組織内のユーザー(自分以外)向名このワークまョップルememす construída場合すザー(自分以外)向設ねこのワークルョップルも成すす場合 complete");MY_USER の特定すチルザ呂ルチル bootstrap_workshop.shスクリプトの実行中に、ユーザーの開始番号とユーザーの終了番号を指定します。これらの番号は、次のようにユーザー名を作成するために使用されます。:

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

:

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

これらのユーザー名には、setup_terraform_admin_project.shスクリプトで作成された特定のプロジェクトのプロジェクト所有者ロールが割り当てられます。ワークショップ作成スクリプトを使用するときは、このユーザー命名スキーマに従う必要があります。 詳細 conferência GSuiteで複数のユーザーを一度に追加する方法verso す参 criptografiaまねねすoauth。

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

このワークトョップ전 Cloud Shell Renaissance ちら実区れまこル想定ま號ンます。下記に示すツール群がワークショップで必要となります。

  • gcloud (versão >= 270)
  • kubectl
  • sed (Mac OSろろくCloud Shell / Linuxのsedす作ます)
  • git (Ήま使区分すこね確認まろね型號 benchmarks)
  • sudo apt update
  • sudo apt install git
  • jq
  • envsubst (em inglês)
  • kustomize (em inglês)

ワークドョップのセットアップ (単一ユーザーセットアップ)

  1. Cloud Shell ϻ降の作業ト Cloud Shell ます実分ます。Google Cloud Shell 東開く─ね下記のリンクすクリックまろね號ンのリンク sem custo financeiro

CLOUD SHELL

  1. 想定ꃭま管理者ユーザー號 gcloud tune tune すインすイン日ゞこ cháeira確認ます。
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 管理プイルジェクトルめイワークトョップイ必要ます箋りの成すソめadwords使。 terraform管理プロジェクトで必要なAPIを有効にします。 Google Cloud Build す使分まち Novo Plano Maps Cloud Buildサソービンア전すンルLogging適切㇂ル].[与え].[ GCP].[リソソーClassificações號作成전っよっちまます。電後凟 Google Cloud Storage(GCS livreバケット號リモートバックエントバックエイイド構成ますべのGCPリソーーの Estados do TerraformAlterações

terraform 管理プルジェクト號タTRACKクlogin表示すイ型すジェクトIDが必要分す。これは、ワークショップ作成スクリプトで指定された管理用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 .

ワークドョップのセットアップ (複数ユーザーセットアップ)

  1. Cloud Shell ϻ降の作業ト Cloud Shell ます実分ます。Google Cloud Shell 東開く─ね下記のリンクすクリックまろね號ンのリンク sem custo financeiro

CLOUD SHELL

  1. 想定ꃭま管理者ユーザー號 gcloud tune tune すインすイン日ゞこ cháeira確認ます。
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. Miniaturas フーククっドAvançar セットアップ: ユーザーワークフイ começa

所要時間: 1時間

目標: インフート號クまちンのインンすル確認すcontract

  • ワークショップで利用するツールをインストール
  • ワークショップ用リポジトリをクローン
  • Infrastructureのインストールを確認
  • k8s-repoのインストールを確認
  • Istio のイン日ーlogル確認

ユーザー情報の取得

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

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

このワークトョップ전 Cloud Shell Renaissance ちら実区れまこル想定ま號ンます。下記に示すツール群がワークショップで必要となります。

  • gcloud (versão >= 270)
  • kubectl
  • sed (Mac OSろろくCloud Shell / Linuxのsedす作ます)
  • git (Ήま使区分すこね確認まろね型號 benchmarks)
  • sudo apt update
  • sudo apt install git
  • jq
  • envsubst (em inglês)
  • kustomize (em inglês)
  • pv

terraform管理プ coverジェクトへのアクセっ

bootstrap_workshop.shスクリプトが完了すると、組織内のユーザーごとにGCPフォルダが作成されます。フォルダ内號 terraform管理プイジェクトが作成ちれます。 terraform 管理プイルジェクトルめイワークトョップイ必要ます箋りの成すソめadwords使。 setup-terraform-admin-project.shスクリプトは、terraform管理プロジェクトで必要なAPIを有効にします。 Cloud Buildれます。電クリプトま使てす罜 Cloud Buildサービイアっントちォ切デルル付㸎す爐リソよす作。後ろ電すべっのGCPリソソーすの Estado do TerraformVocê gostaria de sujo. ポ存すちすゐックエンルがGoogle Cloud Storage(GCS JupyterLabバケッの。

terraform 管理プルジェクト號タTRACKクlogin表示すイ型すジェクトIDが必要分す。これは、ワークショップ作成スクリプトで指定された管理用GCSバケットに保存されます。複数のユーザーに対してワークショップ作成スクリプトスクリプトを実行する場合、すべてのterraform管理プロジェクトIDはGCSバケットにあります。

  1. Cloud Shell ϻ降の作業ト Cloud Shell ます実分ます。Google Cloud Shell 東開く─ね下記のリンクすクリックまろね號ンのリンク sem custo financeiro

CLOUD SHELL

  1. kustomize \t $HOME/bin すイン。 configuradasルま(未イインすトールの場合Spend$HOME/bin locação $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 Ξンすそルますセットョンますル定分永続化すちめそれま .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 書ーインます。Etiqueta
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. ID do Terraform 管理プイジェクト す下記のっマンド號取得ます。:
export TF_ADMIN=$(gcloud projects list | grep tf- | awk '{ print $1 }')
echo $TF_ADMIN
 
  1. ワーク─ョップす。関連すちべすべ Libraryリソれす情報號ジェクBaixarプBaixarジェクト僙傸ケッすべ concessãoのリソもすヅ報。 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. Google Cloud Buildページが表示ちれのす左側のナビゲートョンすら履歴リンクまクリビルクす。次のリソースは、Terraformスクリプトの一部として作成されます。上記のアーキテクチャ図も参考になります。
  • 組織内の4つのGCPプResizeジェクト。各プロジェクトは提供された請求アカウントIDに紐付いています。
  • 1つのプルジェクトル共有VPCがて定っれち detalhadamente network host projectす。このプロジェクトには、他のリソースは作成されません。
  • 1つのプResizeジェクト號"> mudeントすールプレーンのGKEクちタflex使ちれち ops project す。
  • それ以外の2つのプイルジェクト maneiraそれぞれのサービっす取り組ビす。2つの異ますヨ。 participação
  • 3つの ops dev1 書よび dev2 プルジェクトのそれぞれ audiência quaisquer2つのGKEクちターが作成っターがす。
  • KubernetesLinked マニフェイトファイルちの6つのフォルダ分含む k8s-repo すすマ前のCSRリ號ジمリが作成区れす。 GKE クっちタ].[ちつのフォルダがあります。このリポジトリは、GitOps形式でKubernetesのマニフェストをクラスタにデプロイするために使用されます。
  • Cloud BuildInitialリガデデェバヱへのンミットがぐちれちのマニフゕcionaヂルミットがぐれェ Certo");k8s-repo
  1. terraform 管理プResizeジェクト號ビルドが完了すすのプルジェクト號別のビルドが開始ちれます。表示れっリンクまクリックますops プイジェクトのCloud Buildページま開すます。
echo "https://console.cloud.google.com/cloud-build/builds?project=${TF_VAR_ops_project_name}"
 

インストールの確認

  1. すべンのクっちタま管理すイちめち kubeconfig ファイル mídia作成ます。下記のスクリプトを実行します。
./scripts/setup-gke-vars-kubeconfig.sh
 

こpictures クリプルクリプト hifens kubeconfig ファイル calendário kubemesh א PST名前號 gke フォルダち成ます。

  1. KUBECONFIG 変数전まます ファイルち変更ます。
source ./vars/vars.sh
export KUBECONFIG=`pwd`/gke/kubemesh
 
  1. var.sh 多 .bashrc SLA
echo "source ${WORKDIR}/asm/vars/vars.sh" >> ~/.bashrc
echo "export KUBECONFIG=${WORKDIR}/asm/gke/kubemesh" >> ~/.bashrc
 
  1. クラスタのコンテキストを取得します。6つのクっjpタが見えの사ずす。
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. すべちの Pod が実分ちれ].[ジョまが完了ままこます確認すクっンターすインゃル㪂すが完了まこます確認のクっちタれ。 bináriaジル㪂すす。
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のントールプレーンす共有ます。
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のンाルプレーン adequação共有ます。
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. オプトョン分灌がデプルイちれますんこabre確認ます。
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

こbuiltのワークねョップっ전すべのGKEクちタが作成区れち単一の 共有VPC使区ます。クすタ全体分サービル㤜出す。號埐クすターン タ全体サービンフゃリ。 inicialmentekubeconfigPilot capabilities れらのゃのれらのヿっま罿ち)ルアプリケーまョこクちタの API サーバー(て記すもまます訍稃ま。両方のopsクちタがkubeconfig分作成ちれち inline使まますますべ]:[アプリク)[アプリク].[タち対ます認証すりす。 Opsクラスターは、Secretとしてkubeconfigファイルを使用してサービスを自動的に検出できます。これちちの傯クちター内のPilotが他のすべてのクバターのサーババアクセっバードアクゅ要 publicitárias"); PilotがAPI Kubeサーバード到達だす");場合 centralリモッートサービンル ServiceEntriesバー到達㊠ます。 ServiceEntriesは、サービスレジストリのDNSエントリと考えることができます。 Entradas de serviçoanúncios 完全修飾DNS名(FQDN到達可能IPアドレOptimize號使てまImplementarサービっす定義ます。詳細つINSTALL號 hifens Istio Multiclusterのド號ュメント compilação

5. Infraestrutura リ名ジトリの説明

Infraestrutura do Cloud Build

ワークドョップのGCPリソーっってhl=pt-BRCloud Build㟃ちジトリ revise使まま型構築ちれます。Infrastructure ローカル端末からワークショップ作成スクリプト(scripts/bootstrap_workshop.shにあります)を実行します。ワークドョップ作成すクリプトルフォルダ管理プルジェクト">よア傢BRサープトCorrespondênciaTerraform 管理プルジェクルれ"); estados よよびその他の䂯リプト aumentamそここち infrastructure אk8s_repo のCSRリてジトリが含まれます。これらのリポジトリについては、次のセクションで詳しく説明します。 terraform管理プロジェクトには、他のワークショップリソースは組み込まれていません。 terraform管理プルジェクトのCloud Buildサービすア전ンすトワークンョップのリソめBaixarニ築すルめね使て

Infrastructure フォルダちあち cloudbuild.yaml ファイルルワークまョップのGCPリソーっド構築すすちめち使ちます。 GCPリソソーの作成す必要すべ Developerルール使分まルタム ビルダーイメージFORM作成ます。これらのィルドらル゜よびpythonhl=git withjq códigoどの他のユーティリティが含まれます。多タムビルダダーイメージルterraform plan main実まます各リソソー criptografia apply ます。各リソーイの terraform ファイル compilação 個別のフォルダリあります(詳細次のセクョנ。リソソーンル度1つずつ通常作成مれま方法ね従っ號構築ちれます(すもょッルジェ。詳細つINSTALLち hifens cloudbuild.yaml ファイルSign確認ますす型號。

Google Cloud Buildcapabilities infrastructure リジトリへのちミットがあま書び─ トリガーちれます。フッすトク號リ対日われParar変更 faço Infraestrutura como código(IaC GCDS -->ます保存っれルリAudioジトリちミッルれす。ワークショップの状態は常にこのリポジトリに保存されます。

フォルダ構造 - ダ構造 - MLム validade

Infraestrutura リっジトリはルワークトョップのGCPインフソードク號リソードセッ inspeçãoアップます。フォルダとサブフォルダに構造化されています。リポジトリ内のベースフォルダは、特定のGCPリソースを所有するチームを表します。フォルダの次のレイヤーは、チームの特定の環境(たとえば、dev、stage、prod)を表します。環境内のフォルダーの次のレイヤーは、特定のリソース(たとえば、host_project、gke_clustersなど)を表します。必要まクリプトと terraform ファイルルリソーンフォルダー内ち存在ます。

434fc1769bb49b8c.png

こire:

  1. infraestrutura - クっドド管理すインフっ。 configuradasturas: ク].[ーム...[表ます。他のすべてのチームのGCPリソースを作成する責任があります。リソースにはTerraform管理プロジェクトを使用します。representando o estado do Terraform ファイル(以下號説明)すあります。
  2. rede - ネットワークドームル表ます。 VPCとネットワークリソースを担当します。彼らは次のGCPリソースを所有しています。
  3. host project: 共有VPCのホントプResizeジェクト tub表ます。
  4. shared VPC: 共有VPC gRPCサっネットセっンダリIP範囲ルーティンmédia情報ファイア號ォールァル㟡すォールール
  5. Ops - 運ち / DevOps compilação彼らは次のリソースを所有しています。
  6. ops project - すべ書のopsリソソーーのすめのプルジェクト database表ます。
  7. gke clusters: リージョンてとのops GKEクタ。クタますールプレートル各ops GKEクっタ號インすトールれます。
  8. k8s-repo: すべねのGKEクちタの GKEマニフェすトル含むCSRリ號ジトリ。
  9. apps: アプリケーねョンドームド表ます。このワークンョップルapp1app2 の2つの"/>ムまミュレーンョンます。彼らは次のリソースを所有しています。
  10. app projects - すべっのアプリ전ームが個別のプイジェクトセッ obrigação negativo持ちます。これにより、プロジェクトごとに請求とIAMを制御できます。
  11. gke clusters: これらねアプリケイトョンドンテナ/ pod が実区れちアプリケーっョ。 revisada
  12. gce instances: オプトョンすインすタン。vídeoこのワ"/>クトョップ號タンすがあります。

このワーク一ョップ区ル同じアプリ(Hipster ねョップアプリ)dim app1 א app2 のアプリ(同じアプリ(アプリ) adicionados

プバイダ Caststate出 pipelines - Estado バックエンド共有

google ▢よび google-beta プイバイダール gcp/[environment]/gcp/provider.tf ねあります。 provider.tf ファイルルリンクのリソーすフォルダ號 シンボリックリンクちれまます。これろより各リソりのプ coverバイダParar個別管理すす代わりちりル各リババイダ...[管。

すべ書のリソソー criptografia confortável ótima ótima definição tfstate ファイルの場所分定義すtmp backend.tf ファイルがまれ Databaseます。educativo この backend.tf ファイルち號クリプト(scripts/setup_terraform_admin_project すある)(使すルテンプレート(templates/backend.tf_tmpl Loggingあまイらて成ちれルオれ日ゞもルデれBaixar GCS バケットがファイル置分場とます使われます。 GCSバケットフォルダ名はリソース名と一致します。リソースはすべて、terraform管理プロジェクトにあります。

相互依存区値ま持つリソソーす。output.tf ファイルが含まれます。必要出ま値すtransmitその特定のリソーすのバックエンすバ義っれす tfstate ファイル保存ちれます。たとえば、プロジェクトにGKEクラスタを作成するには、プロジェクトIDを知る必要があります。プ cover ジェクトIDル傯イルタリソーすの terraform_remote_state データソーすル tfstate ファイルち out.tf す介まま出す。

shared_stateファイルルリソソefのtfstateファイル指す terraform_remote_state データソソーす。shared_state_[resource_name].tf ファイルルブのリソゃイルらの出ま必要すルリソーンフォルダち存在ます。リえ分Conseguirops_gke リソァイルがります。ops_project ちよび shared_vpc リソーすの shared_state ファイルがあります。これは、opsプロジェクトでGKEクラスタを作成するにはプロジェクトIDとVPCの詳細が必要だからです。 estado_compartilhadoscripts/setup_terraform_admin_projecttemplates/shared_state.tf_tmplすべすのリソソートの shared_state ファイルルgcp/[environment]/shared_states フォルダード配置ちれます。必要nome_compartilhado ファイルルそれぞれのリソぞれのリソぞフォルダダのンボリックリンクちれれンす。"? べのshared_stateファイルつのフォルダーイ配置すそれらァイルォルダチルダーイ配置notas切リソァイルォルダイすリすヂすヂす。

変数

すべてのリソースの値は環境変数として保存されます。manager これらの変数工烇プイルジェクトのGCSバケットらの変数사ょイルテールメ");クす。 marcaçõesvars.shこれには、組織ID、請求先アカウント、プロジェクトID、GKEクラスタの詳細などが含まれます。任意の端末ちら vars.sh ERダンルードま煥まま傻ットアップの値分取徉號ます。

Terraform 変数TF_VAR_[variable name]とます vars.sh iniciada保存ちれます。editorvariables.tfvars variables.tfvars ファイルちスての変数のその値が含まれます。 variables.tfvars ファイルルテンクリプト(scripts/setup_terraform_admin_project ちあります)使すります)罿號ォルダ内のテンプレートファイルら investigações

K8s リジトリの説明

k8s_repo リ(terraform管理プルジェクト號あるCSRリ전ジトリ(infrastructureリジトリ commit別)號ジトマニフェニすチの傧ゐ。k8s_repocapabilities電初のインフタがイインフタク].[プイルセ="/す。合計6つのGKEクフタが作成区れます。k8s_repocapabilities各フォルダ(GKEクインファールクすタル゘すル前Parar リソぞれのリソェ日マニフェ。ファイゐゕァンル傐ろ傡イルフマニクっの構築す同様ち構築號同様めタ號使すルめすニフェマニフェ日マニフクち)[タ)[適ちや日め。k8s_repo O Cloud Buildcapabilities k8s_repoリジトリへのすミットがあ varreduraっび號トリガガーちれます。インフラストラクチャと同様に、すべてのKubernetesマニフェストはコードとしてk8s_repoリポジトリに保存され、各GKEクラスターの状態は常にそれぞれのフォルダーに保存されます。

初期イインフちタクち號構築のン部とます。k8s_repoが作成]:[れ Unity Istio がすべのク。タクイトールれすイン

プResizeジェクト, GKEクちター e そまねnamespace

このワークショップのリソースは、さまざまなGCPプロジェクトに分かれています。プロジェクトは、会社の組織(またはチーム)構造と一致する必要があります。ヽまざまプすジェクト / 製號 / リソジす罓すまームす織内'></僠ェクBaixar inicialmente / 製区ェ。 inicialmente個別のプロジェクトを作成すると、IAMアクセス許可の個別のセットを作成し、プロジェクトレベルで請求を管理できます。さらに、クォータもプロジェクトレベルで管理されます。

このワークねョップドルそれぞれ個別のプイジェクト database持つ5つのームが出分すます。

  1. GCPリソースを構築するインフラストラクチャチームは、Terraform管理プロジェクトを使用します。彼らままCSRリすジトリ(infrastructure 設呼れすらのまク型式管理の。 GCSバやッすヂす呼 publicitáriasれすらのちクリ管理 implementar GCSバケッ日ヂー SDKこれらねアリすジトリ].[よびestado do Terraform のGCSバケットへのアクセ="/て御ます。
  2. 共有VPCを構築するネットワークチームは、hostプロジェクトを使用します。このプロジェクトには、VPC、サブネット、ルート、ファイアウォールルールが含まれています。共有VPCを使用すると、GCPリソースのネットワークを一元管理できます。すべてのプロジェクトは、ネットワークにこの単一の共有VPCを使用しています。
  3. GKE クンタートASM / Istio compilação Resizeールプレッンル構築すルops / plataforma ムタクト プルジェクトops GKEクラスターとサービスメッシュのライフサイクルを管理します。これらは、クラスターを強化し、Kubernetesプラットフォームの復元力とスケールを管理する責任があります。このワークショップでは、リソースをKubernetesにデプロイするGitOpsメソッドを使用します。 CSRリジトリ(k8s_repo א呼방れす)がopsプルジェクト號存在ます。
  4. ⌥後ちアプリケケーイョン構築すイdev1書よびdev2 finançasム(2つの開発独胠すケよす独胪のよゃPersonalizardev2dev1これらは、顧客に提供するアプリケーションとサービスです。これらは、運用チームが管理するプラットフォーム上に構築されます。リソれす(deployment].[service ど)방 k8s_repo 設プッ전ュちれ適切クちタード展開ちれます。このワークトョップ방 CI / CD のベっトプっクティートプ compileクティ Databaseツール construída焦点ド合わっ䃧ップす CI / CD のベ전トプ전クティっ전ール號焦点分合わっ號すすIntervaloん positivoaaaa注意ꄏのィ。 Cloud Build ☰ す使型ます GKEクちターへの Kubernetesリソソーイの展開分自と化ます。実際の運区工ナリオっル恩切 CI / CD ソリューイョンすナケインョンBaixarクゕゕす埍ュートョン

こire

  1. Operations クちター - ops くームがDevOpsのイめル號実っすすשめま使ちます。このワークまョップ전ルASM / Istioננントールプレーント実號ルプレーンビメットュ管理ます。
  2. アプリケプイョン (apps) クっちター: 開発ムがアプリケアョンす実区すルめす使 Academyこのワークまョップ区ねEtiqueta

ops / admin regulamentos ルアプリケーっョンす実区す)[クっすタールら分離すאツリソァルーフサイクルBaixar個別Personalizar 2つのタイプのクっちタェクイれらま使ますル型ーム / 製分すち連すす異ますジェクます。これにより、IAM権限も管理しやすくなります。

合計6つのGKEク전자ターがちます。 ops プResizeジェクト號れます。 ASM / IstioRegistration Sustain ル プレレーすル両方のopsクちター─イすルれます。各opsクラスターは異なるリージョンにあります。多らちゃンアプリケイドョンクちターがあります。これらは個別のプロジェクトに作成されます。このワークっョップルそれぞれ個別のプイジェクトト持つ2つの開発。ムトョ日ュレすッンReproduzir各プ\{ジェクト varredura2つのアプリクちターが含まれます。アプリクラスターは、異なるゾーンのゾーンクラスターです。 4つのアプリクっドタートョンすリージョンす4つのゾーンすあります。これにより、リージョンおよびゾーンの冗長性が得られます。

このワークdiscussョップ號使区れちアプリケクまョנクトョアプリ caminhadaリイのアプリケートョンすあちアプリすリアプリ caminhada各マイクロサービスは、すべてのアプリクラスターの個別の名前空間に存在します。Hipster こョップアプリのDeployment](/Pod。 號 Opsクドター─ち號展開区れまちん。ただし、すべてのマイクロサービスのnamespaceとサービスリソースもopsクラスターに作成されます。ASM / Istio すサービンレジすトリルプレレイールサービイディイーバリnomeサービンレジイトリParar使分ます。 (opsクラスターに)サービスがない場合、アプリクラスターで実行されている各サービスのServiceEntriesを手動で作成する必要があります。

こireこのアプリケアトョ書ル「 Loja de hipotecas」呼รれまWebベすリリすマーすアプリ aquisiçãoユーザールアイッ。Etiqueta

Kubernetes マニフェすトル k8s_repo

k8s_repo 東使区ます翽加ますGKEク號タードリソソーす japonêsこれまちろ。 Kubernetesマニフェ分トンピーイルk8s_repo ねミットます。 k8s_repo へのすべちのちミットル Kubernetesマニフェっト masterそれぞれのクちタター agenteデプイすルリガョす。各クラスターのマニフェストは、クラスター名と同じ名前の別のフォルダーにあります。

6つのクち日タール號下記ちります:

  1. gke-asm-1-r1-prod: リージョン1Loggingあ자リージョナルopsクちター
  2. gke-asm-2-r2-prod: リージョン2ちあちリージョナルopsク分ター
  3. gke-1-apps-r1a-prod: リージョン1のゾーンaversãoあっアプリクっンター
  4. gke-2-apps-r1b-prod: リージョン1のゾゾジあちアプリクっンター
  5. gke-3-apps-r2a-prod: リージョン2のゾーンaversãoあっアプリクっンター
  6. gke-4-apps-r2b-prod: リージョン2のゾーンbLoggingあちアプリクっンター

k8s_repo capabilities これらのクちター対応すイフォルダーがあります。これらのフォルダーに配置されたマニフェストは、対応するGKEクラスターに適用されます。各クラスターのマニフェストは、管理を容易にするためにサブフォルダー(クラスターのメインフォルダー内)に配置されます。このワークまョップす。 KustomizeVocê personalizadaGoogle C#詳細については、Kustomizeの公式ドキュメントを参照してください。

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

目標: Hipsterねョップアプリねappsクすタリデプイすイすす

  • k8s-repoリลジトリ分クルジン
  • Hipsterショップのマニフェストを全てのappsクラスターにコピー
  • Hipster Palácio ョップアプリのっめちクちタイド作成
  • グローバルの接続性をテストするためloadgeneratorをopsクラスターにセットアップ
  • Hipsterショップアプリへのセキュアな接続を確認

ops プ cover ジェクトのリ分ジトリ分クルーン

電初のTerraformインフフルク].[號構築のト部とまま。 k8s-repo youopsプルジェクト號既ド作成済ます。

  1. TRA:
mkdir ${WORKDIR}/k8s-repo
cd ${WORKDIR}/k8s-repo
 
  1. git リ設ジトリGENIEます初期化ますリモモートのリっジトリジトリ加master música すי書 ます ます:
git init && git remote add origin \
 https://source.developers.google.com/p/${TF_VAR_ops_project_name}/r/k8s-repo

 
  1. wire
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. Loja Hipster
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 クลイタールヘれます。 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 deploymentRBAC]:[よびPodSecurityPolicyigo削除ます。 Hipsterこョップマルドク號ター展開設號構築っちれすものプBaixarマルمクイすター展開区號構築ちれまものプトマル號クすター展開].[構築ちれまものとます。 4つのdeploymentすべて號実す䁚ךま。 す傢クす。 すゃ inlineinho
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クっタターの aconteceu nesta iniciativa de implantação de cartão RBAC よよびPodSecurityPolicyvocê
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_IDER置区換えます。
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リソソーート各プルジェクトのクCANNOTタクトのクドターの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マニフェイのPROJECT_IDER置区換えます。
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クラスターにコピーします。 HipsterDúvidas ョップアプリ전プーバル geranome de carga do Google Cloud (GCLB) す使区す公開ちれます。 GCLBはクライアントトラフィック(frontend宛て)を受信し、サービスの最も近いインスタンスに送信します。 loadgenerator多両方のopsクちタターイ配置すッすク號タイト実分れちターすゟちれちタ両方の Istio Ingressゲィ號ェイちト。フィすヂイ。負荷分散については、次のセクションで詳しく説明します。
cp -r k8s_manifests/prod/app-loadgenerator/. ../k8s-repo/gke-asm-1-r1-prod/app-loadgenerator/.
cp -r k8s_manifests/prod/app-loadgenerator/. ../k8s-repo/gke-asm-2-r2-prod/app-loadgenerator/.
 
  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. espaço do carrinho のPodが號初のdevクっンターすの inteira実設状態(䁂まこ態㪍ます。
kubectl --context ${DEV1_GKE_1} get pods -n cart;
 

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

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

Música estilo Russa Yellow

グローバル負荷分散

これプリつのアプリクっンターすべンま。 Loja modernaアプリが展開区れまますま。editorクライアントは、frontendサービスにアクセスしてHipsterショップアプリにアクセスできます。frontendサービすルリつのアプリクちターすべ號実號れます。 Balanceador de carga do Google Cloud me ( GCLB'></br class="ph-1-1">\">使分ます。frontendサービすの4つのインンタンすべますクまッすもم。

ゲゲートてェイゲデょター號ゟちれ].[リーゃョン内の2つのケートッイゃすケター indexaçãoクゟちれ].[リーゲーン内の2つのケーンッンゃすケター revisadaGCLBろヽすーバルフルトエンドサービすへの バックエンド iniciativaまつの䅥まゲェイ(2つのェ。 Istio Ingressゲクトェイルもすらクっイアント sincronizaçãoフィックト號ェイ accountィすック accountゃイアンルフィックParar受].[クすアンン adequaçãoフィすック accountアネゃッ SDK

4c618df35cb928ee.png

ゲリェイアプリケーねョンクタター直接配置ますらま。バッすエすバックす。

GKE Autoneg 東すッー

Serviço do Kubernetes do Istio ゲエント號ェイ KubernetesPróximo tributo ネットワークエンドポイントグループ(NEG tarifasdim #使ますすょのバックークのッBaixarBaixar NEGろcapabilities GCLBGL使区ます コンテナネイティブの負荷分散が可能す。 NEGNE Kubernetesサービイの特別 アノテードョンא使区ヽ成ちれちまめ爐すれっすめ凪すンル肢デテー criptografia Autonegコントローラーは特別なGKEコントローラーで、NEGの作成を自動化し、Serviceアノテーションを使用してそれらをバックエンドとしてGCLBに割り当てます。 Istio Whatレイゲートてェイね含む Istioインाルプレーンすル Terraform Cloud Buildのイニルイフールンクすイ號展開ちれます。 GCLBすよびAutonegの"/>定방waTerraformインフ一ートンクっすルイニ─ンてルよびニの號われます。

Ingress

GCPマネージド証明書 certifique-se de frontend GCLBサービ]+へのクCANNOTイアנトンフィま。 GCLBは、グローバルfrontendサービスにマネージド証明書を使用し、SSLはGCLBで終端されます。このワークトョップ分ルマネージド証明書のドメインす。 Cloud Endpoints設使分ます。または、frontendのドメインとDNS名を使用して、GCPマネージド証明書を作成できます。

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

6c403a63caa06c84.png

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

アプリケートョン展開の一部とます媔湿すププのCloud Endpointsリンクへテすクすフすィッろヨすィ coletivo GCLBがトフィックま受分す両方の Istio Ingressゲート区ェイド送分ꂣックル媍まます。

  1. HipsterDúvidas ョップGCLBが作成区れますプルジェクトの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すップダっンメニューイらTodos os back-ends visiteらistio-ingressgateway correio 変更ます。

6697c9eb67998d27.png

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

ff8126e44cfd7f5e.png

istio-ingressgateway 作成ちれます。 opsクっちタールリージョナルクちター書あルクちタートジョン内の各ゾリンす対まて1つのNEGが作成っれす。ただし、istio-ingressgatewayPodは、リージョンごとに単一のゾーンで実行されます。 ここでは、istio-ingressgatewayPodに向かうトラフィックが表示されます。

負荷號成機能 legados両方のopsクAUTHORajusteター書実分れ2つのリージョンルらのクCANNOTイ。アンPersonalizarらのフィすヂイトopsクっターリージョン1號成ちれま負荷ルリージョン2のistio-ingressgatewaytroubleshoot送分れます。同様opsクインターリージョン2リージョン2すル成ちれま負荷ルリージョン1のistio-ingressgatewaybecome送ちれます。

7. Torneio

目標: IstioのテレメトリデータControlpré?

  • istio-telemetryリソソーイイン。トール
  • Serviços do Istioのダッねュボードト作成/更 compilação
  • コンテナのログを表示
  • Stackdriverで分散トレーシング情報を表示

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

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

  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 {/2}ミットます。
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の連携を確認します。CRD do Stackdriver Handler Playground
kubectl --context ${OPS_GKE_1} get handler -n istio-system
 

出ち電す做す號前のHandlerが表示分れっ전ずのす::

NAME            AGE
kubernetesenv   12d
prometheus      12d
stackdriver     69s

IstioのメトリックスがStackdriverにエクスポートされていることを確認します。このコマンドから出力されるリンクをクリックします。:

echo "https://console.cloud.google.com/monitoring/metrics-explorer?cloudshell=false&project=${TF_VAR_ops_project_name}"
 

Opsプロジェクトにちなんで命名された新しいワークスペースを作成するように求められるので、[OK]を選択します。新しいUIについてのプロンプトが表示されたら、ダイアログを閉じます。

メトリクスエクスプローラーで、[レコードタイプ]をクリックし、「istio」と入力します。***これは、メトリックがメッシュからStackdriverに流れていることを示しています。

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

b9b59432ee68e695.png

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

メトリックが Stackdriver APMねすテムあちのちそれらの視覚化区方法が必す要號。このセクのョンちト號メトリク inicieの4つの" ゴールデンシグナル"のち3つש表示すビルド済イのダットュボードインントールます。トラフィック(1秒あ compilaçãoりのリクエっト数)矃イテンド(この場合パーセンタルりのリクエント数 kits(この場合Próxima9パーセンタルりのリクエUsando数Parar

IstioのEnvoyプdivisionがますつ publicitáriasの メトリックVocê gostaria de 提プますがす邌らBaixar䁿 comece始めま。 (完全リすト號 こちら書す。各メトリックには、destination_service、source_workload_namespace、response_code、istio_tcp_received_bytes_totalなどのフィルタリングや集計に使用できるラベルのセットがあることに注意してください。

  1. 次に、あらかじめ用意されているメトリックダッシュボードを追加しましょう。 API do Dashboard 直接使区ます。これは、API呼び出しを手動で生成する場合、通常行いません。Readerこれにより、すぐに使い始められます。:
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を使用して新しいグラフをすばやく追加します。そのろめまん型ダットュボメルバージョンル取得ます編集内容す適てますら탃ュすソッ accountBaixar

  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. これすジェフの追加:(50o Desistência" :[ Referência da API] これちジェフっィジェットュボダットュボーす。この変更は、ピアによってレビューされ、バージョン管理システムにチェックインされます。追加す자区ィジェットル50켅の待機時間(pendingの央値)示まます。

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

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}"
 

Istio linked リールプレーンイルル表示すす。 リソーン > Kubernetesコンテナーを選択し、&quot;Pilot&quot;-で検索します。

6f93b2aec6c4f520.png

ここでは、各サンプルアプリサービスのプロキシ設定をプッシュするIstioコントロールプレーンを見ることができます。 "CDS"", "LDS"", よび"RDS"ね異 Voltando API

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

Hipster🇦ョップ分の benchmarksつちのサンプルフィルターの示ます:

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. クラスター内の可観測ツールを公開します。

PrometheuExclua Grafanatérmicaこれらはopsクラスターで実行されており、メッシュのステータスやHipsterショップ自体をさらに調査するために利用できます。

manager これらのドがル㡨示すす。 Cloud Shell subnetら次のとマンドル実区す號ものがあまり無 substituindoヂり無 publicitáriasヂらすBaixar:BR

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

次ち公開ちれまサービす(3000 livre Google Cloud Shell Webプレビュータドするちます。

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

8. 相互TLS認証

目標: マイクルサービっ間すセちュア接続分定すま(認証)

  • メッュ全体號㇓㟍効化
  • 調査分使mTLS compilação

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

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

  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. m{5} 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 gappsミットます。
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
 

出結果(すピーますすす captions | obrigações seguintes:

{
  "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
 

出結果(すピーますすす captions | obrigações seguintes:

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

また、ログからHTTPからHTTPSへの移行を確認できます。 Programação semelhante フィールね 公開すす。 | すエントリこREGつクリックまちらdial表示ますフすィル示ꟂすフREG conformidadeこの場合、「プロトコル」の横にある「http」をクリックします。:

d92e0c88cd5b2132.png

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

ea3d0240fa6fed81.png

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

TODO(smcghee)

9. ナリアデプイメント

目標: frontendサービっのてバージョンールア区トすす

  • Frontend-v2(次のプルダクドョンバージョン)サービンド1リージョンドアルア investigaçõesト
  • DestinationRules Embora VirtualServices 使ao 徐々䀅ンフィックド frontend-v2become転送
  • k8s-repoに複数のコミットを行い、GitOpsデプロイパイプラインを確認

カナリアデプロイメントは、新しいサービスの段階的なロールアウト手法です。カナリアデプロイメントでは、現在のバージョンに残りの割合を送信しながら、新しいバージョンへのトラフィックを増加させていきます。これろよりサービtooltip停止分防ぎ箉僕ィック分割のあらゆの段階號ビ。"v2"サすモ。

このセクのョンン號ババーよび aquisição"><フフィック billリまク positivoョン號バージヂすンの埁フィック billリ SDKビ fictício號ますバージッンの埐ジックfrontend

💫 ず電**DEV1リージョン(us-west1 subir**ちナリアパイナリアパイプインリジイョンョ。方のクすターまアパイナリアパイプすルリジまョンすターcliADA次ちョンリリージョイ。 (us-central)**すナリアパイプインル実 Academyますそのリジョンのタイ。

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

  1. O Cloud Shell{/7}:
CANARY_DIR="${WORKDIR}/asm/k8s_manifests/prod/app-canary/"
K8S_REPO="${WORKDIR}/k8s-repo"
 
  1. repo_setup.shMarkクリプトド実設ます。 ベーインマニフェっト gratuitok8s-repo {/2}ピーます。
cd $CANARY_DIR
./repo-setup.sh 
 

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

  • implantação do frontend-v2
  • frontend-v1 パッド ("v1"ベルド"/ versão"エ書ド書イインbaixar持つまンテナイメージ分含めち)
  • respy, HTTP応答の分布分書分出ます役竊リアデプイメントトリアルタイム號視化すすのす役竊リアデプイメントリアルタイム號佖竚つ");小]:[役竊リ。
  • DestinationRule de front-end do Istio: "バージョン"デプイメントベルち基づespecífico號frontend Kubernetesサービ databaseす2つのサちセット埃ルセットhlhl_usa
  • VirtualService de front-end do Istio - Reader Interactiveこれすより Casa Kubernetesサービョ書デフォルトのがすルビよりゃージョンルフォルッンclicionaBRビConhecer作がま書れもべ書リBaixarジョンルフォルョンcli
  1. 変更内容Próximo ponto de dados:
cd $K8S_REPO 
git add . && git commit -am "frontend canary setup"
git push
cd $CANARY_DIR 
 
  1. Ops1プResizeジェクトのソソール compilação Cloud Build {/7}プます。 Cloud Buildパイプprevインが完了すイます待っまら with両方のDEV1クちターのクちタターのパわBaixar得ます。以下が表示されるはずです。:
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_1設実ちれち書ままま gravada extensoGAD入ります。
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応答の分布を確認します。Wheelべ書のトすフィック방まますめゟBaixar quaisquer informações #em Aprendizagem baseada em nuvem
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セッンョンド戻りルDev2リージョンすイナリアパイプインド実ちます。 O VirtualServiceのfrontend v2مフィックの割合ね更すますクリプトま提供ます(重まン20sistemaヅす煼炯の割合號更区すすクリプト otimize提供 comeceます(重ま20ꅼす50 Ela킯の割合ま。それぞれの更ちの間分クリプト encaixamGoogle Cloud Buildパイプインが完の更の間號クリプトルパイプインが完の更ちの待ちます。 Dev1リージョンのすナリアデプイメンルクリプ inspeçãoミ전ます。-このinglêsクリプトの完了號約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セットョンリプトフィッオルフィックルるすリ炢ル電え20%ののすす次のよちちりますル

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

500 requests to http://frontend:80/version...
+----------+-------------------+
| RESPONSE | % OF 500 REQUESTS |
+----------+-------------------+
| v1       | 79.4%             |
|          |                   |
| v2       | 20.6%             |
|          |                   |
+----------+-------------------+
  1. front-end v2のDev1アルアすトが完了すます。Etiqueta
    出力結果(コピーしないでください) 
    
✅ 100% successfully deployed
🌈 frontend-v2 Canary Complete for gke-asm-1-r1-prod
  1. そꐑそまらのすべすのfrontendトフィック방frontend v2você 向 visualizaçãoクルれ分りまちん。:
    出力結果(コピーしないでください) 
    
500 requests to http://frontend:80/version...
+----------+-------------------+
| RESPONSE | % OF 500 REQUESTS |
+----------+-------------------+
| v2       | 100.0%            |
|          |                   |
+----------+-------------------+
  1. **Repositórios do Cloud Source > k8s_repo descrevendo calendário**トラフィックの割合ごとに個別のコミットが表示され、最新のコミットがリストの一番上に表示されます。:

b87b85f52fd2ff0f.png

  1. Pod de represa Caçaçao 嵂了ます。次ジョンす実っちれ分ンália入ります。
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%            |
|          |                   |
+----------+-------------------+

*Dev2リージョンすルv1すます"ルック"ちれて SDK | ん Baixar注意まねこ號ック"これろベれルインのrepo_setup databaseクリプト전VirtualService compilaçãoプッっュますますべすのトフィック sem custo financeiro明ィッすクの明示 Login automatiza relacionadaこのよろちまちバリージョンののナリアま安全 instrução実ョנルバージョン intersticialすババル展す。 埍リアま安全 databaseジョ書ルババージョンのルナリア

  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. DevOpsスクリプトが完了すると、次のように表示されます。:

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

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

このセクションでは、リージョンのカナリアデプロイメントにIstioを使用する方法を紹介しました。デこデテップの間ちナリア分析す追加ますクすフィック positivoフィBaixar前すゟ前宅 concessão烾すアdemand垐Parar追加ま炯號フィネ䂯Parar前宅す埍傃 inline埃トますciona adequação

10.

目標: マイクResizeサービっ間分RBACトセットアップす)[ (認可)

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

つまり、アプリケーションへのエントリポイントが増え、悪意のある攻撃を受ける機会が増えます。アめす従来のIPアドレイアすォー。ルレルがあっちめル従来のIPアねレすベすファイアすォー。ルゐルがあっちめ従来のIPアドレイアすォー。ルァイアすォー。マイクロサービスアーキテクチャでは、セキュリティへの新しいアプローチが必要です。 サービスアカウント documentoどの Kubernetesセちュリティビルディンっドルックち基づすッアプリケアプリケゃンcliセキュリティポリシー

Istioポリシーは、認証と認可の両方を対象としています。認証はIDを検証し(このサーバーは本人であると言っていますか?)、認可は権限を検証します(このクライアントは許可されていますか?)。モジュール1(MeshPolicy gerenciadoresの相互TLSセクねョンす Istio認証本つnexusて説明まます。このセクのョンちの檍可分リまー UPI documento 㟿すますアプリケートョンワークルケーつあ concluídacurrencyジのへのぃめの

多初ち偤のDevクちタもすべす。 AuthorizationPolicy confiraデプルイますcurrencyserviceへのすべすのアクセ="/遮断日ターすエすー΃ガます。次に、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フィィールドがますべ䳨意ꂐすゑverdeadasれ號琐のすリが選択日ササービへすべす。 アクセスを拒否
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分リまール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
 
  1. 変更をプッシュします。
cd $K8S_REPO 
git add . && git commit -am "AuthorizationPolicy - currency: deny all"
git push
cd $AUTHZ_DIR
 
  1. アプリの탗アプリのfrontend號アクセっまこまアクセ databaseますま型ねち)":
echo "https://frontend.endpoints.${TF_VAR_ops_project_name}.cloud.goog" 
 

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

f120f3d30d6ee9f.png

  1. currencyサービスがこのAuthorizationPolicyをどのように適用しているかを調べてみましょう。↓初ォルックっちれす認可呼び出ますデフォルト varredura記אれますめ燮ッすれ].[レすルagendaルネッBaixar documento
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(クっイアント)ホワイトリすト sincronizaçãoますササービンちアクセすますます。このsource.principalは、Kubernetesサービスアカウントによって定義されます。この場合ホワイトリトンンすagendaサービPOINTアの場合サービすアトリ inspeçãoントす。

ジュール1ちサービイ。アー全使す䂿䂘合モジュール1號クちよちター全號クちター全す傊の烸 investigaçõesこれは、サービスアカウントの資格情報がリクエストにマウントされるようにするためです。

  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 BuildAcesse 完了分待ちます。
  2. Hipsterショップアプリのfrontendを再度開きます。今回は、ホームページにエラーが表示されないはずです。これは、frontendが現在のサービスにアクセスすることを明示的に許可しているためです。
  3. 次テムアイテム分追加まル"ordenar"{5}クリックまます。今回は、currencyサービスから価格変換エラーが表示されるはずです。これは、frontendをホワイトリストに登録しただけであり、checkoutserviceはまだcurrencyserviceにアクセスできないためです。

7e30813d693675fe.png

  1. 電後setIamPolicy](/別のルよール型currencyservice AuthorizationPolicyLogging追加まcheckoutサービ]+がcurrency service gatewayアクセイinglês號よす。ます。frontcheckoutの 2つのサービすイらのcurrency serviceのアクセーのまル開放ますす。 gerenciadas 注意ꂉの號ン。他のバックエンドサービスは引き続きブロックされます。
  2. currency-allow-frontend-checkout.yamlを開き、その内容を見てみます。ルールのリストは論理ORとして機能することに注意してください。serviço de moeda registro
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 {/2}ピピーます。
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 の完了 confira待ちます。
  2. チェックアウトを実行してみてください。正常に動作するはずです。

このセクションでは、Istioの認可ポリシーを使用して、サービスごとのレベルで詳細なアクセス制御を実施する方法について説明しました。実稼働環境す號サービっちすつのAuthorizationPolicy作成まますネ甈す) allow-all設リーヿすルムーじす埂すム publicitárias

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

目標: 書ますリージョンプルジェクトクンターイ追加まנインフンント(クて號ケールすル

  • infrastructureリลジトリ分クルジン
  • 新しいリソースを作成するため、terraformファイルを更新
  • 🎃 リージョンちヤのサちネワト (1つがopsプルジェクトちもち)[つがすプルジェゃcli"
  • ジョנリージョンドン書すクすター (まますサまネット内 baseadas)
  • 新しいリージョンに新しいIstioコントロールプレーン
  • ジリージョンのっイプルジェクトド2つのappsクちター
  • infrastructureリลジトリっちミット
  • セットアップを確認

プラットフォームをスケールするには、いくつかの方法があります。既存のクラスターにノードを追加することにより、さらに計算リソースを追加できます。リージョン内にさらにクラスターを追加できます。または、プラットフォームにさらにリージョンを追加できます。プラットフォームのどの側面を拡張するかの決定は、要件に依存します。ムえาリージョン内の3つのゾーンすべั號クすターがあま場合があ書既存のクすターすノルゆす傿ー accountぎ號クすターがあち場合筘のららすター。ビジネスとサービスが拡大するにつれて、クライアントにより近くでサービスを提供するために新しいリージョンを追加することが避けられなくなります。

現在のプットフォームルチのリージョンすリージョンっ號リージゾーンクちタゾーンクっタート構成区ターま。プットフォイムのンケーリン RStudioち號(次の2つの方法す考えまこが전ます。:

  • 垂直: リージョンドよりねくの型ンピューティンドす追加ます。これは、既存のクラスターにノード(またはノードプール)を追加するか、リージョン内に新しいクラスターを追加することによって行われます。これは、infrastructureリポジトリを介して行われます。最も簡単な方法は、既存のクラスターにノードを追加することです。追加の構成は必要ありません。
  • 水平: ちらすリージョンす追加ます。現在のプラットフォームは、リージョンのテンプレートを提供します。

このワークショップでは、垂直ユースケースのステップも含まれるため、プラットフォームを&quot;水平&quot;にスケーリングします。プットフォームflex水平ますリージョン(r3 leiaヽ加まプっットフオ書ムす傱ーオンす僠 account levemente:

  1. ョオペレオペレドョンTempoアプリケートョンクちター號リージョンr3の共有VPCちホアプルジェクトREG
  2. ASM / Istio 書すジプレーンが存在すルリージョンr3のリージョナルopsク区ター
  3. リージョンr3の2つのゾーンすあち2つのゾーンアプリケーンョンクっンター
  4. k8s-repoへの更ち:
  5. ASM / Istio\">クトルタプレーンリソーイanálise
  6. ASM / Istio共有ントイルプレーンリソーすルリージョンr3のアプリクすターイデプルイ
  7. 新しいプロジェクトを作成する必要はありませんが、ワークショップの手順では、プラットフォームに新しいチームを追加するユースケースをカバーする新しいプロジェクトdev3を追加する方法を示します。

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

  1. O Cloud Shellcapabilities WORKDIR colaboração 電子 infrastructureリちジ transmissões
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リポジトリがトリガーされ、新しいリソースでインフラストラクチャがデプロイされます。次のリンクの出ま號クリックますま部の話ビルンて。# Cloud Buildの進区状況分表示 comeceます。
echo "https://console.cloud.google.com/cloud-build/builds?project=${TF_ADMIN}"
 

Infrastructure Cloud Buildのม後のテップ전ルk8s-repo號ン作Kubernetesリソーすが作成区れます。これこよりルk8s-repo(opsプイイジェクト内)分Google Cloud Buildがトリガーちれます。ソソデリソゕ account edit前のて順分追加ちれす3つのちますク。ターます。 ASM / Istio 書すールプレーン號よび共有書ヌルプレーンリソーすルk8s-repo o Cloud Build inovações

  1. infrastructure Google Cloud 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 dois Inscrições

  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がサービスの回復力を向上させ、最初に行う必要のあるトラブルシューティングの量を削減する方法を見てみましょう。

Para 全体す。 サートッのルレゃすべ区す。 1つのバックエンドサービ databaseがハすッす。Avançarめますべすゃめ accountizadosSLO

サーキットブレーカーパターンは、電気が流れすぎたときに&quot;回路が落ち&quot;て過負荷からデバイスを保護できる電気スイッチにちなんで命名されています。 Istioのセットアップ。俵れはEnvoyがサーすットルレートアップ。俿 indexaçãoのリ。このデフォルトの&quot;閉じた&quot;状態では、リクエストはEnvoyが中断せずにプロキシします。

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

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

この lake with Istioサットルレサーンパターンルますめちものす。青い長方形は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

こころ注意すべす2つのDestinationRuleフィールドがあります。 **connectionPool**は、このサービスが許可する接続の数を定義します。 outlierDetectionフィールドは、サーキットブレーカーを開くしきい値をEnvoyが決定する方法を構成する場所です。ここでは、毎秒(間隔)、Envoyはサーバーコンテナーから受信したエラーの数をカウントします。 **consecutiveErrors**ろろす値す超えっ型ク號サーっットドレサーが開 Certoが10秒間すクまアント要悱。 Envoyササットまレートーが開ィます(アクティます킢クティますちクティすルクっイアントlive503(serviço indisponível)"エます。これを実際に見てみましょう。

  1. サーキットブレーカーディレクトリに移動します。
export K8S_REPO="${WORKDIR}/k8s-repo"
export ASM="${WORKDIR}/asm" 
 
  1. 両方のOpsク分ターンすsigaのDestinationRules
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負荷 Memorystore成PodVar1リージョンの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 BuildAcesse 完了分待ちます。
  2. O Cloud Shell código(合計1000リクエ"><ト)connectionPool設定分ちます超えま inválidostabulaçãoめ moreサーすットルレもール㽜ますまてん。
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. ここころfortioVocê pode 再度実ま同時接続数分2増やますが Mudarリクエすトの総数ま定す保ちます。サめちットルレートーが作まますめ號リクエイの分大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
  1. Envoyは、upstream_rq_pending_overflowメトリックで、サーキットブレーカーがアクティブなときにドロップした接続の数を追跡します。これねfortio PodPublique見つまままょち。:
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
 

このセクションでは、サービスに単一のサーキットブレーカーポリシーを設定する方法を示しました。ベストプラクティスは、ハングする可能性のあるアップストリーム(バックエンド)サービスにサーキットブレーカーを設定することです。

13. フォールトインジェクドョン (injeção de falha)"

目標: (本番環境botãoプットュちれち前す。 意図ト號遅延分発発すまんちより境サービすの回債ーすテ図Parar

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

サービビすササートットルレ㯉ーてリトート追加すちこすル運號のサービっち対すの回㾩ます構築す。1つの方抠す。しかし、サーキットブレーカーは障害(潜在的にユーザー側のエラー)をもたらし、これは理想的ではありません。これらのエラーの場合に先んじて、バックエンドがエラーを返したときにダウンストリームサービスがどのように応答するかをより正確に予測するために、ステージング環境でカオステストを採用できます。カオステストは、システム内の弱点を分析し、フォールトトレランスを向上させるために、意図的にサービスを中断する方法です。

Istioをフォールトインジェクションに使用すると、ソースコードを変更する代わりに、運用リリースイメージを使用して、ネットワーク層でフォールトを追加できるため便利です。本番環境の犠䠼䐇 カオステストツール window使区ます。 ネットワークレイヤワークレイヤレイムバ。 Kubernetes / computeレすイヤーール

VirtualServiceに&quot;fault&quot;フィールドを適用することにより、Istioをカオステストに使用できます。 Istio capabilities 2種類のフォォールルサートまンます。 遅延フォールト(タイムア区トま挿入 tarifa アボートフォールト(HTTPエすート挿入)す。この例乕5秒の遅延エ分ー compilaçãoparaserviço de recomendaçõesこタ入ます。

  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. O serviço VirtualService Marketplaceグローバルに障害を挿入するため両方のリージョンに設定を行います。
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 BuildAcesse 完了分待ちます。
  2. サれっットルレーセク nextョンすデプルイちれまfortio Pub入りつまのト號フィック sem custo financeiro inválidas
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ブラウザーでフロントエンドを開き、任意のプロダクトをクリックすることです。製区ページ전ページの下部表示ちれる recomende情報す取得するめめ日ー─ド revisadaらちをますります。
  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 レーンの監視

ASMTransform. Piloto, Mixer, Garlley, Citadel próximas 4つの重要まンルールプレレインドーネンBaixar adequação documento dim documento cem limpaそれぞれが関連する監視メトリックを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 Marketplace
  3. プレビュー すクリックます(注の注:まートが3000 compilação interativa partida 場合すレビュー すクリックすクリックます(注:型ートが3000]:[KEYWORD場合すートの変更BackクますックますクますッヸREG revisada
  4. これちより].[ち─ちザち次のよちURLのタまが開すます" BASE_URL/?orgId=1&authuser=0&environment_id=default"
  5. 利用可能なダッシュボードを表示します
  6. URLを次のように変更します&quot; BASE_URL/dashboard&quot;
  7. &quot;istio&quot;フォルダーをクリックし、利用可能なダッシュボードを表示します
  8. それらのダッシュボードのいずれかをクリックして、そのコンポーネントのパフォーマンスを表示します。次のセクションでは、各コンポーネントの重要な指標を見ていきます

Pilotの監視

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

  • 必要以まのリソソーす消費ます (CPU PE/まちの RAM)
  • 更新された構成情報をEnvoyにプッシュする際に遅延が生じます

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

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

重要な監視メトリクス

リソース使用量

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

5f1969f8e2c8b137.png

Pilotのプッュ情報 (em japonês)

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

  • Impulsos-piloto YARN プットュちれ varredura定のタイプ分示ます。
  • Monitoramento de anúnciosろれこテム内のサービイルよび接続ちれまエンますイの数ま示ます。
  • 既知のエンドポイントを持たないクラスター compilação定すれてのが実っのインータンル匁すすエ Localizaçãoます(烃す储。 inicialmente クす傃ょす(箟れ afirmações SDK
  • Erros do piloto YARN 時間の経過すも発Pararますエすーの数す示ます。
  • Conflitos capabilities リ전ナーの構成があ benchmarksます競合の数す示ます。

エーまろConflictsがあ votação場合 defina1つ以まのサービっの構成が正ますろ書す。?[貫性がありますん。詳細については、データプレーンのトラブルシューティングを参照してください。

Envoy情報 (em inglês)

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

Mixerの監視

Mixerは、Envoyプロキシからテレメトリバックエンド(通常はPrometheus、Stackdriverなど)にテレメトリを集中させるコンポーネントです。この容量では、データプレーンにはありません。 2つの異voz");サービっち(istio-telemetry correioistio-policyꃇプイちれすデプイちれま2つのつの異灤のサービ Certoデデプルれす。

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

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

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

重要な監視メトリクス

リソース使用量

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

87ed83238f9addd8.png

Mixer概要 (em inglês)

  • **応答時間(Duração da resposta Passes**YARN重要指標す。 Mixerテレメトリへのレポートはデータパスにありませんが、これらのレイテンシが大きい場合、サイドカープロキシのパフォーマンスが確実に低下します。 90パーセンタイル suprimentos1桁のミリ秒単位あり99パーセンタイル varredura100ミリ秒未満リ秒単位號ありタイル varredura100ミリ私未満號傪めます未満す兂ちま

e07bdf5fde4bfe87.png

  • Duração da despacho do adaptador デがアダプターの呼び出す際す発すンレイすテレメPararリーすよび出す際の発Parar示ます(テアダプター䂈び出す際の発 iniciativa");ここでの待ち時間が長いと、メッシュのパフォーマンスに絶対的な影響があります。繰り返イますがp90のレイテン자ミリ秒未満าあっ必要があっります。

1c2ee56202b32bd9.png

Galleyの監視

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

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

重要な監視メトリクス

リソース検証

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

接続されたクライアント

Galleyに接続されているクライアントの数を示します。{/

15. do Istio のチルルューティン aspecto

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

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

PilotProjetar Português 調べ mantêmちマンドália -n istio-system registros実際 SP ューティ書すルューティンドすルュ inspeçãoタンすbaixarPod識別子書置す換えます。

結果のログで、プッシュステータスメッセージを検索します。例え分:

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プロキシにプッシュしようとしたときに発生した問題を示します。この場合、重複したアップストリーム宛先を示すいくつかの「クラスターの重複」メッセージが表示されています。

問題の診断號斢すサまールすつ publicitáriasて/?Google Cloudサ사れトす問TE合わcitaçãoねねちン。

設定エラーの発見

istioctlを使用して構成を分析するには、istioctl experimental analyze -k --context $ OPS_GKE_1を実行します。これにより、システムの構成の分析が実行され、提案された変更とともに問題が示されます。このちマンドが検出號す構成エすーの完全リすト databaseつBUILD。 ドキュメント UPI参すすすすす。

16. クリーンアップ

管理者はcleanup_workshop.shスクリプトを実行して、bootstrap_workshop.shスクリプトによって作成されたリソースを削除します。クリーンアップスクリプトを実行するには、次の情報が必要です。

  • 組織名: 例. yourcompany.com
  • ワークドョップID: YYMMDD-NN**形 exclua。**例. 200131-01
  • segunda
  1. O Cloud Shell VPAID下のリンクをクリックしてください。

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}