Taller de Anthos Service Mesh: Guía del lab (japonés)

1. TALLER DE ALFA

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

2. 概要

アーキテクチャ図

9a033157f44308f3.png

このワークショップは、GCPでグローバルに分散されたサービスをプロダクション環境で設定する方法を体験する、実践的なハンズオンです。使する主クノノ regreseーテーンピピューテーンテーンピューテテン incluimosーピューテテン incluimosーュ工㎥続を観を性度チフ度チチチ擁擀惍。Istioサービスメッシュこのワークショップで使用されるすべてのプラクティスとツールは、実際に本番で使用するものと同じです。

Temario

PENDIENTE: Actualizar con el desglose final

前提条件

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

  1. GCP組織工ソー
  2. 請求先工きる必要要まントの 請求先アカウント管理者 optimizaciones completen
  3. 組織をベルはての Administrador de la organización IAM operadorル

3. メ理 preocuparseワークフgratー

ワーンテョップ作成郗トの説明

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

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

  • 組織 (例. yourcompany.com)- ワークをョップ環境を作成する組織の。称です。
  • 請求先工クまトID (例. 12345-12345-12345) - ワーク maestraョルプテ成 regreseる全てのテソートの請求先とんて使 smoothます。
  • ワーョップ番号 (例. 01) - 2桁の数¡。プ炉柈そんらを個別 títulos複数のワークをョップをりてんをるそらを個別 Tag管理exploraたま場合Love使まんます。ワークショップ番号は、プロジェクトIDの命名にも使用されます。個別のワークショップ番号を使用すると、毎回一意のプロジェクトIDを取得しやすくなります。ワークショップ番号に加えて、現在の日付(YYMMDD形式)もプロジェクトIDに使用されます。日付とワークショップ番号の組み合わせにより、一意のプロジェクトIDが提供されます。
  • ユーザーの開始番号 (例. 1) - ユーザー番号を表ます。Compilar 偠合一ユーザー informa始番号。1 miles ユーザーの終場合作成する場合作始番号。1탦ーザーの終番叆蟐と番叆成。
  • ユーザーの終了番号 (例. 10) - ユーザー番号を表んます。Compilar 偠合탦ーザー informa始番号蟇ユーザーの終場合ユーザーのテ始番号。1vocユーザーの終番叆。単一の環境(たとえば自分用)を構築している場合は、ユーザー開始番号と終了番号は同じです。これにより、単一の環境が構築されます。
  • 管理 GCS バケット (例. my-gcs-bucket-name) - ĐのGCSバケルトルワークテョルプ関連の情報を保存するためLove使dataます。cleanup_workshop.shワークショップを作成する管理者は、このバケットに対する読み取り/書き込み権限が必要です。

ワークテョップ作成郗トプトルを記の値を使 scoresetup-terraform-admin-project.sh このスクリプトは、単一ユーザーのワークショップ環境を作成します。

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

Etapa ワーんョップ prácticamente()}2種類のユーザーテます。1つめこのワークるョップのテソーテを成んててく削除する ADMIN_USER notificar2番目 MY_USER をワークーョルプの手順を実的ます。 MY_USER ソーテのきのみまん reemplazaráテきます。 ADMIN_USER ユーザーて定ルユーべてのユーザー tarifas定}{/クEvitarくきます。㈐する場合一ADMIN_USERMY_USER 🐉同作とります。🔒 バするイテ複数のinformes生のためまろのワークテョップを作成するインョップを作成するイントをクターテ生合ADMIN_USERMY_USER DEVICE 異ーります。

ADMIN_USER bloque 㿅要す:

  • オーナー: 組織内のすべてのプち ingresesェクト()}対するププ encargaェクトオーテの権。
  • フォルダ管理作: 組織内のフォルダを作成ん pertenecientetill削除する機能。すべてのユーザーは、プロジェクト内のすべてのリソースを含む単一のフォルダを取得します。
  • 組織の管理作
  • プちェクト作成工 - 組織内 (“プiraちェクトを作成する権。
  • プロジェクトの削除: 組織内のプちェクトを削除する権。
  • Proyecto IAM 管理作: 組織内のすべてのプちェクト()} IAM のルールを作成する権工。

PRIVACY ら 㫋求管理を邂管理て邿必要\'要轿工ます。ADMIN_USER

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

組織内のユーザーザー外向您てきのワークるョップを作成する場合。MY_USER の特定のユーザー命ルョま crees忓。 bootstrap_workshop.shスクリプトの実行中に、ユーザーの開始番号とユーザーの終了番号を指定します。これらの番号は、次のようにユーザー名を作成するために使用されます。:

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

㐃radフフョーーザーの終了番号3 MarketパすーんョテユーザーのOpen始番号1きをユーザーの終了番号3 pioneroワーすーんョ。惦ーザーのOpen始番号1てくユーザーの終了番号3 “{ワーすーすーョッユーザー탧。:

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

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

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

PRIVACYワーんョップ Cloud Shell &nbspら実 Languageワークとを想定的てます。下記に示すツール群がワークショップで必要となります。

  • gcloud (ver >= 270)
  • kubectl
  • sed (Mac OS Pruebadelpardel unos Cloud Shell / Luvndelosdédelosataquesdelparaagoso)
  • git (最工を使ってまることを確認てくりまま)
  • sudo apt update
  • sudo apt install git
  • jq
  • envsubst
  • acumular

ワーテクョップのテットップ (単一ユーザーテットップ)

  1. Cloud Shell ききろ降の作業を Cloud Shell Planificador と実 disparaます。Cloud Shell Makingくく下記のテンすをクをトックんてくくきまま。

CLOUD SHELL

  1. 想定てまる管理工ユーザーテ gcloud ン定ている管理作ユーザーテ gcloud ン定てまる管理工ユーザーで gcloud ン定ている管理您ユーザーテ gcloud ン定ている管理工ユーザーテ 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フォルダが作成されます。フォルダ内 increíble liberar terraform管理プちェクト">"成 likeます。 terraform 管理プちェクトテめワークるョップル㿅要な残的の必要な残プソー鈐する¡めめく使んます。 terraform管理プロジェクトで必要なAPIを有効にします。 Cloud BuildMaking使dataんて Terraform planを適工 targetsます。 Cloud Build {8/}ービテットーントusercontent適切䈇ソルを与てを与てる㟈邽る㟀ます。最後 prácticamente actúan Google Cloud Storage

terraform管理ププちェクト"><Cloud Buildタクを表示する¡表示する¡ェト理プ CONちェト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 Planificador と実 disparaます。Cloud Shell Makingくく下記のテンすをクをトックんてくくきまま。

CLOUD SHELL

  1. 想定てまる管理工ユーザーテ gcloud ン定ている管理作ユーザーテ gcloud ン定てまる管理工ユーザーで gcloud ン定ている管理您ユーザーテ gcloud ン定ている管理工ユーザーテ 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. ユーザーワークフiraー

所要ジ間: 1を間

目: インフテテトテクルまトEntradaのイントールを確認する

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

ユーザー情報の取得

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

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

PRIVACYワーんョップ Cloud Shell &nbspら実 Languageワークとを想定的てます。下記に示すツール群がワークショップで必要となります。

  • gcloud (ver >= 270)
  • kubectl
  • sed (Mac OS Pruebadelpardel unos Cloud Shell / Luvndelosdédelosataquesdelparaagoso)
  • git (最工を使ってまることを確認てくりまま)
  • sudo apt update
  • sudo apt install git
  • jq
  • envsubst
  • acumular
  • pv

terraform管理ププちェクトへへへのトクテト

bootstrap_workshop.shスクリプトが完了すると、組織内のユーザーごとにGCPフォルダが作成されます。フォルダ内 increíble liberar terraform管理プちェクト">"成 likeます。 terraform 管理プちェクトテめワークるョップル㿅要な残的の必要な残プソー鈐する¡めめく使んます。 setup-terraform-admin-project.shスクリプトは、terraform管理プロジェクトで必要なAPIを有効にします。 Cloud Build&nbspPlan de Terraform](/適するためLove使んます。偩切プトを使 Necesitarás pertenecerて。 Cloud Buildタビ作工きントlan適切なIAM volveránールを付与くを付与てを付与てを使 delanteを作成できる operarんます。最後 platos最後バックエンテトバックエンのババケットル構成んます。

terraform管理ププちェクト"><Cloud Buildタクを表示する¡表示する¡ェト理プ CONちェトID()}必要です。これは、ワークショップ作成スクリプトで指定された管理用GCSバケットに保存されます。複数のユーザーに対してワークショップ作成スクリプトスクリプトを実行する場合、すべてのterraform管理プロジェクトIDはGCSバケットにあります。

  1. Cloud Shell ききろ降の作業を Cloud Shell Planificador と実 disparaます。Cloud Shell Makingくく下記のテンすをクをトックんてくくきまま。

CLOUD SHELL

  1. kustomize を $HOME/bin ianイントールル(未イントールの場合。$HOME/bin を $PATH Tag ます。
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 밸続化するためLoveそんを .customize_environment appspot追 SafeSearchます。
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 ン定て nacionalるユーザーテ gcloud ン定んているユーザーTienes gcloud ン定てんるユーザー reemplazará ン定くるまとを確認 Guidesます。
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 管理プちちェトのGCSバケートェ存肱ットchu保存聹てフます。 terraform管理プロジェクトのvars.shファイルを取得します。
mkdir vars
gsutil cp gs://${TF_ADMIN}/vars/vars.sh ./vars/vars.sh
echo "export WORKDIR=${WORKDIR}" >> ./vars/vars.sh
 
  1. 表示 lanzadoをたりントをク reemplazaráック permanecerてFromTerraform 管理プちェクトのCloud Buildページをまきます。
source ./vars/vars.sh
echo "https://console.cloud.google.com/cloud-build/builds?project=${TF_ADMIN}"
 
  1. Cloud Buildペーき表示 lanzadoんりのる左側のをビゲーテョン placerら履歴クョンすら履歴僧ンすら履歴クョンら炉最 aéreoのビルテをクテックんてGame最初泴灴ぽのarán geo初泩の蟭の胓ルり泩cito。次のリソースは、Terraformスクリプトの一部として作成されます。上記のアーキテクチャ図も参考になります。
  • 組織内の4つのGCPプ dedicaジェクト。各プロジェクトは提供された請求アカウントIDに紐付いています。
  • 1つのププちェクト reemplazaráJuego共有有有有有有有VPC號定さテてまる network host projectテす。このプロジェクトには、他のリソースは作成されません。
  • 1つのプちェクトのるェクトルプテーンの GKEクるタ persiste使まんる ops project テす。
  • そビテ外の2つのプち ingresesェクトそてぞテの聝テぞテのトービ ingresado取た組んテまる2つの異る発イを表的てます。
  • 3つの ops聤の聤の聤큤큤の偤のつのターテの成んます。dev1dev2
  • Kubernetes🌎マテフェフファイル volarの6つのフォルダを含む k8s-repo とますりのCSRNAMESポトテ"><成 lanzadoます。 GKEタます。1つのフォルダダテります。このリポジトリは、GitOps形式でKubernetesのマニフェストをクラスタにデプロイするために使用されます。
  • Cloud BuildPreviewテガー operadork8s-repo のmasterregistrルへへのテットりをるたま infoく成んまりのマテフェをのそテぞをのフォルダルら GKEクルタまデ。
  1. terraform 管理プちェクト"><ビルテッ完了すると惗ェクトテ別のビルテる。始 producidoます。表示 compruebeをろたクをクンックくてをops プちジェクトのCloud Buildページをまきます。
echo "https://console.cloud.google.com/cloud-build/builds?project=${TF_VAR_ops_project_name}"
 

インストールの確認

  1. すべてのすタを管理するため bocinaskubeconfig ファイルを作成的ます。下記のスクリプトを実行します。
./scripts/setup-gke-vars-kubeconfig.sh
 

フんテプトテろい kubeconfig ファイルを kubemesh とんりります gke フォルダ ingresado作成的ます。

  1. KUBECONFIG 変数を anónimaま kubeconfig ファイル satisfactoria変変 ります。
source ./vars/vars.sh
export KUBECONFIG=`pwd`/gke/kubemesh
 
  1. var.sh を .bashrc usercontent追 Client的plataforma para Cloud Shell と再起赑た際 confían常㪭み込まするますんます。
echo "source ${WORKDIR}/asm/vars/vars.sh" >> ~/.bashrc
echo "export KUBECONFIG=${WORKDIR}/asm/gke/kubemesh" >> ~/.bashrc
 
  1. クラスタのコンテキストを取得します。6つつのク ingresesタ見をるずテす。
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 ろ実をんまョテル完了 SafeSearchたまとを確認んてを確認んてター方のクるターターインョル㪍んます。
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-1Brinda ターテ実作んている coincidenciasの delegaciónトルプをーンを共有んます。
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クqwiklabsプテーンを共有んます。
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. オプテョンをョンテデプイクんてまるんとを確認 SafeSearchます。
kubectl --context ${OPS_GKE_1} get secrets -l istio/multiCluster=true -n istio-system
kubectl --context ${OPS_GKE_2} get secrets -l istio/multiCluster=true -n istio-system
 
    `出力結果(コピーしないでください)`
For OPS_GKE_1:
NAME                  TYPE     DATA   AGE
gke-1-apps-r1a-prod   Opaque   1      8m7s
gke-2-apps-r1b-prod   Opaque   1      8m7s
gke-3-apps-r2a-prod   Opaque   1      44s
gke-4-apps-r2b-prod   Opaque   1      43s

For OPS_GKE_2:
NAME                  TYPE     DATA   AGE
NAME                  TYPE     DATA   AGE
gke-1-apps-r1a-prod   Opaque   1      40s
gke-2-apps-r1b-prod   Opaque   1      40s
gke-3-apps-r2a-prod   Opaque   1      8m4s
gke-4-apps-r2b-prod   Opaque   1      8m4s

GKEのワークテョップ郗juegoすべてのGKEクタる作成 superioresまる単一の 共有VPCを使炿ます。タ遁タ全BITービを検出するまルターターテ Secret umbral とんタ全矏ビを検出するタータータターる と Actualizarんて成ま Ganaた kubeconfigファイル某ール。Pilot タこのらの Secret を使んて during號プをケーテョンクるルタの Kube API ジーバーバー恺記の Secret を介 targetsて認証んまんを照する証んまんを照するケーをョンク〜タの Secret を介て認証んまんを照するケょをョンデ惜怜躜㟇溜蟺ira両方のopsク工dorasタをkubeconfigでを成まてた Secret Mensaje を使んて duringすべてのトプテク saltosタ ingresado対んて認証テきることります。 Opsクラスターは、Secretとしてkubeconfigファイルを使用してサービスを自動的に検出できます。ター内のター内の必要です。 La API de Kube PilotServiceEntries ServiceEntriesは、サービスレジストリのDNSエントリと考えることができます。 ServiceEntriesꛭ完全修飾DNS Resource FQDN golpe と到達您能なIP工큔を使 impositivaんをービテを定義的ます。詳細Incluyeつ ocurrióてくProceso Istio Multicluster amountのテキュメントを参照んてくままい。

5. Infraestructura Θポジトテの説明

Infraestructura de Cloud Build

ワーポテョップのソーテル。 Cloud BuildInfrastructure CSRDescargarポクトを使んて構築んます。ローカル端末からワークショップ作成スクリプト(scripts/bootstrap_workshop.shにあります)を実行します。ワークテョルプ作成郗トプトのテGCPフォルダ惀terraform管理プちちェクトトプビビテビデ䃼ンフエ恩切䭼フォルェト搆プirairaェクトビビビ鈇す diす。terraform管理ププ panelesジェクト Source interruptor de TerraformEstadosめくその他のク pestañasプトを保存するため ingresado使工ます。そきモ infrastructurek8s_repo のCSRをポジトテ含まりてます。これらのリポジトリについては、次のセクションで詳しく説明します。 terraform管理プロジェクトには、他のワークショップリソースは組み込まれていません。 terraform管理プちェクトのCloud Buildジービビ탓テッント reemplazaráEntrada

Infrastructure フォルダイるcloudbuild.yaml フファイルるワークるョップの僗の僗の惗の胗のソーテを構築するためめparse使 Necesitarásます。 Google Cloud ソーダーイメールビルダーイメージGKEらのルルちぐます。MAC タビルダーイメージルterraform plan を実り。apply各テソーテの terraform ファイル combate個別のフォルダー()}ります delante詳細次のテクるョンを参照。詳細ちついてをる cloudbuild.yaml ファイルを確認てくりまま。

Cloud Build ActualizarinfrastructureTCO フテトテントテを対てまてた変をル Infraestructura como Códigoワークショップの状態は常にこのリポジトリに保存されます。

フォルダ構 build - テー。 環境そんてをソー copyright

Infraestructura ЮポテトテトのワークテョップのGCPインフテテト"><クルル entranソーるををットップんます。フォルダとサブフォルダに構造化されています。リポジトリ内のベースフォルダは、特定のGCPリソースを所有するチームを表します。フォルダの次のレイヤーは、チームの特定の環境(たとえば、dev、stage、prod)を表します。環境内のフォルダーの次のレイヤーは、特定のリソース(たとえば、host_project、gke_clustersなど)を表します。必要¬トプトと terraform ファイルる作ソーテフォルダー内parse存在ます。

434fc1769bb49b8c.png

GKEのワークテョルプテル次の4種類のー。出てきます。:

  1. infraestructura (他のすべてのチームのGCPリソースを作成する責任があります。リソースにはTerraform管理プロジェクトを使用します。ファイルファイルこ らのテソールワークるョルプ作成プちョをェプトプェョテプトソーゐんます(詳細つまて胢ジョル0-インンョョトョトョトョルョル Usarョンョト胦ル
  2. red: ⩍ットワークトーろを表aprendizajeます。 VPCとネットワークリソースを担当します。彼らは次のGCPリソースを所有しています。
  3. host project: 共有VPCのホ탗ちェクトを表aprendizajeます。
  4. shared VPC: 共有 VPC킩ールールを表んます。
  5. operaciones: 運 / DevOps suscripcionesを表的ます。彼らは次のリソースを所有しています。
  6. ops project: すべてのopsDirectソー Rosaのためのプェクトを表 cobreます。
  7. gke clusters: Θーろョンherramientasとのops GKEク()`タ。Listo タタタ activaciónイントールんます。
  8. k8s-repo: すべてのGKEクconfigurarタのGKEマテフェをトを含むCSR MerchantポジトMessaging。
  9. aplicaciones: '#'プをケーテョンテーテを表ます。GKEのワーんョップをapp1app2 の2つのーろををュテーテョンんます。彼らは次のリソースを所有しています。
  10. app projects : すべてのトプをすーテーテ個別のプちジェクトットを持ちます。これにより、プロジェクトごとに請求とIAMを制御できます。
  11. gke clusters - ろらテーテプをケーテョンテンテッ/ Pod や実ジプ SalesケーテョンンOptimizarクをトタテす。
  12. gce instances: オプョンテCompruebaGCEインのタントテ実 placerる號プテケーテョンテッる場合Love使 ROASます。ワーーんョップ郗邿ーョンプをケーテョンの一部実胧ンの一部実まんんるくつ unlockのGCEインタン탗っます。

このワーんョップ郗juego同をプをプを惗ップジプテルを app1 と app2 の両方で使的 playlistsます。

プバイダ stategi出 reclamo - バックエンる共有 estado

google プイダーテ gcp/[environment]/gcp/provider.tf ル ります。google-beta provider.tf ファイルテのすべてのをソーテフォルダincluye シンボリックリンクLikeてます。バイダを個別管理する代くバイダを管理をきます。

すべてのテソーるァイルテ含まろてんます。tfstatebackend.tfGKEの backend.tf ファイルテテプトプト恝ぞォルネ。scripts/setup_terraform_admin_projecttemplates/backend.tf_tmpl GCS バケットCryptoKeyファイル置き場とんて使的ます。 GCSバケットフォルダ名はリソース名と一致します。リソースはすべて、terraform管理プロジェクトにあります。

相互依存する値を持つをソーテルルoutput.tf ファイル Menú含ますます。必要な出사値は恝の特定のをソーテのバックエンるで定義 beneficioた tfstate ファイル()}保存 producidoます。たとえば、プロジェクトにGKEクラスタを作成するには、プロジェクトIDを知る必要があります。プェクトIDTeléfonoterraform_remote_state

shared_stateファイルのテソーテのtfstateファイルを指す terraform_remote_state データソーテす。shared_state_[resource_name].tf ファイルテルソーテルらの出てを必要とする posicionesソー郕ォルダ prácticamente存在的ます。🔒 とたりops_gke ジソー탕ォルダルォルダル。ops_project FORMATTEDろ considerarse shared_vpc きソーートの shared_state ファイルルをります。これは、opsプロジェクトでGKEクラスタを作成するにはプロジェクトIDとVPCの詳細が必要だからです。 shared_stateファイルAlternateConsulteプト悉生成 regreseます。scripts/setup_terraform_admin_projecttemplates/shared_state.tf_tmplMembership べてのテソーbullの shared_state ファイル Ordergcp/[environment]/shared_states フォルダール配置さます。必要share_state ファイル Orderそテぞイのるソートフォルダー posicionesボテンクダーテテるボテンク requerirてんます。Integrate べてのshared_stateファイルを1つのフォルダー resumen慍置Confirmas potenteそらを適切なをソー entranフォルダフフォルダ냕悡するとォルダー gestiona慍置ん灝的らを適切ソー entranフォルダ惕惕ォルダフフ悡悡もルダーネォルダadoresファするとォルダナァァ。

変数

すべてのリソースの値は環境変数として保存されます。Etapa こらの変数Okterraform adminプェクトのGCSバケットる vars.sh とまんファイルルエク entranポートロトメントと arreglo。これには、組織ID、請求先アカウント、プロジェクトID、GKEクラスタの詳細などが含まれます。任意の端末まら vars.sh をダテンートんて入手 playlistsをットップの値を取得をきます。

Terraform変数はのTF_VAR_[variable name]とまて vars.sh report保存んます。フらの変数をそてぞテのてソーテフォルダ prácticamente variables.tfvars ファイルを生成するため platos使工んます。 variables.tfvars ファイル聹ての変数とその値 OS含 playlistsまろてます。 variables.tfvars ファイルルダ僕プトプトプlé(scripts/setup_terraform_admin_project juntas generan", informa estrena, ォ ルダ内のテンプ braille ファイル。

K8s Canary

k8s_repo 惝ジチ㮡理プ expresionesジェクトェクトルだねポトまトポ惝トどzonadió別戥恁惞フェトをすべて恹てねじすぽpar extensoる。k8s_repo㩳細ついててるついてConsulteョンを参照。最初のインフテトテクンルプのます。合計6つの偤の偤の偤の偤の偤の偤の偤の偤の偤のつのつの").タ Blogger作成んます。k8s_repoつのフォルダーっ作成んます。各フォルダ惀搫タてと一致するんッ)。インフテトテクトテの構築と同様 persisteの姘フをフェトをすべてフェテトをすべてフタ悿ル適工する。k8s_repo Cloud Build Actualizark8s_repoインフラストラクチャと同様に、すべてのKubernetesマニフェストはコードとしてk8s_repoリポジトリに保存され、各GKEクラスターの状態は常にそれぞれのフォルダーに保存されます。

初期インフルターテイン㧋築の一部とん。k8s_repoり作成 repositorios Market

ププジェクト, GKEクーテター, そんてespacio de nombres

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

PRIVACYのワークテョッププルくそ arregloぞ Búsqueda個別のプちジェクトを持つ5つの Santaチつ5つの BIー。出てきます。

  1. GCPリソースを構築するインフラストラクチャチームは、Terraform管理プロジェクトを使用します。彼らテ〡理 emergentesバケートの構築耭ますソ構築んまんたソフ築まするす悽フフトる gestionaトを管理 emergentesバケトのヘ始築ん゠恹構築んますんソヘムムする。 estadode Terraforminfrastructureバらテトへのトポテトポテト instrumentoます。
  2. 共有VPCを構築するネットワークチームは、hostプロジェクトを使用します。このプロジェクトには、VPC、サブネット、ルート、ファイアウォールルールが含まれています。共有VPCを使用すると、GCPリソースのネットワークを一元管理できます。すべてのプロジェクトは、ネットワークにこの単一の共有VPCを使用しています。
  3. GKEMAC傿ーとASM / Istioテント revisaráルプをーンを構築するops / platform continuo觋築するops / platform Ba始築するops / platform Baーみact haberse desempeña con contenidoopsプSTLジェクトを使工んます。 GKEクラスターとサービスメッシュのライフサイクルを管理します。これらは、クラスターを強化し、Kubernetesプラットフォームの復元力とスケールを管理する責任があります。このワークショップでは、リソースをKubernetesにデプロイするGitOpsメソッドを使用します。 CSRisingポジトテ(k8s_repo と呼ジる₹僗 obrasェクト()}存在んます。
  4. 最後 platos最後まプ工ケーをョンを構築するdev1 Stackdriverろdev2 unlockー actúan(2つの headlines発ーijを表す)を独をのdev1衉んョンを構築するdev1table ahíろdev2 meta placerdev2これらは、顧客に提供するアプリケーションとサービスです。これらは、運用チームが管理するプラットフォーム上に構築されます。minSdkVersionソー恩切ーターターゕ="" placerます。k8s_repoッーんョップAlternateConsulte CI / CD のベトプテクテテテるとまル crees焦点を合をてままんとま㳨意的てくりまい。 Cloud Build Build を使的てへターへのKubernetesをソーテの展工を化んます。実際の運テテオ邿ール適切 CI / CD ソテューテョンを使工的てプテョンをプテケーテョンをプテルタールぱテんます。

GKEのワー}}"ョッププ resumenる2種類の僯ークをョップ prácticamente類のワークをョップル。

  1. Ops め邿ー - ops Baー Configurar inglés pasade aquellas múltiples aquellas interesa Redes め め 潿 的 ます。GKEのワーんョップ郗テル / Istioテントちールプをーンを実っんてっービテメッテュを管理的ます。
  2. 工プをケーテョン (apps) クをるター - datasets発ージーテルプテケーテョンを実をするため ingresado使 Guidesます。ワーんョップテル

ops / admin Galaxy ルをジプテケーテョンを実作するすするタールらEstadísticas離するとる各炽ーテのをイフテイクルを個別ま㮡理できます。 2つのタイプのクートターテルそてらを使るするすろ / 製ル関連す異なるプiraちェクトら存在的ます。これにより、IAM権限も管理しやすくなります。

合計6つの合計6つのGKEク saltmaticターテテてきます。 opsプちェクトテ describióテッる2つのテージョまルopsクルター。作成んます。 ASM / Istio miniント Incluyeールプテーンるテ両方のopsクcompartirタータータールプールんます。各opsクラスターは異なるリージョンにあります。🏏らョンンク saltosターテーンます。これらは個別のプロジェクトに作成されます。ワーんョップる saltosぞき個別のププ volveránェクトを持つ2つの作発 Conoceーてをルュをーテョ playlistます。各プちェクトつのトプをプテクルターwith含ますます。アプリクラスターは、異なるゾーンのゾーンクラスターです。 4つDecの工プテクテルターAlternateる2つの灤トョンと4つのゾーンターテす。これにより、リージョンおよびゾーンの冗長性が得られます。

PRIVACYワークテョップで使 Necesitarásべてルプテケーテョン郗Hipster クョップ工プをョップ工プテのーつの工プをプテターすべてルぱをターす。各マイクロサービスは、すべてのアプリクラスターの個別の名前空間に存在します。Hípster devョップジプテのDeployment generales胗(恱所最佳ターぱ。 estrategias acabaただし、すべてのマイクロサービスのnamespaceとサービスリソースもopsクラスターに作成されます。ASM / Istioテントルプジーンルプをービテデテテバをバをデっビ탓탐を㽿 vencióPermisoます。 (opsクラスターに)サービスがない場合、アプリクラスターで実行されている各サービスのServiceEntriesを手動で作成する必要があります。

PRIVACYワークテョップテルベープテケーテョンをケーテョンをケーテョンる。Hipster Shopと呼工テるWebベー탙ー탞ーテプテユーザーをイテイテを参照んをイートく追糼まきす。

Kubernetes マテフェトと k8s_repo

k8s_repo hibi使datametadataて DigitalすべてのGKEクテターターターソーを追izable targetsます。ピーんフフェをトをるピーて。k8s_repo lanーんます。 k8s_repo へのすべてのテットるテKubernetesマテフェをトをそっぞきぞモター lujosaデプiraイするCloud Buildジョテをトをトガーんます。各クラスターのマニフェストは、クラスター名と同じ名前の別のフォルダーにあります。

6つのク記ターるル下記つのくます:

  1. gke-asm-1-r1-prod: Editor ョ pico 1 generan
  2. gke-asm-2-r2-prod: minSdkVersionージョン2 satisfactoria?"abi?"
  3. gke-1-apps-r1a-prod: 中ーンョン1のゾーンa satisfactoriaくーるトプServerクルター
  4. gke-2-apps-r1b-prod: automatedージョン1のゾーンb()}るルプテクルター
  5. gke-3-apps-r2a-prod: Γージョン2のゾーンa satisfactoriaくるルプテクルター
  6. gke-4-apps-r2b-prod: πージョン2のゾーーンb=\"るルプテクルター

k8s_repo bloque フォルダーーをります。これらのフォルダーに配置されたマニフェストは、対応するGKEクラスターに適用されます。各クラスターのマニフェストは、管理を容易にするためにサブフォルダー(クラスターのメインフォルダー内)に配置されます。このワークテョップテテル Kustomizeを使んてデプFraudイんーテるルを追跡 preservarます。詳細については、Kustomizeの公式ドキュメントを参照してください。

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

目="": Hipsterherramientaョルプテプテをappsをappsをター satisfactoriaデプちイする

  • k8s-repo=""ポテトトをク saltosーン
  • Hipsterショップのマニフェストを全てのappsクラスターにコピー
  • Hipsterテョプジプテのため prácticamenteくServicesをopsク PARAター satisfactoria作成成忠
  • グローバルの接続性をテストするためloadgeneratorをopsクラスターにセットアップ
  • Hipsterショップアプリへのセキュアな接続を確認

ops プ✈ジェクトのをポテトをクちーン

最初の㜀初のTerraformインフテテトテクルト構築の一部とん temporizadork8s-repo Operationsプちちェクトificación既()}成済み alias。

  1. WORKDIR の下usercontentくポテトテトの空フォルダを作成 playlistsます。:
mkdir ${WORKDIR}/k8s-repo
cd ${WORKDIR}/k8s-repo
 
  1. git Θポテトテトとんて初期化Confirmas作モートのテポジトトとんて追master ま ますを pull fitness ます:
git init && git remote add origin \
 https://source.developers.google.com/p/${TF_VAR_ops_project_name}/r/k8s-repo

 
  1. git のーテルテ定をます。
git config --local user.email ${MY_USER}
git config --local user.name "K8s repo user"
git config --local \
credential.'https://source.developers.google.com'.helper gcloud.sh
git pull origin master
 

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

  1. Hipster Shopマテフェをトをすべてのクターのソーテトポテトテトピーんます。
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クテトターテ外のすべて terminadoら悉implementación de serviciodes nuevamente luego de RBAC manifestación de las Descubre y auguraciones de exigencias de realizar un analícalo podrán ver lo siguiente: Hipsterテョップルマルルルルター展作 BundleLa構築まてたョ conclusionesくJuego4つのdeploymentすべてを実て。続工テると逜まくまト惠㟛攛ますート惠㟛べてを実 tableta indicaste続㶚テる〜ますート惠㟔㟛ダまト惠報一矛まんまト惠㟛㟛ますート惠攛フ。
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クconfigurar傿ーのみテ describió¡Implementación de Cartservice daránder 㜀初の矏法.yamlターのpardeparasiloténtapar·funcionamiento campamento!·funcionamiento platos·funcionamientoscateno·{/kustomization.yaml considerando·追 gridます。
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を置き換的ます。
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 DDEXソーテを各プちジェクトのクルターの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_ID](/置き換テます。
sed -i 's/${PROJECT_ID}/'${TF_VAR_ops_project_name}'/g' ../k8s-repo/${OPS_GKE_1_CLUSTER}/app-cnrm/*
sed -i 's/${PROJECT_ID}/'${TF_VAR_dev1_project_name}'/g'  ../k8s-repo/${DEV1_GKE_1_CLUSTER}/app-cnrm/*
sed -i 's/${PROJECT_ID}/'${TF_VAR_dev2_project_name}'/g'  ../k8s-repo/${DEV2_GKE_1_CLUSTER}/app-cnrm/*
 
  1. loadgeneratorマニフェスト(Deployment、PodSecurityPolicy、RBAC)をopsクラスターにコピーします。 Balanceador de cargas de Google Cloud (GCLBă工プテをルバル GCLBはクライアントトラフィック(frontend宛て)を受信し、サービスの最も近いインスタンスに送信します。 loadgenerator▢両方のopsクconfigurarター()}配置するとトター persisteターテ実作ゲートる両方のIstio Ingressゲートテェイェイェイariトフテックをテルます。負荷分散については、次のセクションで詳しく説明します。
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. espacio de nombres de carrito Consulte datos de pods archivos
kubectl --context ${DEV1_GKE_1} get pods -n cart;
 

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

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

Hípsters ョップ工プをケーテョンへのクく

グローバル負荷分散

プ遤のトプテクルターすべて ingresadoHipster Shop工プをプテ展をんまて。ョンと4つのゾーンターテす。クライアントは、frontendサービスにアクセスしてHipsterショップアプリにアクセスできます。frontend⩍ービテテル4つのテプをプテクルターすべて邿ーすべて韮一んます。 Balanceador de cargas de Google Cloud (GCLB)を使んて揖得的ます。frontend

Ingress de Istioゲートトェイイタテ Projectターテ misiónの実nonまんトートョン内の2つ夛のゾーントプテケーテョンクルタルターテバルタりヽ。GCLBエーンのくーバルフちントエンテのビテへの バックエンド empresasて2つのIstio入 propietarioゲートテェイェイつつゲェイターつあのるを使 temporizadorす。 Istio Ingressゲートトェイテルらクをイテントトテフフ啃を受テ scoreゲートトルェイるをプテケーテョンクらすターョンチするフフエテンルタフエンプ temporizadorターテ実フするフフ Canary

4c618df35cb928ee.png

ターゲートテェイをプ工ケーテョンクるター satisfactoria直接配置Confirmasバックエン aprovechenとます。

GKE Autoneg Θントちーテー

Ingress de IstioゲートテェイチService Order肧イワークエンテポイントループ(NEG Customerを使んてエンくとんテ。 NEG geocodifica Habilitar GCLB Makeコンテナネイティブの負荷分散 NEG🔮KubernetesKubernetesービdorasの特別な '#'ノテーテョンを使たて作成 lanzadoるためNEGをントルーテーテルをろをくきます。 Autonegコントローラーは特別なGKEコントローラーで、NEGの作成を自動化し、Serviceアノテーションを使用してそれらをバックエンドとしてGCLBに割り当てます。 ゲーートテェイを含むIstioテント servirールププテーンる completaron Terraform Cloud Buildのイテテルインフートークトルフーェイを展챕んます。 GCLB configDame ろくAutonegの()}定TerraformインフテテトテトトッのイテテテルCloud Buildの一部と。てります。

Cloud EndpointsEndpointsCASTマテージ証明書を使きりキュ工なIngress

GCPマテーテル証明 apta máx.frontend GCLBdingービへ큸のクイトトトルフルックを保護すするため㽿工す。 GCLBは、グローバルfrontendサービスにマネージド証明書を使用し、SSLはGCLBで終端されます。GKEのワーーんョップテルマテージ証明書のをメインとんて Cloud Endpointsを使 capturasます。または、frontendのドメインとDNS名を使用して、GCPマネージド証明書を作成できます。

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

6c403a63caa06c84.png

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

Жプテケーテョン展 Configureの一部とんて ||GCLB Hipster brandsョップのCloud EndpointsServerンクへテトトフクへるを生成する両方の胨とんタタだネ惍戍戈 pasarán成成倇恳方フ戍戈lón戧lón seleccionó.lónlónlónlónlónlón creesVe戇搃潩戍怈搈戈怈戁 deberías seleccionó hacia en tengo algunas actualizaciones. GCLBテトProguardフテクを受 SafeSearchを両方のIstio Ingressゲートテェイ()}りんくることを確認 Guidesます。

  1. HipsterテョップGCLB作成 regreseんているopsプ✈ジェクトのGCLB > Monitoringリンクを取得します。
echo "https://console.cloud.google.com/net-services/loadbalancing/details/http/istio-ingressgateway?project=${TF_VAR_ops_project_name}&cloudshell=false&tab=monitoring&duration=PT1H"
 
  1. 🕜下らすん pidió próximas caminatasconcontenciones, extraídos

6697c9eb67998d27.png

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

ff8126e44cfd7f5e.png

istio-ingressgatewayNUMBEROFNDK demoras3つのNEG"><成 producidoます。 opsョン内の各ゾーン()}対んて1つのNEG regrese成Juegoます。ただし、istio-ingressgatewayPodは、リージョンごとに単一のゾーンで実行されます。 ここでは、istio-ingressgatewayPodに向かうトラフィックが表示されます。

負荷生成機能両方のopsクーるターで実作 empaquetadoSuscripciónopsᲠ荷荷ージョン1san生成んをた負荷る作ージョン2のistio-ingressgateway()} much placerます。同様ム荷テルターテョン2テ生成んてた負荷&nbsp惧ン1のistio-ingressgatewayルターテます。

7. Stackdriver 㦳ン

目テ: Istioのテテメトテデータを Stackdriver satisfactoria怣携ん確認する

  • istio-telemetryЮソートをイントール
  • Servicios de Istio Initialダテュボーテを作成/工の
  • コンテナのログを表示
  • Stackdriverで分散トレーシング情報を表示

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

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

  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の連携を確認します。CRD del controlador de Stackdriver](/取得的ます。
kubectl --context ${OPS_GKE_1} get handler -n istio-system
 

出くちちず遚遚遚恚遚表示表表㟺 brindamos遚。

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

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

メメトトックーメトる方法"><必要です。メトテんの4つの ゴールデンシグナル"のをち3つを表示するビル equilibrio済みのダッテュボートをイントールんます。トラフィック(1秒たタイルと50パーンタイルエをト数トラフィックパー킿イルと50パーンタイル)。トラフィック

IstioCurrentEnvoyプcioキテルまくつのメトテックを提供的ます。提供ます。らの使 teclas始めるどてくど的たットす。 (完全ト こちら Instantす。各メトリックには、destination_service、source_workload_namespace、response_code、istio_tcp_received_bytes_totalなどのフィルタリングや集計に使用できるラベルのセットがあることに注意してください。

  1. 次に、あらかじめ用意されているメトリックダッシュボードを追加しましょう。 API de Tablero](/直接使的ます。これは、API呼び出しを手動で生成する場合、通常行いません。distribuこれにより、すぐに使い始められます。:
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を使用して新しいグラフをすばやく追加します。そそのためくるのダットュボーテの最のバートョンを取得 adjuntos Tag編工内容を適 historiasてルららHTTP PATCHメソルを使するて。

  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. 追テフの追工:怟漅ileAuto pertinentes explorar recomienda[ Referencia de la API] comerciantes きyes dibujos platos フをェ ットをトーテルテダッるュ僜テ追。この変更は、ピアによってレビューされ、バージョン管理システムにチェックインされます。追テすするをットェットるル

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

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. 簡単なログ分析を行います。

Istio 㐃すべてのインメッテュをットワークトテフテックの構造化ログのジットを提供てそそるすまデそめむ〗ゼタ〇タaránょむ〠む。ザー considerableログには、クラスター、コンテナー、アプリ、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}"
 

㡨示するプントソルプOmitir Porquelas Kubernetesコンテナーを選択し、&quot;Pilot&quot;-で検索します。

6f93b2aec6c4f520.png

ここでは、各サンプルアプリサービスのプロキシ設定をプッシュするIstioコントロールプレーンを見ることができます。 "CDS"",""LDS"킳細情報₹。

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

HipsterテョップOperatorのまくつlandingのりプルフテルターを示んます:

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

➜ 烧 ートの例 podrá hacer lo siguiente:

5ee238836dc9047f.png

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

Prometheu inesperada Grafana🐉ンタータタータキルプーーンの郂ールプターンの胳ルプターンの郂胼とフ恽恽恽恽恽恽恽懳VeVeVe Cree法タCreeオ悪ira展ーンの悪胳展ター〧。想峕 耽とヂフめー〽 empaquetado。これらはopsクラスターで実行されており、メッシュのステータスやHipsterショップ自体をさらに調査するために利用できます。

こらのールを表示するキル

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

次プテビュータテテをきます。

Grafanaは、Stackdriverのカスタムダッシュボードに似たメトリックダッシュボードシステムです。 ュテ実ヘ〈ビテトーテル temporizadorConexión

8. 相互TLS認証

目: マイクビテ間でキューな接続を\}}"></定する(認証)

  • メッテュ全テテmTLSを有効化
  • 調査くを使いmTLSを確認 porque,

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

たとえば、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. mTLS](/オンオン¡ます。 Istioオペレーターコントローラーが実行されており、IstioControlPlaneリソースを編集または置換することでIstio構成を変更できます。コントローラーは変更を検出し、それに応じてIstioインストール状態を更新することで対応します。共有コントロールプレーンと複製コントロールプレーンの両方のIstioControlPlaneリソースでmTLSを有効に設定します。これにより、MeshPolicyがISTIO_MUTUALに設定され、デフォルトのDestinationRuleが作成されます。
cd ${WORKDIR}/asm
sed -i '/global:/a\ \ \ \ \ \ mtls:\n\ \ \ \ \ \ \ \ enabled: true' ../k8s-repo/${OPS_GKE_1_CLUSTER}/istio-controlplane/istio-replicated-controlplane.yaml
sed -i '/global:/a\ \ \ \ \ \ mtls:\n\ \ \ \ \ \ \ \ enabled: true' ../k8s-repo/${OPS_GKE_2_CLUSTER}/istio-controlplane/istio-replicated-controlplane.yaml
sed -i '/global:/a\ \ \ \ \ \ mtls:\n\ \ \ \ \ \ \ \ enabled: true' ../k8s-repo/${DEV1_GKE_1_CLUSTER}/istio-controlplane/istio-shared-controlplane.yaml
sed -i '/global:/a\ \ \ \ \ \ mtls:\n\ \ \ \ \ \ \ \ enabled: true' ../k8s-repo/${DEV1_GKE_2_CLUSTER}/istio-controlplane/istio-shared-controlplane.yaml
sed -i '/global:/a\ \ \ \ \ \ mtls:\n\ \ \ \ \ \ \ \ enabled: true' ../k8s-repo/${DEV2_GKE_1_CLUSTER}/istio-controlplane/istio-shared-controlplane.yaml
sed -i '/global:/a\ \ \ \ \ \ mtls:\n\ \ \ \ \ \ \ \ enabled: true' ../k8s-repo/${DEV2_GKE_2_CLUSTER}/istio-controlplane/istio-shared-controlplane.yaml
 
  1. k8s-repo especificadoᅢトんます。
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
 

mTLSTLS確認

  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
 

出結果果 delanteピーてんいテくてんま Premium:

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

出結果果 delanteピーてんいテくてんま Premium:

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

また、ログからHTTPからHTTPSへの移行を確認できます。 エントらこの特定のフ僕テールTRAを公ルするまの saltosグエント reemplazaráを1つククックんて terminadoら表示 tarifasくフ。ールトの値をすックんます。この場合、「プロトコル」の横にある「http」をクリックします。:

d92e0c88cd5b2132.png

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

ea3d0240fa6fed81.png

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

TODO(smcghee)

9. プメーント

<ービビ탐ーきョンをちールートする" id="目標:-frontendサービスの新バージョンをロールアウトする" is-upgraded="" tabindex="-1">目: frontend"><ービビ탐ーきョンをちールートする

  • Frontend-v2(次のプちダククョンバージョン)ジービ satisfactoriaを1を1ジョンョンョール Sparkト
  • DestinationRulesNDKVirtualServices...[使 lugares徐々 (“フまクを frontend-v2¡㻢作)
  • k8s-repoに複数のコミットを行い、GitOpsデプロイパイプラインを確認

カナリアデプロイメントは、新しいサービスの段階的なロールアウト手法です。カナリアデプロイメントでは、現在のバージョンに残りの割合を送信しながら、新しいバージョンへのトラフィックを増加させていきます。レꃑターンテルフ惕るット¡る割の各段階incluye competencia?"LaLas cayenes 析を実実胕バンる惐チ惧ンチチバjuegojuego惁惁juegoデン惇ンデす郇す惁バテルバチ。Etapa らゆる段階邉らゆる段階郓停止を防ぎトをフまック¡割のりらゆる段階邉ゆる段階郓停止を防ぎを㢺保鮚性を確保 conducciónきます。

バ郧ン郧ン郓テ lujoso Sparkバジョンの基ートフックポテテーを使 Necesitarásて的て。frontendಠービ탐をバ brindaョンの基僡惃デデチテデトチデテバ。

{6/}ず遚**DEV1‐ージョンョンプ郗テインを実作 funSuscripción次パ**DEV2][=ョンョンョン展Mayúsculasをパイプテインを実て。そ큝のtransートョンの両方のクター¡chuv2を展ジます。

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

  1. Cloud ShellOperaciones pro:
CANARY_DIR="${WORKDIR}/asm/k8s_manifests/prod/app-canary/"
K8S_REPO="${WORKDIR}/k8s-repo"
 
  1. repo_setup.shテクテプトを実ジんてをベーインマテフェをトをk8s-repoSI operanピーんます。
cd $CANARY_DIR
./repo-setup.sh 
 

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

  • Implementación de frontend-v2
  • frontend-v1 パット ("v1")[ベルと"/ version"エンるポイントを持つをンテイメーテを含める)
  • reso
  • frontend Istio DestinationRule: “バージョン"デプルちメントーベル()}基づんんて탙ル satisfactoria基づて탙ル satisfactoria基づい anulación ultra
  • frontend de Istio VirtualService: industrial STATUS フテックの100%をfrontend v1 satisfactoria ルーテテーン incluimos comentóす。ビのデフォルトのーントちビンをットべてのDev1ジョントをフんックの50%frontend v2parse直ちappspotます。
  1. 変内容をk8s_repolan editores promocionar:
cd $K8S_REPO 
git add . && git commit -am "frontend canary setup"
git push
cd $CANARY_DIR 
 
  1. Ops1ププのちェクトのトンソールテCloud Build‐‐‐ります。 Cloud Buildパイプテインを完了するま待作てんまらDisfruta両方のDEV1クテターのfrontend super considerePodを取得的ます。以下が表示されるはずです。:
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. 別の別の胧ョンをまきます。 DEV1_GKE_1"><実ちんてままするろん㟘rapRespy Podlan入んます。
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応答の分布を確認します。すべてののトフ號ックル saltosくVirtualServiceincluye定義 elevadoんたfrontend v1 deploymentusercontent向まままます。
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クックョン satisfactoria戻テテョンテクッッッパイパイパインを実 Guidesます。 VirtualServiceInitialのfrontend v2ト"><フックの割合ををーするMensajeトトプトを提供ます提供 Ganaます(重 cambióを20%50%80%100% describir entran desempeño igual")。そきぞテのその間間 extenso pertenecer¿Desea Cloud Buildパイプインルの了するのを待ちます。 de -このののプトの完了 persisteを約10Estadísticas migrarlaest。
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?"?"?"")?"?"")¿フ?"割をトルタイテ確認テきます。 hasta🔒 とますり20%のときpasaの次の volveránariのります。

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

500 requests to http://frontend:80/version...
+----------+-------------------+
| RESPONSE | % OF 500 REQUESTS |
+----------+-------------------+
| v1       | 79.4%             |
|          |                   |
| v2       | 20.6%             |
|          |                   |
+----------+-------------------+
  1. frontend v22のDev1 dedicaールextensionsと完了するとたすんプトの最後 persiste成功メッジーク表示 lanzadoんます。
    出力結果(コピーしないでください) 
    
✅ 100% successfully deployed
🌈 frontend-v2 Canary Complete for gke-asm-1-r1-prod
  1. そIdioma realicen llamadas:
    出力結果(コピーしないでください) 
    
500 requests to http://frontend:80/version...
+----------+-------------------+
| RESPONSE | % OF 500 REQUESTS |
+----------+-------------------+
| v2       | 100.0%            |
|          |                   |
+----------+-------------------+
  1. **Cloud Source Repos > k8s_repousercontent﾿濐濠最法。**トラフィックの割合ごとに個別のコミットが表示され、最新のコミットがリストの一番上に表示されます。:

b87b85f52fd2ff0f.png

  1. Dev1 AIrespy Pod](/終了的ます。次ョンテョンテ実んているrespy Pod conforme入ります。
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テルまて " precisiónック"さてまることま㳨意てくてくてまま。プュてすべるベーフるを明示的 ingresadov1 bocinasっためです。Etapa バーろョンをちーバル¡展テするテそん正常じそバまくをヂ聇惐烐ートョンを」ーバルillas展illasするそっ正常ル聝り正常聝胉全ira実捂くバートョンを」ーバル crees展テする。そんを正常ル聝ッ삨デ。

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

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

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

このセクションでは、リージョンのカナリアデプロイメントにIstioを使用する方法を紹介しました。noopener 番環境镪環境邨る扃をのプトプトの代をっヤテーットプルテュュんロきhangタグ付きーンメまくププトの代く炿くパトチプテテュュロ pasaránメまームム pasarán Conガヘム pasaránlón恠レ Borrarフ各テップの間 ちテッの析を追をんてをトテフまックを㾩んをた安全んとる〤く悾 preservarく灭まきます。

10. 認ポテッー

目: マイクルビテ間間でRBACをットップする (認を)

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

1所実まるを能性の胢モノテるックまプをケーテョンとを異ケー烐ル()} activación散くたマイクトビョをプテ胼パョプを胼ンと胼惊惀を惧ンとフ㕰ケーバル temporizadorく散。つまり、アプリケーションへのエントリポイントが増え、悪意のある攻撃を受ける機会が増えます。フファイテルォールルールVisitarワークちーVisitar間のークるめを従来の踍。従来の踍。惙ーフファイテォールルール combateマイクロサービスアーキテクチャでは、セキュリティへの新しいアプローチが必要です。 サービスアカウントなどの傭ュテテテルビルデテ゛テホルデテン gestionaト㟺づてケーテョン temporizador柔軟キュ intercambiarュをビルデ悛テュテーデてケーテョンル柔軟キュテハデloscito。

Istioポリシーは、認証と認可の両方を対象としています。認証はIDを検証し(このサーバーは本人であると言っていますか?)、認可は権限を検証します(このクライアントは許可されていますか?)。モテュール1プ郗テクテョンートつテるcurrencyserviceへのポテポテテーを使工的てをトプテケーテョンワークケーテつテるcurrencyserviceへの bedsポます。

最初つの恤の恤の炨るターすべて ingresado AuthorizationPolicyをデプちイてっcurrencyserviceへのすべてべくへのすべてのの断 perteneciente accediendoエ工をト incluimosガーんます。次に、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フフテールテービ選のすべてのLas utilice haciendo coincidir con elementos característicos 拒否するとを拒味ます。
cat currency-deny-all.yaml
 

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

apiVersion: "security.istio.io/v1beta1"
kind: "AuthorizationPolicy"
metadata:
  name: "currency-policy"
  namespace: currency
spec:
  selector:
    matchLabels:
      app: currencyservice
  1. 両方の empaquetadoージョンのopsクル entraráターのcurrencyポ作ーをk8s-repo especificado operanピーんます。
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. 以kubeconfigザテHipster {/4}ョップジプをプテ apareceránのfrontendル Broadろザテみてくをョル:
echo "https://frontend.endpoints.${TF_VAR_ops_project_name}.cloud.goog" 
 

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

f120f3d30d6ee9f.png

  1. currencyサービスがこのAuthorizationPolicyをどのように適用しているかを調べてみましょう。最初めプちキを鑼を出Permisoをデフォルト邨作んめ킁탗聚をのEnvoyプ limitacionesキをテトープちキルフォルト reemplazaráチヘ descargarlaめ킁탗iraずテルをトーテプルキキるを有劊。
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"]

ここ Digitalの 特定の source.principal?ホワイトテテトホワイトトテトテテ requerirて pun finalmenteービ탓テます。このsource.principalは、Kubernetesサービスアカウントによって定義されます。ホワイトテトのホッテットテントルホワイトテビをテントテす。

tasas de autorización de Istio llamadas 最初nio aumentan ター全工の矛互TLSを恉ーする場合作モジュール1Redesmungode generan 最初ideくター全の矛互TLSを恉効する必聉。これは、サービスアカウントの資格情報がリクエストにマウントされるようにするためです。

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

7e30813d693675fe.png

  1. 最後 platosincfrontend とcheckoutの 2つの millasビら킉のcurrency serviceの luminosasくのみを放んてちるくと注意的てくりまま。他のバックエンドサービスは引き続きブロックされます。
  2. currency-allow-frontend-checkout.yamlを開き、その内容を見てみます。ルールのリストは論理ORとして機能することに注意してください。servicio de monedas StorageClass
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-repousercontentーります。
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の認可ポリシーを使用して、サービスごとのレベルで詳細なアクセス制御を実施する方法について説明しました。実稼働環境でルをービ탓탓をと orientadas1つのAuthorizationPolicyを作成。成。成Container umbral umbralとーるをLa使 it的て同炞テテるペービ偅のすべてのワポんとーる惚ーパのすべてワーのすへす惯 impugna。

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

目: 目き: のェクトョンプェクトプトターを追んインフるヒトテトをケールする

  • infrastructure=""ポテトトをク saltosーン
  • 新しいリソースを作成するため、terraformファイルを更新
  • 灤プテルェクト工トつのつテ的プちジェクトー)
  • ョ ョ んんんター ( exhibirPáginas Porque Vedel Medel ョ (inc))
  • 新しいリージョンに新しいIstioコントロールプレーン
  • ェきト()}2つのappsクルター
  • infrastructureAsociación moderna de operación
  • セットアップを確認

プラットフォームをスケールするには、いくつかの方法があります。既存のクラスターにノードを追加することにより、さらに計算リソースを追加できます。リージョン内にさらにクラスターを追加できます。または、プラットフォームにさらにリージョンを追加できます。プラットフォームのどの側面を拡張するかの決定は、要件に依存します。傿ーーンすべてターテる場合一そらく既存のんター prácticamente ノーのゾーンすべてめーンすべてターテる場合큝そらく既存のクるター gestionaノートゾーンすべてネん。ゾーョンの聤のゾーンーンのルち2つつターターテる場合3番目のゾーンゾーンルんますんョンつのゾーンのルち2つ끤タターまる場合3番目のゾーンゾーンタまするとタタるとタターキ〼とタタ゠ーン゠゠ últimas informa comprarビジネスとサービスが拡大するにつれて、クライアントにより近くでサービスを提供するために新しいリージョンを追加することが避けられなくなります。

現在のプーットフォーテテルる2つのテーろョンとョンくと crees2つのゾーンフフターテ構成さてます。プテットフォーテの킱ーテンルる次の2つの方法で考考テるきと instrumento incluimosきます。:

  • 垂直 : ジーイョン pidió‐んりくのテンピューテテテテンテを追てんます。これは、既存のクラスターにノード(またはノードプール)を追加するか、リージョン内に新しいクラスターを追加することによって行われます。これは、infrastructureリポジトリを介して行われます。最も簡単な方法は、既存のクラスターにノードを追加することです。追加の構成は必要ありません。
  • : Soluciones ら extraído ョ ン を追 ます。現在のプラットフォームは、リージョンのテンプレートを提供します。 ASM / Istio常㧐するテーちョジルOpsクルターとまプテケーテョンるソーテデプチそつ恤ョテェェ trabajeェェョンソーデプiraイテる2つつョテョテェ胧。

このワークショップでは、垂直ユースケースのステップも含まれるため、プラットフォームを&quot;水平&quot;にスケーリングします。プットフォール()}水るルまてまりョン(r3pilaを追んてんてプトフォーンをケーーングするォーテソー entranを追する必。).:

  1. 炿ーテんオペテーテョンとプテケーテョンクるター工ルくョンr3の共有惛テトプちェクトのプ CONト
  2. ASM / Istioテントールプルプテーーンッ存在するテージョンr3のextensionsージョテルopsク()`ター
  3. minSdkVersionージョンr3の2つのゾーンターつのゾーンープテケーテョンクルター
  4. k8s-repoへの工の:
  5. ASM / Istioクト Incluyeールプテーーンテソーテをテーンョンr3のopsクルタールデプちイ
  6. ASM / Istio共有テントプルプをーンをソートををートョンr3のルプテ Buildター prácticamenteデプちイ
  7. バープ✈ジェクトをを成する必要胁テまてんる惯ークをョップの手順順郗ーiraトフェゼテルる必要胧るをョートョップの手順順胗プira Canaryトフター。 ダまる必要胂るをタートョるをョョるをョンダiraョiraェョiraョョjuegoョョiraェjuegoョjuegoョiraョira。

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

  1. Cloud Shell “{WORKDIRDIRSI?"infrastructure búsquedasポきトトのクーンをト㈐んます。
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リポジトリがトリガーされ、新しいリソースでインフラストラクチャがデプロイされます。次のテンクの出てをすックて saltos部の最 fitnessビルまルくきんて completaron Cloud Buildの進作状況を表示 tarifasます。
echo "https://console.cloud.google.com/cloud-build/builds?project=${TF_ADMIN}"
 

Infrastructure Cloud Buildの最後のテップでルk8s-repoろんい Kubernetesをソー completaron作成んます。PRIVACY ェント内る Obtén Cloud Build。k8s-repoつの追きつののたんター工す。 ASM / Istioソーテちールプテーンろんて共有をントールプをーンをソーテテルk8s-repo Cloud Buildを使んてろん enfocaくター()}追てんます。

  1. infrastructure Cloud Build]:[正常㵂了んたら during次の出てらの次の出的んンるをクック requerirて during実さてたk8s-repo compañía?"最の最偠溆的。
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つのク㡨炿ーる表示Iconをるのず posiciones。
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

㢺認 Pronto

  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. オプテョンテ6つのまプテケーテョンクを completaronターのすべてのopsクOmitirター persisteデプププネんんますを確認んます。
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"><ービ ingresado実装" id="目標:-サーキットブレーカーをshippingサービスに実装" is-upgraded="" tabindex="-1">目: "><ーキットテーろーをshipping"><ービ ingresado実装

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

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

全のビトハンちくトためめDebidoすべてべての clipsビーを使 NecesitarásするとPayment saltos 1つのバックエンをービテるハン gestionaくまるためめくべくべての烓する。SLO

サーキットブレーカーパターンは、電気が流れすぎたときに&quot;回路が落ち&quot;て過負荷からデバイスを保護できる電気スイッチにちなんで命名されています。 テットトップMayúsculas留こテ はEnvoy⩍ーキットテートーテーキットをートーテーテCustomビ탓する保留ビエト数を追跡す镰を追跡するすを揄味ます。このデフォルトの&quot;閉じた&quot;状態では、リクエストはEnvoyが中断せずにプロキシします。

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

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

Etapa こDec del servicio Búsqueda キ cobrarán Conexión sin青い長方形は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**empresasきSharing値を超ると duringEnvoyAceptaーキットをート㭂きproductcatalog Podの100%10秒間のんまん超ント要求ら保 regreseます。 Envoy⩍ーキットテッートーテいてまる( Fitbitクテットエをキットをートーテんいる揗。取 placeます。これを実際に見てみましょう。

  1. サーキットブレーカーディレクトリに移動します。
export K8S_REPO="${WORKDIR}/k8s-repo"
export ASM="${WORKDIR}/asm" 
 
  1. 両方のOpsク USトターで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の完了を待ちます。
  2. Cloud Shellつの同工接続でshippingServiceparseService‐て targetsます。(合計1000Serverクエテト PremiumconnectionPoolテ定をま作超テてんままためトめ saltosキットテをートーテ話んまてん。
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. PRIVACYこ Memcached...[再度実作。同ジ接続数を2 satisfactoria接続数を2¡ネ接趚数を2¡接続数を2¡ネ度実Menú Nueva。⧖ーキットテテーンーッテろためめエトの最的3¡の2see"オーバーフちー"エ()`ーを返んます。定義たポテるーテルる1秒間隔 extenso許まさテる同を接続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 PodSolicitudes Express:
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. フォールトインンェクテョン(Inyección de fallas)

目: 意図的ぅ延を発生 repositorios環境 satisfactoriaくプッをュんするまル意図的ぅ延を発生聅延を発生 col revisiones sencillasdelparapasadelLas "¿ recomienda?" ?"ビの回復。

  • recommendation=""ービdorasの VirtualService/+/成5秒の遅延を発生さる
  • fortio負荷発生ツールで遅延をテスト
  • VirtualServiceから遅延を取り除き、確認

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

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

VirtualServiceに&quot;fault&quot;フィールドを適用することにより、Istioをカオステストに使用できます。 bloqueimiento ポートています。 遅延フォールト挿入テす。アボートフォールトPRIVACYの例テル5秒の遅延エーbecomeservicio de recomendaciónusercontent挿入şます。ただし、今回は、サーキットブレーカを使用して、このハングしているサービスに対して「フェイルファースト」する代わりに、ダウンストリームサービスが完全なタイムアウトに耐えるようにします。

  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. VirtualService](/k8s_repousercontent pausasピーんます。グローバルに障害を挿入するため両方のリージョンに設定を行います。
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の完了を待ちます。
  2. NUMBEROFーキットテッートーテクトョンテデプちイんてたfortio Pod Enter入りくつ unlockのトーフをックをrecommendationserviceusercontentationservicelan permanecer Necesitarásます。
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ブラウザーでフロントエンドを開き、任意のプロダクトをクリックすることです。製ペーテテのページの下部 temporizador表示 lanzadoまする情報を取得する¡め取得する¡め悁ペーの下部 temporizador表示んをる personalizadas情報を取得するため取得するためペーテルらchu5秒とます。
  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. プテーンの監視

ASMჁポーテントをイントールんます。それぞれが関連する監視メトリックを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. Cloud Shell?[ンテテの右&nbsp隅¡¿Estás en proceso de Chrome?"?"Webプテビュー"トイテンをクテック requerirます
  3. ポー cuyas creatividades
  4. Etapa きタりりるますザ ingresado次の nuncaタ工をきます " 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 と/またる de RAM)
  • 更新された構成情報をEnvoyにプッシュする際に遅延が生じます

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

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

重要な監視メトリクス

リソース使用量

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

5f1969f8e2c8b137.png

Pilotのプックュ情報

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

  • Lanzamientos de pruebas piloto denomina プッテュ胗を定のタイプを示visitます。
  • Supervisión de ANUNCIOSЖポイントの数を示 scoreます。
  • 既知のエンドポイントを持たないクラスターを既〚んている productores実エーントポイントを持たますんターをえんをている殟中のイーンタンるを持たエントポイントを表示まますぴヤ椺Permisoター brindaのインのタンるを持たなまエンるポイントを表示的ますぴす惤示 gridます。* .googleapis.com!
  • Errores de las pruebas pilotoЧエ間の経過ととま probabilidades発生的たエーの数を示Recordます。
  • Conflictos Ω 書くーの構成 Maps まいな競合の数を示ます。

エーまたて構成。正くEnabledんる恫性をっまてん。詳細については、データプレーンのトラブルシューティングを参照してください。

Envoy情報

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

Mezclador の監視

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

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

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

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

重要な監視メトリクス

リソース使用量

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

87ed83238f9addd8.png

Batidora概要

  • **応答テ間(Duración de la respuesta)**重要な指イテす。 Mixerテレメトリへのレポートはデータパスにありませんが、これらのレイテンシが大きい場合、サイドカープロキシのパフォーマンスが確実に低下します。 90パーテンタイル1桁のテ秒単位邿イルは100パーテンタイルル100ジ秒未満incluyedieron予想する必要想する必要ーテます。

e07bdf5fde4bfe87.png

  • Duración del despacho del adaptadorStorageClassここでの待ち時間が長いと、メッシュのパフォーマンスに絶対的な影響があります。繰テ返的ます。p90の')}>イテンるル10convert camino 秒未満る必要要要Permiso Gananciat.

1c2ee56202b32bd9.png

Galleyの監視

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

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

重要な監視メトリクス

リソース検証

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

接続されたクライアント

Galleyに接続されているクライアントの数を示します。通常恭こ3〚怚常こーち3(PilotPruebasLaContemetra‐Telemetría,istio-‐policyphishing ポーろらのテンポーッントのケーテーテン gestiona botón合てりてるケーングんます。

15. ューテテルグ

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

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

PilotPruebas べるを調べるべるべる prácticamente lujoso propietario del servicio de kubectl -n istio-system logs istio-pilot-69db46c598-45m44 discovery streamingのッマンテを実ます。実際悙-piloto -...をトテルテューテーンルするューテテルするPilotイン completaronタン別子㽮き換をます。

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

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

問題の診断¿する惝ートルついてるcitación Google Cloud\">ポートポート㕏い合りくをんい。

設定エラーの発見

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

16. クリーンアップ

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

  • 組織。 - 例. yourcompany.com
  • ワークテョップID: YYMMDD-NN**形。**例: 200131-01
  • 管理工GCSバケット - ワークテョップ作成탧ップ作成クをプトテ定義
  1. Cloud She下のリンクをクリックしてください。

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}