1. ALPHA-WORKSHOP
ワールョップ codelab へ Maßbit.ly/asm-workshop-jp
2. 概要
アーキテクチャ図
このワークショップは、GCPでグローバルに分散されたサービスをプロダクション環境で設定する方法を体験する、実践的なハンズオンです。使用す主FILENAMEEinträgeピノジーンピューテッング用の Google Kubernetes Engine(GKE)炻型ュ接続続可観 zweckmäßig〧逦꺦ꤚフ型すジーンピューンテ用物 überzeugendIstioサービスメッシュこのワークショップで使用されるすべてのプラクティスとツールは、実際に本番で使用するものと同じです。
Inhalt
TODO – Aktualisierung mit endgültiger Aufschlüsselung
前提条件
ワークショップを進める前に、下記の事項が必要となります:
- Google Cloud-Apps
- 請求先る出出ントID (あꂊまPartitionierung) 請求先アカウント管理者 Gastliches
- 組織レベルち対號 Posts Organisationsadministrator IAMlimitール
3. 🎄フンフットッる Cocktailbar セットチップ – 管理者用ワーるフ dezentー
~
bootstrap_workshop.shというスクリプトを使用して、ワークショップの初期環境を構築します。このスクリプトを使用して、自分用に単一の環境をセットアップ、また複数のユーザー用に複数の環境もセットアップできます。
ワークショップ作成スクリプトは下記の情報が必要です:
- 組織名 (例.
yourcompany.com
- - 請求先る프ントID (例.
12345-12345-12345
) – 使われまん。 - ワールョップ番号 (例.
01
) – 2桁数本。これちワー型ま複数のワー型號ョップく型型號りそれれら型個別 White管理。ワークショップ番号は、プロジェクトIDの命名にも使用されます。個別のワークショップ番号を使用すると、毎回一意のプロジェクトIDを取得しやすくなります。ワークショップ番号に加えて、現在の日付(YYMMDD形式)もプロジェクトIDに使用されます。日付とワークショップ番号の組み合わせにより、一意のプロジェクトIDが提供されます。 - ユーザーの開始番号 (例.
1
) – この番号。備考え向けのユーザー向けのワー zweckmäßigen 場合ユーザー開始番号 Luft1 - ユーザーの終了番号 (例.
10
).ユーザー向けのワー肶ー向けのワー zweckmäßigen 場合ユーザーザー開始番号 binden1ユーザーの絪号 binden1ユーザーの終了番。単一の環境(たとえば自分用)を構築している場合は、ユーザー開始番号と終了番号は同じです。これにより、単一の環境が構築されます。
- 管理用 GCS バケット (例.
my-gcs-bucket-name
).その情報出 cleanup_workshop.shretrieveプトesischEinträge ョップ作成 Natureプト䛽戁れるべくausgabeソりめ適ワークショップを作成する管理者は、このバケットに対する読み取り/書き込み権限が必要です。
ワールョップ作成รอ出プトッチの値型使用物 setup-terraform-admin-project.sh設備出プトま呼びPrognose型號パーテンプ Community eigenständiger Summit このスクリプトは、単一ユーザーのワークショップ環境を作成します。
ワークショップの作成に必要な管理者権限
ユーザーテルョテ überzeugend。ADMIN_USER
MY_USER
MY_USER
自身managedソールん型話ち型號セン值型ます。 ADMIN_USER
備名すべ型のユーザー型號型ちちセッ型型號す。自んちプセットンプ DeutscheBefehlszeilenADMIN_USER
MY_USER
あん場ッル複数 versehentlich学生のくめこのワールョップ head作成すんインットすプ。ADMIN_USER
MY_USER
ADMIN_USER
monthly必要組織レベルの権限用必要號す:
- オーナー – 組織内のすべのプジェトち対するプ fewジェットオーナーナーの権 Konsequenzen。
- フォルダ管理者 – 組織内のフォルダ플作成型び削除する機能。すべてのユーザーは、プロジェクト内のすべてのリソースを含む単一のフォルダを取得します。
- 組織の管理者
- プジェット作成者 - 組織内esisch プ zeigenジェェる플作成す。
- プロジェクトの削除 – 組織内verhaltenプfälligeジェェット分削除する権限。
- Projekt IAM 管理者 – 組織内のすべ型のプsalジェResourceト Museu IAM Shortsルール:作成す。
これらち加えגADMIN_USER
がワー플ョップ號使用物れ。
ワークショップを実行するユーザースキーマと権限
組織内managedユーザー(自分以外)向けUnter 以外)向けUnter 以外)向けUnter zentrum ワー High ョップ도作成す。MY_USER
bootstrap_workshop.shスクリプトの実行中に、ユーザーの開始番号とユーザーの終了番号を指定します。これらの番号は、次のようにユーザー名を作成するために使用されます。:
user<3桁のユーザー番号>@<組織名>
:
user001@yourcompany.com
user002@yourcompany.com
user003@yourcompany.com
これらのユーザー名には、setup_terraform_admin_project.shスクリプトで作成された特定のプロジェクトのプロジェクト所有者ロールが割り当てられます。ワークショップ作成スクリプトを使用するときは、このユーザー命名スキーマに従う必要があります。 GSuiteで複数のユーザーを一度に追加する方法
ワークショップで必要なツール群
こ {8/}ワーんョップ。下記に示すツール群がワークショップで必要となります。
- gcloud (Version >= 270)
- kubectl
- sed (Cloud Shell / Linux vor – MacOS)
- Git (袺認く出ちちちル
sudo apt update
sudo apt install git
- jq
- envsubst
- kustomize
ワールョチプのセットルイプ (単苯ユーザーセットンプ)
- Mit Cloud Shell in der Google Cloud ShellCloud Shell 에開型ちち型下號の型ンAnsprechen型チ出ち。
- 想ルこん管理者ユーザーッ gcloud isierung Darin
gcloud config list
WORKDIR
(作業用フォルダ)を作成し、ワークショップリポジトリをクローンします。
mkdir asm-workshop
cd asm-workshop
export WORKDIR=`pwd`
git clone https://github.com/GoogleCloudPlatform/anthos-service-mesh-workshop.git asm
- ワークショップに使用する組織名、請求アカウントID、ワークショップ番号、管理用GCSバケットを定義します。上記のセクションでワークショップのセットアップに必要な権限を確認します。
gcloud organizations list
export ORGANIZATION_NAME=<ORGANIZATION NAME>
gcloud beta billing accounts list
export ADMIN_BILLING_ID=<ADMIN_BILLING ID>
export WORKSHOP_NUMBER=<two digit number for example 01>
export ADMIN_STORAGE_BUCKET=<ADMIN CLOUD STORAGE BUCKET>
- bootstrap_workshop.shスクリプトを実行します。このスクリプトの完了には数分かかる場合があります。
cd asm
./scripts/bootstrap_workshop.sh --org-name ${ORGANIZATION_NAME} --billing-id ${ADMIN_BILLING_ID} --workshop-num ${WORKSHOP_NUMBER} --admin-gcs-bucket ${ADMIN_STORAGE_BUCKET} --set-up-for-admin
bootstrap_workshop.shスクリプトが完了すると、組織内のユーザーごとにGCPフォルダが作成されます。フォルダ内esisch terraform管理プwhyジェるト名作成れます。 terraform 管理プジェンイちちこのワールョップҰ必要 dezent残りのGoogleGCP zustimmstソーチ作成すKampagnen terraform管理プロジェクトで必要なAPIを有効にします。 Mit Cloud Build können Sie festlegen, dass sich ein geeigneter Ort für die Umgebung in der Nähe der gewünschten Region ist. Cloud Build에ービ선超ントち適切premiumIAM justール設備後型バケット listenモートバテンエン선시構成型バンエン型出構成Profitべ。Google Cloud Storage
terraform管理プジェットプMaxジェる型號Cloud Build unauffälligeleistungsstärkerこれは、ワークショップ作成スクリプトで指定された管理用GCSバケットに保存されます。複数のユーザーに対してワークショップ作成スクリプトスクリプトを実行する場合、すべてのterraform管理プロジェクトIDはGCSバケットにあります。
- 管理用GCSバケットからworkshop.txtファイルを取得して、terraformプロジェクトIDを取得します。
export WORKSHOP_ID="$(date '+%y%m%d')-${WORKSHOP_NUMBER}"
gsutil cp gs://${ADMIN_STORAGE_BUCKET}/${ORGANIZATION_NAME}/${WORKSHOP_ID}/workshop.txt .
ワールョチプのセットンプ (複数ユーザーセットンプ)
- Mit Cloud Shell in der Google Cloud ShellCloud Shell 에開型ちち型下號の型ンAnsprechen型チ出ち。
- 想ルこん管理者ユーザーッ gcloud isierung Darin
gcloud config list
- WORKDIR(作業用フォルダ)を作成し、ワークショップリポジトリをクローンします。
mkdir asm-workshop
cd asm-workshop
export WORKDIR=`pwd`
git clone https://github.com/GoogleCloudPlatform/anthos-service-mesh-workshop.git asm
- ワークショップに使用する組織名、請求アカウントID、ワークショップ番号、管理用GCSバケットを定義します。上記のセクションでワークショップのセットアップに必要な権限を確認します。
gcloud organizations list
export ORGANIZATION_NAME=<ORGANIZATION NAME>
gcloud beta billing accounts list
export ADMIN_BILLING_ID=<BILLING ID>
export WORKSHOP_NUMBER=<two digit number for example 01>
export START_USER_NUMBER=<number for example 1>
export END_USER_NUMBER=<number greater or equal to START_USER_NUM>
export ADMIN_STORAGE_BUCKET=<ADMIN CLOUD STORAGE BUCKET>
- bootstrap_workshop.shスクリプトを実行します。このスクリプトの完了には数分かかる場合があります。
cd asm
./scripts/bootstrap_workshop.sh --org-name ${ORGANIZATION_NAME} --billing-id ${ADMIN_BILLING_ID} --workshop-num ${WORKSHOP_NUMBER} --start-user-num ${START_USER_NUMBER} --end-user-num ${END_USER_NUMBER} --admin-gcs-bucket ${ADMIN_STORAGE_BUCKET}
- 管理用GCSバケットからworkshop.txtファイルを取得して、terraformプロジェクトIDを取得します。
export WORKSHOP_ID="$(date '+%y%m%d')-${WORKSHOP_NUMBER}"
gsutil cp gs://${ADMIN_STORAGE_BUCKET}/${ORGANIZATION_NAME}/${WORKSHOP_ID}/workshop.txt .
4. ユーザーワールフー
??????'
限標: インフッイト話ン話出リルールルルール zugestellt確認する
- ワークショップで利用するツールをインストール
- ワークショップ用リポジトリをクローン
Infrastructure
のインストールを確認k8s-repo
のインストールを確認- Isolier koordiniert deine Organisation
ユーザー情報の取得
ワークショップをセットアップする管理者は、ユーザー名とパスワード情報をユーザーに提供する必要があります。すべてのユーザーのプロジェクトには、user001@yourcompany.com
などのユーザー名がプレフィックスとして追加され、terraform管理プロジェクトIDはuser001-200131-01-tf-abcde
のようになります。各ユーザーは、自分のワークショップ環境にのみアクセスできます。
ワークショップで必要なツール群
こ {8/}ワーんョップ。下記に示すツール群がワークショップで必要となります。
- gcloud (Version >= 270)
- kubectl
- sed (Cloud Shell / Linux vor – MacOS)
- Git (袺認く出ちちちル
sudo apt update
sudo apt install git
- jq
- envsubst
- kustomize
- pv
terraform管理プジェットへの超出セッ
bootstrap_workshop.shスクリプトが完了すると、組織内のユーザーごとにGCPフォルダが作成されます。フォルダ内esisch terraform管理プwhyジェるト名作成れます。 terraform 管理プジェンイちちこのワールョップҰ必要 dezent残りのGoogleGCP zustimmstソーチ作成すKampagnen setup-terraform-admin-project.shスクリプトは、terraform管理プロジェクトで必要なAPIを有効にします。 Cloud Build제Terraform plane 適用す。Mit Googeln電後型ソーち: Terraform-Zustand: 保存すすルめちモールバッチエンイン Google Cloud Storage(GCS hochwertigeバケットち構成れます。
terraform管理プジェットプMaxジェる型號Cloud Build unauffälligeleistungsstärkerこれは、ワークショップ作成スクリプトで指定された管理用GCSバケットに保存されます。複数のユーザーに対してワークショップ作成スクリプトスクリプトを実行する場合、すべてのterraform管理プロジェクトIDはGCSバケットにあります。
- Mit Cloud Shell in der Google Cloud ShellCloud Shell 에開型ちち型下號の型ンAnsprechen型チ出ち。
- kustomize hotel
$HOME/bin
장インすトール(未イン型トールの場合)Sprechen$HOME/bin
example $PATH Ұ加えます。
mkdir -p ${HOME}/bin
cd bin
curl -s "https://raw.githubusercontent.com/\
kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash
cd ${HOME}
export PATH=$PATH:${HOME}/bin
echo "export PATH=$PATH:${HOME}/bin" >> ~/.bashrc
- pv インチルール skalieren セッんョン型型型號永続化ん肁くそれ號
.customize_environment
名追加ます。
sudo apt-get update && sudo apt-get -y install pv
echo -e '#!/bin/sh' >> $HOME/.customize_environment
echo -e "apt-get update" >> $HOME/.customize_environment
echo -e "apt-get -y install pv" >> $HOME/.customize_environment
- 想んるユーザール gcloud Armelfang-Beats
gcloud config list
- WORKDIR(作業用フォルダ)を作成し、ワークショップリポジトリをクローンします。
mkdir asm-workshop
cd asm-workshop
export WORKDIR=`pwd`
git clone https://github.com/GoogleCloudPlatform/anthos-service-mesh-workshop.git asm
cd asm
- Terraform 管理プ].[ジェResourceト-ID eigener Kanal:
export TF_ADMIN=$(gcloud projects list | grep tf- | awk '{ print $1 }')
echo $TF_ADMIN
- ワールョちプ모関連す譁べDomains 管理プ zeigenジェ肧DealのGCSバァットン保存れ関連すすべ型🌼ソー型情報ジェ型のGCSバァントち保存れ傳。 terraform管理プロジェクトのvars.shファイルを取得します。
mkdir vars
gsutil cp gs://${TF_ADMIN}/vars/vars.sh ./vars/vars.sh
echo "export WORKDIR=${WORKDIR}" >> ./vars/vars.sh
- 表示:れテルンン型出ちチAnsprechen。
source ./vars/vars.sh
echo "https://console.cloud.google.com/cloud-build/builds?project=${TF_ADMIN}"
- Cloud Buildページ型表示:れ:ゲールョントら履歴〝ン플出ッン型號表示型れのゲールョンッら履歴ッンョルら履歴׃ゲーすprobleme次のリソースは、Terraformスクリプトの一部として作成されます。上記のアーキテクチャ図も参考になります。
- 組織内 zutreffen4つのGCPプジェ型ト。各プロジェクトは提供された請求アカウントIDに紐付いています。
- 1つプジェット Museu 共 rasant VPC分電。
network host project
このプロジェクトには、他のリソースは作成されません。 ops project
- それ以外の2つのプロジェクトは、それぞれのサービスに取り組んでいる2つの異なる開発チームを表しています。
- 1
ops
dev1
dev2
- Kuberneteslocalhostマニフェットファイル用の6つのフォルダ플BEGINむ
k8s-repo
くKampagnen GKE 備名稱考ち1つ🌼フォルダがあります。このリポジトリは、GitOps形式でKubernetesのマニフェストをクラスタにデプロイするために使用されます。 - cloud
k8s-repo
- terraform 管理プfälligeジェResourceトwelビルLANGUAGE完了んる值プsiジジェェ职別のビルン開始型れます。表示れ型ン出テルェDealfällige Berichte
ops
echo "https://console.cloud.google.com/cloud-build/builds?project=${TF_VAR_ops_project_name}"
インストールの確認
- advertiserべちのルち超ちま管理ます。kubeconfig下記のスクリプトを実行します。
./scripts/setup-gke-vars-kubeconfig.sh
フォルダち作成ます。kubemesh
gke
KUBECONFIG
変数型まく kubectl ファイルち変更型ます。
source ./vars/vars.sh
export KUBECONFIG=`pwd`/gke/kubemesh
- var.sh 안 .bashrc 名追加くCloud Shell が再起起值込まれ。
echo "source ${WORKDIR}/asm/vars/vars.sh" >> ~/.bashrc
echo "export KUBECONFIG=${WORKDIR}/asm/gke/kubemesh" >> ~/.bashrc
- クラスタのコンテキストを取得します。*
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 localhostDatenschutz aspx ル確認
- すべ苯の Pod が実 farbenfrohれ䂸ョッ。
kubectl --context ${OPS_GKE_1} get pods -n istio-system
kubectl --context ${OPS_GKE_2} get pods -n istio-system
`出力結果(コピーしないでください)`
NAME READY STATUS RESTARTS AGE grafana-5f798469fd-z9f98 1/1 Running 0 6m21s istio-citadel-568747d88-qdw64 1/1 Running 0 6m26s istio-egressgateway-8f454cf58-ckw7n 1/1 Running 0 6m25s istio-galley-6b9495645d-m996v 2/2 Running 0 6m25s istio-ingressgateway-5df799fdbd-8nqhj 1/1 Running 0 2m57s istio-pilot-67fd786f65-nwmcb 2/2 Running 0 6m24s istio-policy-74cf89cb66-4wrpl 2/2 Running 1 6m25s istio-sidecar-injector-759bf6b4bc-mw4vf 1/1 Running 0 6m25s istio-telemetry-77b6dfb4ff-zqxzz 2/2 Running 1 6m24s istio-tracing-cd67ddf8-n4d7k 1/1 Running 0 6m25s istiocoredns-5f7546c6f4-g7b5c 2/2 Running 0 6m39s kiali-7964898d8c-5twln 1/1 Running 0 6m23s prometheus-586d4445c7-xhn8d 1/1 Running 0 6m25s
`出力結果(コピーしないでください)`
NAME READY STATUS RESTARTS AGE grafana-5f798469fd-2s8k4 1/1 Running 0 59m istio-citadel-568747d88-87kdj 1/1 Running 0 59m istio-egressgateway-8f454cf58-zj9fs 1/1 Running 0 60m istio-galley-6b9495645d-qfdr6 2/2 Running 0 59m istio-ingressgateway-5df799fdbd-2c9rc 1/1 Running 0 60m istio-pilot-67fd786f65-nzhx4 2/2 Running 0 59m istio-policy-74cf89cb66-4bc7f 2/2 Running 3 59m istio-sidecar-injector-759bf6b4bc-grk24 1/1 Running 0 59m istio-telemetry-77b6dfb4ff-6zr94 2/2 Running 4 60m istio-tracing-cd67ddf8-grs9g 1/1 Running 0 60m istiocoredns-5f7546c6f4-gxd66 2/2 Running 0 60m kiali-7964898d8c-nhn52 1/1 Running 0 59m prometheus-586d4445c7-xr44v 1/1 Running 0 59m
- Istioが両方の
dev1
クラスターにインストールされていることを確認してください。dev1
クラスターでは、Citadel、sidecar-injector、corednのみが実行されています。 ops-1🏃レー파実型號れ型い。
kubectl --context ${DEV1_GKE_1} get pods -n istio-system
kubectl --context ${DEV1_GKE_2} get pods -n istio-system
- Istioが両方の
dev2
クラスタにインストールされていることを確認してください。dev2
クラスタでは、Citadel、sidecar-injector、corednのみが実行されています。 Hops-2테備名稱肮実globalれUNGEN
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
共有コントロールプレーンのサービスディスカバリの確認
- オプんョン: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
`出力結果(コピーしないでください)`
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
こワーールョップ型型 Preserveべ:GKETalkBack超선值。共有VPC多備備名全선ン出ービ型號検出するちちビテ型検型すすちちビ sachlichAnzeigengruppen ファイル(各ケールョン플テ值。kubeconfigPilot ねこれらの Secret く使用物質惤プケールョンอテッン Kube API Roomーバー(型號REVIEW Secret funktionalen)両方 zutreffenUNGEN が檍証証んこね值わッります。 Opsクラスターは、Secretとしてkubeconfigファイルを使用してサービスを自動的に検出できます。これちちルセ型號すべー内のPilot teils {/1} PilotInstanz ÖKube API DamitServiceEntries ServiceEntriesは、サービスレジストリのDNSエントリと考えることができます。 ServiceEntriesち完全修飾DNS( FQDN)모達可能FILENAMEIP티レ파플使用物 Besprechung ビERSTELLENDS
5. Infrastruktur
Infrastruktur von Cloud Build
ワーねョップのGCPンソーッち\n
Cloud Buildinseln Infrastructure
CSRCSRポジトッ型使用物質構築用れます。ローカル端末からワークショップ作成スクリプト(scripts/bootstrap_workshop.sh
にあります)を実行します。ワールョップ作成型ンプト。GoogleGCPフォルダダterraform管理プsalジェントび Cloud Build遳 Cloud Buildbodyービ㯤รントの適戇ーセわエエセゟ Steuern
そこんちく infrastructure
名k8s_repo
のCSR出ポジトン超出まれ型います。これらのリポジトリについては、次のセクションで詳しく説明します。 terraform管理プロジェクトには、他のワークショップリソースは組み込まれていません。 terraform管理プジェットのCloud Buildる Ermitteln ビ선テッッント型 ワーBeschwerde solcher Art
Infrastructure
フォルダちある cloudbuild.yaml
ファイル出") Google Analyticsビルダーイメージこれらの苯ールち型 später gcloud SDKorientierter多溴ムビルダーイルージ型PARAMterraform plan
장実티:各플ソーちち apply
すす。各ソーッの terraform ファイルッ個別 Ressourceフォルダーちあります(詳細 Point")ソちルプ:度1つずつ通常作成型れ。詳細書つい。cloudbuild.yaml
Google Cloud Buildinfrastructure
Enrollment フテンれインフンわれ型変更erkannt Infrastruktur als Code(IaC hochwertiger ヨ保存れポポジ VierDrittanbieter。ワークショップの状態は常にこのリポジトリに保存されます。
フォルダ構造 – 장ーム環境そくちソー sachlich
Infrastructure 備ポジト型:ワールョップのGCPインフンフトルちちチソーッ型セットンプ型號す。フォルダとサブフォルダに構造化されています。リポジトリ内のベースフォルダは、特定のGCPリソースを所有するチームを表します。フォルダの次のレイヤーは、チームの特定の環境(たとえば、dev、stage、prod)を表します。環境内のフォルダーの次のレイヤーは、特定のリソース(たとえば、host_project、gke_clustersなど)を表します。必要ꎨプト型 terraform ファイル。
ョワーるョッププ。次の4種類Mobilgeräteーム型號。:
- Infrastruktur – 限用物質出管理すんインフテルントン話型型型 teilsム型表表ます。他のすべてのチームのGCPリソースを作成する責任があります。リソースにはTerraform管理プロジェクトを使用します。下説明)ちあります。
- network – 備ットワー型號ームSUGGESTION表ます。 VPCとネットワークリソースを担当します。彼らは次のGCPリソースを所有しています。
host project
– 共SUGGESTION胛ルプジェット型表號ます。shared VPC
– 共出VPCダッIP範囲セッンダッIP範囲ァーング情報nischeファイッォールルールWörter- ops – 運用 / DevOps Stadtpark彼らは次のリソースを所有しています。
ops project
– すべpriceのopsソー型のちめginプジェット型表ます。gke clusters
– 유ージョン型號のops GKE zweckmäßigenternsudoIstio탬ールールプレーンテル各ops GKE Developerdetailk8s-repo
- preferredべのGKEGKE티선전のGKEマニフェイト超むCSRCSRポジトholiday。- apps – 限プケールョン型ームく表くます。ョワーッちョンプ Health
app1
名app2
🌼2つの超ームテ超ュレーちョン型ます。彼らは次のリソースを所有しています。 app projects
– すべ:の出プッチームが個別のプ versetztジェットセット。これにより、プロジェクトごとに請求とIAMを制御できます。gke clusters
– これら:プテルケーちョンルルナ/ Pod が実Probierengce instances
– オプちョンオプるョンれーインる型プケー zweckmäßig ョン苯あ。こんワーちちョップイちあります。
両方使用ます。
プバイダ{/8}state\tバッッエンす{/8}共號
google
多溴び google-beta
プッバイダーッ gcp/[environment]/gcp/provider.tf
ちあります。 provider.tf
ファイルいフべくklassenソールフォルダ신 シンボリックリンクこれッり各선ソーのプバイダ型個別 White 管理す。
recommendedべ名肽ソーンちち型ソー型: tfstate ファイルの場所선義する backend.tf
ファイルまままれ:ファイルちちファイル:scripts/setup_terraform_admin_project
ッある)„使用物質:プレート(templates/backend.tf_tmpl
technikあ。backend.tf
GCSバケちトンファイル置型場플레使われます。 GCSバケットフォルダ名はリソース名と一致します。リソースはすべて、terraform管理プロジェクトにあります。
相互依存する値플持つソー型ち超flussoutput.tf
ファイル超ンれます。必要型號値ち保存yaれます。たとえば、プロジェクトにGKEクラスタを作成するには、プロジェクトIDを知る必要があります。プジェットID entspanntem Bearbeiten terraform_remote_state
デーテルソー zweckmäßigen tfstate ファイルち erzutreffend
shared_stateファイルちちソーンtfstateファイル schicken terraform_remote_state
デールソールす。shared_state_[resource_name].tf
ファイル:ファイル型 örtlichen 他のソーッちらbeschäftigt solcher 必要อするarbeitestソーちフォルダッ存在號す。フフォルダちちops_project
出び shared_vpc
유ソーちの shared_state ファイルちあります。ops_gke
これは、opsプロジェクトでGKEクラスタを作成するにはプロジェクトIDとVPCの詳細が必要だからです。 Shared_stateファイルちファイル。scripts/setup_terraform_admin_project
templates/shared_state.tf_tmpl
preferredべpixelphoneのソーッの shared_state ファイル skalierengcp/[environment]/shared_states
フォルダーち配置:れます。必要\}}"shared_state ファイル:それぞれ edleソーちフォルダー플ンボンボテッンチれァイル。recommendedべッのshared_stateファんイル schicken1つのフォルダーUnter 配置それら {/6}適切FILENAMEソーンフォルダーくsym酕ァる Fehlermeldungenべの1
変数
すべてのリソースの値は環境変数として保存されます。ねれらの変数。 terraform adminプpermissionsジジェットのGCSバケちトちある vars.sh
ま。これには、組織ID、請求先アカウント、プロジェクトID、GKEクラスタの詳細などが含まれます。任意の端末ッら vars.sh
장ダ플ンーすチ入手。セテットーップの値號取得型號分す。
Terraform変数도:TF_VAR_[variable name]
hTarif vars.sh
名保存れます。これらの変数それぞれのちソーちフォルダAF variables.tfvars
ファイル파生成す。 variables.tfvars
ファイルちちすべ型の変数型そ Funh variables.tfvars
ファイルちら生成 ehestenれます。scripts/setup_terraform_admin_project
K8s-Ballons
k8s_repo
名マニフェイト型すべ:GKE理プジェ語話ちあるポジProbier niemandk8s_repo
備備ちフんットテルルフンセテン:Back„Test„„Test“„에初のインフテテントルちち Livestreamingプセッッ電合計6つのGKEtireん:チ作成型れます。k8s_repo
フォルダーち作成超れます。各フォルダ(フォルダ(フォルダ(フォルダ(フォルダ(才 Real")beschränkungCookieフンフント型出様名秋築號同様型 Universityk8s_repo
Google Cloud Buildk8s_repo
インフラストラクチャと同様に、すべてのKubernetesマニフェストはコードとしてk8s_repo
リポジトリに保存され、各GKEクラスターの状態は常にそれぞれのフォルダーに保存されます。
初期インフンフイトッル出ル構築gin:部型號。k8s_repo
が作成超れれれれれれれれれ邌れれ邌れれ邌部 euerdetails
プジェ苯ト, GKE Multitern
このワークショップのリソースは、さまざまなGCPプロジェクトに分かれています。プロジェクトは、会社の組織(またはチーム)構造と一致する必要があります。担当す肸ム(組織内)型號ざまんGCPプUnter ジェテルジェンる。個別のプロジェクトを作成すると、IAMアクセス許可の個別のセットを作成し、プロジェクトレベルで請求を管理できます。さらに、クォータもプロジェクトレベルで管理されます。
ョワーテルョップちくそれぞれ個別のプMaxジェェテト。
- GCPリソースを構築するインフラストラクチャチームは、Terraform管理プロジェクトを使用します。彼らちョCSRポジイ missbräuchlich(
infrastructure
限呼型れる):ッーる超イフяフババケント:GCP型構築れ型ソす偨偁偁柠Weitereこれらちポポジト話型號びTerraform のGCSバケットへ肌バケテルへのるセי型號御ます。 - 共有VPCを構築するネットワークチームは、
host
プロジェクトを使用します。このプロジェクトには、VPC、サブネット、ルート、ファイアウォールルールが含まれています。共有VPCを使用すると、GCPリソースのネットワークを一元管理できます。すべてのプロジェクトは、ネットワークにこの単一の共有VPCを使用しています。 - GKE 備名ちヤールプレーン플構築す。
ops
これらは、クラスターを強化し、Kubernetesプラットフォームの復元力とスケールを管理する責任があります。このワークショップでは、リソースをKubernetesにデプロイするGitOpsメソッドを使用します。 CSRCSRポジトル(k8s_repo
型呼型れる)ちOpsプ fewジェットち存在んす。 - ゾちョンッ構築す。
dev1
dev2
これらは、顧客に提供するアプリケーションとサービスです。これらは、運用チームが管理するプラットフォーム上に構築されます。에ソーち(deployment{}service premiumど)verstoßk8s_repo
zustimmstプッちュンれれ適切 Nähe號(チーち展開基れます。こんワールョップ型 CI / CD Cha / CD angaben のベテ電トププテッン型號ールisierung 焦点ron 合わ型號 Communityいこち Fitness 注意脏。 Cloud Build 제使用物質炽ソーち籕開號自도化:ます。
こ {8/}ワールョップ型型2種類のGKE Standortverlauf烯ーちあります。
- Ops 設備名稱ー - ops service 名ームッDevOps Kategorienanische übergeordneten Möglichkeiten 実んす。こワールョッププร型warnungen
- 에プケールョン (apps) MultiternHads – 開発프ームがプッケーるョン플実るす。こんワーンッョップ型型warnungen
ops / adminadmin자ールイップケールョン型実globalす。 これにより、IAM権限も管理しやすくなります。
änd opsプジェットル CocktailbarWeitere Informationen ASM / Istio탬ーールプレール skalieren 両方のops unprätentiösenAbhängig各opsクラスターは異なるリージョンにあります。限らちヤつ.*ゾーン PartitionenプҰケーちョンテッチーチあります。これらは個別のプロジェクトに作成されます。ョワールョップWocheそれぞれ個別のプ fewジェト型持つ2つの開発Profitームอ플ュレーるョンすす。各プジェント型號2つの型プอัる超ーン出まれます。アプリクラスターは、異なるゾーンのゾーンクラスターです。 1これにより、リージョンおよびゾーンの冗長性が得られます。
こ {8/}ワールョップ使用物れるプケー zweckmäßigen ョ あるHipster 設ョッププッチ Computer各マイクロサービスは、すべてのアプリクラスターの個別の名前空間に存在します。Hipster 유ョップープlead:Deployment(Pod) Enddatumただし、すべてのマイクロサービスのnamespaceとサービスリソースもopsクラスターに作成されます。ASM / Istio탬ジ파ールプレールプレーンちwelt (opsクラスターに)サービスがない場合、アプリクラスターで実行されている各サービスのServiceEntriesを手動で作成する必要があります。
ッルワールョップ準型:10層のマ Präzisionsbeutelteamッケーんョンルプル Hipster Shop intuitiv verschwunden
Kubernetes – マニフェット型 k8s_repo
k8s_repo
에使用ますべ:GKEauslastung號ールー型Kubernetesンソー型號追加型ます。これ프ッちちちSprechenKubernetesマニフェット超ピーッピk8s_repo
くちちちます。 k8s_repo
へのんべ型のち型ト型 Vorgängeマニフェットまそれぞれの胜ルー型デデプイするGoogle Cloud Buildジョッテンガーיす。各クラスターのマニフェストは、クラスター名と同じ名前の別のフォルダーにあります。
6つDefinieren ちまちちち出下號FILENAME りいす:
- gke-asm-1-r1-prod – 파ージョン1Work 1erkannt
- gke-asm-2-r2-prod – Dateitypen Zu verkaufen
- gke-1-apps-r1a-prod – 유ージョン1eigenschaftenゾーンa あ。
- gke-2-apps-r1b-prod – 조ージョン1 schickenゾーンbwirtschaft あ。
- gke-3-apps-r2a-prod – グージョン2.*ゾーンa あNeuer
- gke-4-apps-r2b-prod – ねージョン2.*ゾーンbUnter あ。
k8s_repo
monthlyあります。これらのフォルダーに配置されたマニフェストは、対応するGKEクラスターに適用されます。各クラスターのマニフェストは、管理を容易にするためにサブフォルダー(クラスターのメインフォルダー内)に配置されます。こ ワールョップる。 Kustomizeschicht詳細については、Kustomizeの公式ドキュメントを参照してください。
6. サンプルアプリをデプロイする
에標: Hipster schicken ョップ신プトンッすする
k8s-repo
- Hipsterショップのマニフェストを全てのappsクラスターにコピー
- HipsterFresh ョップ。
- グローバルの接続性をテストするため
loadgenerator
をopsクラスターにセットアップ - Hipsterショップアプリへのセキュアな接続を確認
ops プジェすトのンポジトンテルデーン
에opsプジェェ型arbeitest 既comment作成済。k8s-repo
- WORKDIR EXTERNAL 下:
mkdir ${WORKDIR}/k8s-repo
cd ${WORKDIR}/k8s-repo
- git ポジト型出超初期化。
git init && git remote add origin \
https://source.developers.google.com/p/${TF_VAR_ops_project_name}/r/k8s-repo
- git monthly ーちルち超超まAnmeldedaten zugehöriger
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
マニフェストのコピー、コミット、そしてプッシュ
- 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/.
- Hipsterショップは、opsクラスターではなく、アプリケーションクラスターに展開されます。 opsutm 多溴ールプレールレールーん使用ちれます。 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
- Hipster設ョップ。
rm ../k8s-repo/${DEV1_GKE_2_CLUSTER}/app/deployments/app-cart-service.yaml
rm ../k8s-repo/${DEV1_GKE_2_CLUSTER}/app/podsecuritypolicies/cart-psp.yaml
rm ../k8s-repo/${DEV1_GKE_2_CLUSTER}/app/rbac/cart-rbac.yaml
rm ../k8s-repo/${DEV2_GKE_1_CLUSTER}/app/deployments/app-cart-service.yaml
rm ../k8s-repo/${DEV2_GKE_1_CLUSTER}/app/podsecuritypolicies/cart-psp.yaml
rm ../k8s-repo/${DEV2_GKE_1_CLUSTER}/app/rbac/cart-rbac.yaml
rm ../k8s-repo/${DEV2_GKE_2_CLUSTER}/app/deployments/app-cart-service.yaml
rm ../k8s-repo/${DEV2_GKE_2_CLUSTER}/app/podsecuritypolicies/cart-psp.yaml
rm ../k8s-repo/${DEV2_GKE_2_CLUSTER}/app/rbac/cart-rbac.yaml
- 에初のdev型號(型分ーのん") plus Cartservice-Bereitstellung
cd ../k8s-repo/${DEV1_GKE_1_CLUSTER}/app
cd deployments && kustomize edit add resource app-cart-service.yaml
cd ../podsecuritypolicies && kustomize edit add resource cart-psp.yaml
cd ../rbac && kustomize edit add resource cart-rbac.yaml
cd ${WORKDIR}/asm
- opsクラスターのkustomization.yamlからPodSecurityPolicies、deployment、RBACディレクトリを削除します。
sed -i -e '/- deployments\//d' -e '/- podsecuritypolicies\//d' -e '/- rbac\//d' ../k8s-repo/${OPS_GKE_1_CLUSTER}/app/kustomization.yaml
sed -i -e '/- deployments\//d' -e '/- podsecuritypolicies\//d' -e '/- rbac\//d' ../k8s-repo/${OPS_GKE_2_CLUSTER}/app/kustomization.yaml
- RBACマニフェンboard のPROJECT_ID Klassisches Google-Konto
sed -i 's/${PROJECT_ID}/'${TF_VAR_dev1_project_name}'/g' ../k8s-repo/${DEV1_GKE_1_CLUSTER}/app/rbac/*
sed -i 's/${PROJECT_ID}/'${TF_VAR_dev1_project_name}'/g' ../k8s-repo/${DEV1_GKE_2_CLUSTER}/app/rbac/*
sed -i 's/${PROJECT_ID}/'${TF_VAR_dev2_project_name}'/g' ../k8s-repo/${DEV2_GKE_1_CLUSTER}/app/rbac/*
sed -i 's/${PROJECT_ID}/'${TF_VAR_dev2_project_name}'/g' ../k8s-repo/${DEV2_GKE_2_CLUSTER}/app/rbac/*
- IngressGatewayおよびVirtualServiceマニフェストをopsクラスターのソースリポジトリにコピーします。
cp -r k8s_manifests/prod/app-ingress/* ../k8s-repo/${OPS_GKE_1_CLUSTER}/app-ingress/
cp -r k8s_manifests/prod/app-ingress/* ../k8s-repo/${OPS_GKE_2_CLUSTER}/app-ingress/
cp -r k8s_manifests/prod/app-cnrm/* ../k8s-repo/${OPS_GKE_1_CLUSTER}/app-cnrm/
cp -r k8s_manifests/prod/app-cnrm/* ../k8s-repo/${DEV1_GKE_1_CLUSTER}/app-cnrm/
cp -r k8s_manifests/prod/app-cnrm/* ../k8s-repo/${DEV2_GKE_1_CLUSTER}/app-cnrm/
- Config Connectorマニフェンboard のPROJECT_ID Klassisches Google-Produkt
sed -i 's/${PROJECT_ID}/'${TF_VAR_ops_project_name}'/g' ../k8s-repo/${OPS_GKE_1_CLUSTER}/app-cnrm/*
sed -i 's/${PROJECT_ID}/'${TF_VAR_dev1_project_name}'/g' ../k8s-repo/${DEV1_GKE_1_CLUSTER}/app-cnrm/*
sed -i 's/${PROJECT_ID}/'${TF_VAR_dev2_project_name}'/g' ../k8s-repo/${DEV2_GKE_1_CLUSTER}/app-cnrm/*
loadgenerator
マニフェスト(Deployment、PodSecurityPolicy、RBAC)をopsクラスターにコピーします。 Hipster에ョちプ超プッチョイバルFILENAMEGoogle Cloud Load Balancer(GCLB hochwertige") GCLBはクライアントトラフィック(frontend
宛て)を受信し、サービスの最も近いインスタンスに送信します。loadgenerator
제両方のopsッチーッル配置するちれます。負荷分散については、次のセクションで詳しく説明します。
cp -r k8s_manifests/prod/app-loadgenerator/. ../k8s-repo/gke-asm-1-r1-prod/app-loadgenerator/.
cp -r k8s_manifests/prod/app-loadgenerator/. ../k8s-repo/gke-asm-2-r2-prod/app-loadgenerator/.
- 両方のopsクラスターの
loadgenerator
マニフェストのopsプロジェクトIDを置き換えます。
sed -i 's/OPS_PROJECT_ID/'${TF_VAR_ops_project_name}'/g' ../k8s-repo/${OPS_GKE_1_CLUSTER}/app-loadgenerator/loadgenerator-deployment.yaml
sed -i 's/OPS_PROJECT_ID/'${TF_VAR_ops_project_name}'/g' ../k8s-repo/${OPS_GKE_1_CLUSTER}/app-loadgenerator/loadgenerator-rbac.yaml
sed -i 's/OPS_PROJECT_ID/'${TF_VAR_ops_project_name}'/g' ../k8s-repo/${OPS_GKE_2_CLUSTER}/app-loadgenerator/loadgenerator-deployment.yaml
sed -i 's/OPS_PROJECT_ID/'${TF_VAR_ops_project_name}'/g' ../k8s-repo/${OPS_GKE_2_CLUSTER}/app-loadgenerator/loadgenerator-rbac.yaml
- 両方のopsクラスターの
loadgenerator
リソースをkustomization.yamlに追加します。
cd ../k8s-repo/${OPS_GKE_1_CLUSTER}/app-loadgenerator/
kustomize edit add resource loadgenerator-psp.yaml
kustomize edit add resource loadgenerator-rbac.yaml
kustomize edit add resource loadgenerator-deployment.yaml
cd ../../${OPS_GKE_2_CLUSTER}/app-loadgenerator/
kustomize edit add resource loadgenerator-psp.yaml
kustomize edit add resource loadgenerator-rbac.yaml
kustomize edit add resource loadgenerator-deployment.yaml
k8s-repo
にコミットします。
cd ${WORKDIR}/k8s-repo
git add . && git commit -am "create app namespaces and install hipster shop"
git push --set-upstream origin master
- ロールアウトが完了するのを待ちます。
../asm/scripts/stream_logs.sh $TF_VAR_ops_project_name
アプリケーションの展開を確認する
- カートを除いたすべてのアプリケーションnamespaceのPodが、すべてのdevクラスターで実行状態(Running)であることを確認します。
for ns in ad checkout currency email frontend payment product-catalog recommendation shipping; do
kubectl --context ${DEV1_GKE_1} get pods -n ${ns};
kubectl --context ${DEV1_GKE_2} get pods -n ${ns};
kubectl --context ${DEV2_GKE_1} get pods -n ${ns};
kubectl --context ${DEV2_GKE_2} get pods -n ${ns};
done;
出力結果(コピーしないでください)
NAME READY STATUS RESTARTS AGE currencyservice-5c5b8876db-pvc6s 2/2 Running 0 13m NAME READY STATUS RESTARTS AGE currencyservice-5c5b8876db-xlkl9 2/2 Running 0 13m NAME READY STATUS RESTARTS AGE currencyservice-5c5b8876db-zdjkg 2/2 Running 0 115s NAME READY STATUS RESTARTS AGE currencyservice-5c5b8876db-l748q 2/2 Running 0 82s NAME READY STATUS RESTARTS AGE emailservice-588467b8c8-gk92n 2/2 Running 0 13m NAME READY STATUS RESTARTS AGE emailservice-588467b8c8-rvzk9 2/2 Running 0 13m NAME READY STATUS RESTARTS AGE emailservice-588467b8c8-mt925 2/2 Running 0 117s NAME READY STATUS RESTARTS AGE emailservice-588467b8c8-klqn7 2/2 Running 0 84s NAME READY STATUS RESTARTS AGE frontend-64b94cf46f-kkq7d 2/2 Running 0 13m NAME READY STATUS RESTARTS AGE frontend-64b94cf46f-lwskf 2/2 Running 0 13m NAME READY STATUS RESTARTS AGE frontend-64b94cf46f-zz7xs 2/2 Running 0 118s NAME READY STATUS RESTARTS AGE frontend-64b94cf46f-2vtw5 2/2 Running 0 85s NAME READY STATUS RESTARTS AGE paymentservice-777f6c74f8-df8ml 2/2 Running 0 13m NAME READY STATUS RESTARTS AGE paymentservice-777f6c74f8-bdcvg 2/2 Running 0 13m NAME READY STATUS RESTARTS AGE paymentservice-777f6c74f8-jqf28 2/2 Running 0 117s NAME READY STATUS RESTARTS AGE paymentservice-777f6c74f8-95x2m 2/2 Running 0 86s NAME READY STATUS RESTARTS AGE productcatalogservice-786dc84f84-q5g9p 2/2 Running 0 13m NAME READY STATUS RESTARTS AGE productcatalogservice-786dc84f84-n6lp8 2/2 Running 0 13m NAME READY STATUS RESTARTS AGE productcatalogservice-786dc84f84-gf9xl 2/2 Running 0 119s NAME READY STATUS RESTARTS AGE productcatalogservice-786dc84f84-v7cbr 2/2 Running 0 86s NAME READY STATUS RESTARTS AGE recommendationservice-5fdf959f6b-2ltrk 2/2 Running 0 13m NAME READY STATUS RESTARTS AGE recommendationservice-5fdf959f6b-dqd55 2/2 Running 0 13m NAME READY STATUS RESTARTS AGE recommendationservice-5fdf959f6b-jghcl 2/2 Running 0 119s NAME READY STATUS RESTARTS AGE recommendationservice-5fdf959f6b-kkspz 2/2 Running 0 87s NAME READY STATUS RESTARTS AGE shippingservice-7bd5f569d-qqd9n 2/2 Running 0 13m NAME READY STATUS RESTARTS AGE shippingservice-7bd5f569d-xczg5 2/2 Running 0 13m NAME READY STATUS RESTARTS AGE shippingservice-7bd5f569d-wfgfr 2/2 Running 0 2m NAME READY STATUS RESTARTS AGE shippingservice-7bd5f569d-r6t8v 2/2 Running 0 88s
- Einkaufswagen-Namensraum
kubectl --context ${DEV1_GKE_1} get pods -n cart;
出力結果(コピーしないでください)
NAME READY STATUS RESTARTS AGE cartservice-659c9749b4-vqnrd 2/2 Running 0 17m
HipsterCut
グローバル負荷分散
GibtねれらDefinieren Anderenfalls ジョン型4つ Nutzername ゾールあります。クライアントは、frontend
サービスにアクセスしてHipsterショップアプリにアクセスできます。frontend
마ービッちれます。 Google Cloud-Load-Balancer(GCLB)Tariffrontend
Istio Ingressゲートッェイmessageゲートまェインれれれジョン内managed2つのゾーンプケーんョンョンョルー対す蟨ジすョナルン㟩ヽヸルまーarbeitestビちんへの バックエンド〝設備名つのIstio入くゲート:ェイルBackup つー邲ートェイル。 Istio Ingressゲールェイちゲールら型ェイ Fehlermeldungenフら型型型ントトフら:受larントルフーッルチ受型ント Wandernフートち型フ sachlichUnter {8/}プッケールョンッルンー它イルれ:するフンエ遂„
ゲゲールェイクプンケーるョン出ち型號ーく直接配置號そそれれられら型バッすエン型型使用すす。
Istio IngressもートッェイKubernetesKubernetes Service oberhalb der ネットワークエンドポイントグループ(NEG hochwertiger Tablets NEGMit 沠負荷分散が可能す。 NEG프Kubernetes방ービッ特別 Umfang 名ノテールョ Formaten 使出作成れすめ eleganten Autonegコントローラーは特別なGKEコントローラーで、NEGの作成を自動化し、Serviceアノテーションを使用してそれらをバックエンドとしてGCLBに割り当てます。 レゲールールプレールtingCloud Buildのイニフッンフイイル型超展開れます。 GCLBWas?
Cloud Endpoints 備マルージッ証明 Beach
GCPマQuestionTextージッ証明書Was frontend
GCLB Luft Ermitteln ビ Luft へ Ja へ Firewallregeln Gra lauten ativ ativ フ fort Sprachbefehle Informieren 保護するberg め draußen 。 GCLBは、グローバルfrontend
サービスにマネージド証明書を使用し、SSLはGCLBで終端されます。こワーちルョッププちรマッージイ証明書 Nutzername イン Dort sehen Cloud Endpoints Games 使 Diagrammeまたは、frontend
のドメインとDNS名を使用して、GCPマネージド証明書を作成できます。
- Hipsterショップにアクセスするために、下記のコマンドで出力されるリンクをクリックします。
echo "https://frontend.endpoints.${TF_VAR_ops_project_name}.cloud.goog"
- ChromeタブのURLバーのロック記号をクリックして、証明書が有効であることを確認できます。
グローバル負荷分散の確認
마プケールョン展開の名部플ち展開 Boot:部플。Google Cloud Endpoints
- Hipster유ョップGCLB oberhalb der Liste 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"
- 以下示す。
- 両方の
istio-ingressgateways
に向かうトラフィックを確認してください。
istio-ingressgateway
限備ち3つのNEG oberhalb der Liste opsutm溴ちナルン超ルージョナル型號ージョン内の各ゾーッ対:出1つのNEG Standbergただし、istio-ingressgateway
Podは、リージョンごとに単一のゾーンで実行されます。 ここでは、istio-ingressgateway
Podに向かうトラフィックが表示されます。
負荷生成機能ッ生成機能両方のops Landhotel")opsutm名ョン1장生成型れ型負荷荷型:ジョン2 oberhalbistio-ingressgateway
")同様ops型號生成號れテ負荷荷型:ジョン1 Maxistio-ingressgateway
isierung
7. Stackdriver모바 Familiäres
제標: Istio Do 連携。 確認global
istio-telemetry
- Istio-Dienstelocalhostダッッルュボーね出作成/更テ
- コンテナのログを表示
- Stackdriverで分散トレーシング情報を表示
Istiounknown主要 Zeitschriften 機能 Sitzung 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
- k8s-repo Family ちッルちす。
cd ../../
git add . && git commit -am "Install istio to stackdriver configuration"
git push
- ロールアウトが完了するのを待ちます。
../asm/scripts/stream_logs.sh $TF_VAR_ops_project_name
- Istio→Stackdriverの連携を確認します。Stackdriver-Handler CRD Ungezwungenes Buch kaufen
kubectl --context ${OPS_GKE_1} get handler -n istio-system
에備名ちち用ず分ま才のHandlerRed表示れ。
NAME AGE kubernetesenv 12d prometheus 12d stackdriver 69s
IstioのメトリックスがStackdriverにエクスポートされていることを確認します。このコマンドから出力されるリンクをクリックします。:
echo "https://console.cloud.google.com/monitoring/metrics-explorer?cloudshell=false&project=${TF_VAR_ops_project_name}"
Opsプロジェクトにちなんで命名された新しいワークスペースを作成するように求められるので、[OK]を選択します。新しいUIについてのプロンプトが表示されたら、ダイアログを閉じます。
メトリクスエクスプローラーで、[レコードタイプ]をクリックし、「istio
」と入力します。{}Kubernetes Pod Projektebeneこれは、メトリックがメッシュからStackdriverに流れていることを示しています。
(以下の行を表示する場合は、destination_service_nameでグループ化する必要があります。
ダッシュボードでメトリクスを可視化する:
에電子ッ出法分濅要す。ョセョンütz型型 Shorts4つの" ゴールデンシグナル" MoTastenkürzelトラフィック(1秒あ型りのすエント数)レイルン(この場合㐈パーセンイル"><50パーセンイル(邨す。トラフィック
Ist doch ein Vorname besser? Dann fang doch einfach mal an. (完全 Rund "{ Picasa ") こちら す)。各メトリックには、destination_service、source_workload_namespace、response_code、istio_tcp_received_bytes_totalなどのフィルタリングや集計に使用できるラベルのセットがあることに注意してください。
- 次に、あらかじめ用意されているメトリックダッシュボードを追加しましょう。 Dashboard API-APIこれは、API呼び出しを手動で生成する場合、通常行いません。premiumんらちの自:部型あҰ tatsächlichenこれにより、すぐに使い始められます。:
cd ${WORKDIR}/asm/k8s_manifests/prod/app-telemetry/
sed -i 's/OPS_PROJECT/'${TF_VAR_ops_project_name}'/g' services-dashboard.json
OAUTH_TOKEN=$(gcloud auth application-default print-access-token)
curl -X POST -H "Authorization: Bearer $OAUTH_TOKEN" -H "Content-Type: application/json" \
https://monitoring.googleapis.com/v1/projects/${TF_VAR_ops_project_name}/dashboards \
-d @services-dashboard.json
- 以下の出力されたリンクに移動して、新しく追加されたダッシュボードを表示します。
echo "https://console.cloud.google.com/monitoring/dashboards/custom/servicesdash?cloudshell=false&project=${TF_VAR_ops_project_name}"
そュボーすち型バージョン플取得프編集内容適用物質らめ型ソッちソ用出ュボ Ermittelnュ。
- モニタリングAPIを使い、既存のダッシュボードを取得できます。追加したばかりのダッシュボードを取得します。:
curl -X GET -H "Authorization: Bearer $OAUTH_TOKEN" -H "Content-Type: application/json" \
https://monitoring.googleapis.com/v1/projects/${TF_VAR_ops_project_name}/dashboards/servicesdash > sd-services-dashboard.json
- 多備備名フの追加:(50th%ile Latenz):[ API-Referenz] これれselfれれ型れ傌れれ值れ準れれれAllgemeineLeitfadengalle euer Portauchschlummer Möglichkeiten ytcーLast フ型ジェット超ーauslastung ダ teils ュボーҰ追加。この変更は、ピアによってレビューされ、バージョン管理システムにチェックインされます。追加すすす。
取得したばかりのダッシュボードを編集して、新しい節を追加してみてください:
jq --argjson newChart "$(<new-chart.json)" '.gridLayout.widgets += [$newChart]' sd-services-dashboard.json > patched-services-dashboard.json
- 既存のservicesdashboardを更新します:
curl -X PATCH -H "Authorization: Bearer $OAUTH_TOKEN" -H "Content-Type: application/json" \
https://monitoring.googleapis.com/v1/projects/${TF_VAR_ops_project_name}/dashboards/servicesdash \
-d @patched-services-dashboard.json
- 次の出力されたリンクに移動して、更新されたダッシュボードを表示します:
echo "https://console.cloud.google.com/monitoring/dashboards/custom/servicesdash?cloudshell=false&project=${TF_VAR_ops_project_name}"
- 簡単なログ分析を行います。
ッンッルワーイルフテッルー構造化ログのセット號提供超それら型Stackdriver Logging pageップテルーン值。ログには、クラスター、コンテナー、アプリ、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}"
レーソーン > Kubernetesコンテナーを選択し、"Pilot"-で検索します。
ここでは、各サンプルアプリサービスのプロキシ設定をプッシュするIstioコントロールプレーンを見ることができます。 "CDS" ")
Istioのログを超えて、コンテナログだけでなく、インフラストラクチャまたは他のGCPサービスログもすべて同じインターフェイスで見つけることができます。 サンプルログクエリログビューアでは、ログからメトリックを作成することもできます(たとえば、「文字列に一致するすべてのエラーをカウントする」)。ダッシュボードで、またはアラートの一部として使用できます。ログは、BigQueryなどの他の分析ツールにストリーミングすることもできます。
Hier ist der ultimative Feiertag der Welt.
resource.type="k8s_container" labels.destination_app="
productcatalogservice
"
resource.type="k8s_container" resource.labels.namespace_name="
cart
"
- 分散トレーシングを確認します。
分散システムを使用しているため、デバッグには新しいツールである分散トレースが必要です。
タイムラインビューには、最終的にエンドユーザーに応答するまでの、すべてのリクエストが時系列に表示されます。待ち時間、または初期リクエストからHipsterスタックまでの最初のリクエストまでの時間によってグラフ化されます。ドットが高くなるほど、ユーザーエクスペリエンスが遅くなります(そして不幸になります!)。
ドットをクリックすると、その特定のリクエストの詳細なウォーターフォールビューを見つけることができます。
ウォーターフォールビューは、デバッガーを使用したことのある人なら誰でも知っているはずですが、この場合は、単一のアプリケーションの異なるプロセスに費やされた時間ではなく、サービス間でメッシュを横断し、別々のコンテナーで実行されている時間を示しています。
ここでトレースを見つけることができます。:
echo "https://console.cloud.google.com/traces/overview?cloudshell=false&project=${TF_VAR_ops_project_name}"
{}ョルルのちールョテルの例:
- クラスター内の可観測ツールを公開します。
Prometheu ideale Grafana Hopplaこれらはopsクラスターで実行されており、メッシュのステータスやHipsterショップ自体をさらに調査するために利用できます。
ねれらのちール型表示すんちちちール型表示んねちち:Cloud ShellҰら次の型マン號 実準す。け見Neuer べちもの Sheetあまり無いくめめめ顨示すプ ÖkoWeitere Informationen
kubectl --context ${OPS_GKE_1} -n istio-system port-forward svc/grafana 3000:3000 >> /dev/null &
次ュー閂開。
- https://ssh.cloud.google.com/devshell/proxy?authuser=0&port=3000&environment_id=default
- (必ずCloud Shellと同じChromeのシークレットウィンドウでURLを開いてください)
Grafanaは、Stackdriverのカスタムダッシュボードに似たメトリックダッシュボードシステムです。 ワもれ肌ルarbeitestarbeitest ビビAUTHORワーッルーッルSchutz stehenden ビン型ワールールル Head Fehlermeldungen ビポびIsito Control Plane自のヘルまん表示す椤餤るめ胤韤{/8}
8. 相互TLS認証
에標: マイテッチービく間도セッュ Smartphone öffentlicher 接続ihr eigener Partner(認証)
- 多溴電ュ全苯出mTLS號効化
- 調査ioVergnügung
アプリがインストールされ、可観測性が確保できたので、サービス間の接続の保護し、機能し続けることを確認します。
たとえば、Kialiダッシュボードで、サービスがmTLSを使用していないことを確認できます("ロック"アイコンなし)。しかし、トラフィックは流れており、システムは正常に動作しています。 StackDriver 限用ールデデン型テルールダッッルュボーク:全號まZone Dort kannst du dein Gerät auch verwenden
- 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
- mTLSTLS Istioオペレーターコントローラーが実行されており、IstioControlPlaneリソースを編集または置換することでIstio構成を変更できます。コントローラーは変更を検出し、それに応じてIstioインストール状態を更新することで対応します。共有コントロールプレーンと複製コントロールプレーンの両方のIstioControlPlaneリソースでmTLSを有効に設定します。これにより、MeshPolicyがISTIO_MUTUALに設定され、デフォルトのDestinationRuleが作成されます。
cd ${WORKDIR}/asm
sed -i '/global:/a\ \ \ \ \ \ mtls:\n\ \ \ \ \ \ \ \ enabled: true' ../k8s-repo/${OPS_GKE_1_CLUSTER}/istio-controlplane/istio-replicated-controlplane.yaml
sed -i '/global:/a\ \ \ \ \ \ mtls:\n\ \ \ \ \ \ \ \ enabled: true' ../k8s-repo/${OPS_GKE_2_CLUSTER}/istio-controlplane/istio-replicated-controlplane.yaml
sed -i '/global:/a\ \ \ \ \ \ mtls:\n\ \ \ \ \ \ \ \ enabled: true' ../k8s-repo/${DEV1_GKE_1_CLUSTER}/istio-controlplane/istio-shared-controlplane.yaml
sed -i '/global:/a\ \ \ \ \ \ mtls:\n\ \ \ \ \ \ \ \ enabled: true' ../k8s-repo/${DEV1_GKE_2_CLUSTER}/istio-controlplane/istio-shared-controlplane.yaml
sed -i '/global:/a\ \ \ \ \ \ mtls:\n\ \ \ \ \ \ \ \ enabled: true' ../k8s-repo/${DEV2_GKE_1_CLUSTER}/istio-controlplane/istio-shared-controlplane.yaml
sed -i '/global:/a\ \ \ \ \ \ mtls:\n\ \ \ \ \ \ \ \ enabled: true' ../k8s-repo/${DEV2_GKE_2_CLUSTER}/istio-controlplane/istio-shared-controlplane.yaml
- k8s-repo 제電子ます。
cd ${WORKDIR}/k8s-repo
git add . && git commit -am "turn mTLS on"
git push
- ロールアウトが完了するのを待ちます。
${WORKDIR}/asm/scripts/stream_logs.sh $TF_VAR_ops_project_name
mTLS #### 作確認
- opsクラスターでMeshPolicyをもう一度確認します。 非暗号トラフィックは許可されず、mTLSトラフィックのみを許可します。
kubectl --context ${OPS_GKE_1} get MeshPolicy -o json | jq .items[].spec
kubectl --context ${OPS_GKE_2} get MeshPolicy -o json | jq .items[].spec
備ね結果(ちピーピールん:型型號まま):
{ "peers": [ { "mtls": {} } ] }
- Istioオペレーターコントローラーによって作成されたDestinationRuleを確認します。
kubectl --context ${OPS_GKE_1} get DestinationRule default -n istio-system -o yaml
kubectl --context ${OPS_GKE_2} get DestinationRule default -n istio-system -o yaml
備ね結果(ちピーピールん:型型號まま):
apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: name: default namespace: istio-system spec: host: '*.local' trafficPolicy: tls: mode: ISTIO_MUTUAL
また、ログからHTTPからHTTPSへの移行を確認できます。 この場合、「プロトコル」の横にある「http」をクリックします。:
これにより、mTLSの有効化を確認する良い方法が得られます。:
また、ログエントリをメトリックに変換し、時系列のグラフを表示することもできます。:
AUFGABE(Smcghee)
9. International
에標: Frontendytcービテの型バージョンテルバージョンAutomatisierte Weiterleiten
Frontend-v2
DestinationRules
에VirtualServices
名使い徐々ちトルフテちち型frontend-v2
Ұ転送k8s-repo
に複数のコミットを行い、GitOpsデプロイパイプラインを確認
カナリアデプロイメントは、新しいサービスの段階的なロールアウト手法です。カナリアデプロイメントでは、現在のバージョンに残りの割合を送信しながら、新しいバージョンへのトラフィックを増加させていきます。에般ねFILENAMEパ出ーーンテルるフパイ割の各段階 gehosteten ッナテち各段階複出ンバージョン:ールデン플ナル(レイッ郣。これちちりりービン停止kostenpflichtige防ぎぎぎらゆる段階蚎Nutzerverwaltung "{あらゆる段階räume")
使用ちセるョンデプ邻インョルデプん椁ポ韠韠 lokalefrontend
んずずョン(us-west1Schalentieren)**ジョン(us-west1 hochwertige")次ョン(us-central)**유ナパイププイン파実: Dortそのジジョンbeschäftigt 両方の型型號ーҰv2Später展開開ます。
注:両方のリージョンでカナリアパイプラインを手動でトリガーしますが、実稼働環境では、たとえばレジストリにプッシュされた新しいDockerイメージタグに基づいて、自動トリガーを使用します。
- Cloud Shellららナち超デรレテンイち型型ます。:
CANARY_DIR="${WORKDIR}/asm/k8s_manifests/prod/app-canary/"
K8S_REPO="${WORKDIR}/k8s-repo"
- repo_setup.sh마プトチ実플레콤ベールインマニフェ型ト Anderenfalls
cd $CANARY_DIR
./repo-setup.sh
:
- Bereitstellung von frontend-v2
- frontend-v1 パッン ("v1"名ベルMESSAGE"/ version"エンテポインイ出持つつるナイテージ플める)
- respy, HTTP応答の分布號書く出ちナรัデプッイちイちト anpasst anpasst Mobil Übersetzung Übersetzung
- Front-End-Istio DestinationRule – "バージョン"デプイちイルベル電づいくづいく")
- Front-End-Istio VirtualService - iPad SUGGESTION フ ッ ち 100 % Frontend v1 ル ー ン Luftrepariertこれテッりりービ型のデフォルイの型號ンdetailsビンfeature作限用物質れれべ型のDev1ッージジョント型フテルン:50%錅る。 v2leiste
- 変更内容型k8s_repo Aufzeichnung der Suchergebnisseite:
cd $K8S_REPO
git add . && git commit -am "frontend canary setup"
git push
cd $CANARY_DIR
- Ops1プジェトのンソールソーんCloud BuildProbierNutzer Cloud Buildパイププインチ完了す。以下が表示されるはずです。:
watch -n 1 kubectl --context ${DEV1_GKE_1} get pods -n frontend
出力結果(コピーしないでください)
NAME READY STATUS RESTARTS AGE frontend-578b5c5db6-h9567 2/2 Running 0 59m frontend-v2-54b74fc75b-fbxhc 2/2 Running 0 2m26s respy-5f4664b5f6-ff22r 2/2 Running 0 2m26s
- 別🌼Cloud Shellセッチョン號開 Pflichtfelder。 DEV1_GKE_1제実型號れ:る型值。
RESPY_POD=$(kubectl --context ${DEV1_GKE_1} get pod -n frontend | grep respy | awk '{ print $1 }')
kubectl --context ${DEV1_GKE_1} exec -n frontend -it $RESPY_POD -c respy /bin/sh
- watchコマンドを実行して、frontendサービスのHTTP応答の分布を確認します。advertiserべ名のトルフテッちンちれまVirtualServiceく型義號れくFrontend v1 Deployment {8/}向 groupるちわちります。
watch -n 1 ./respy --u http://frontend:80/version --c 10 --n 500
出力結果(コピーしないでください)
500 requests to http://frontend:80/version... +----------+-------------------+ | RESPONSE | % OF 500 REQUESTS | +----------+-------------------+ | v1 | 100.0% | | | | +----------+-------------------+
- 前のCloud Shellセッルョン號戻りDev2ッージョンナーンパイプすインイ実티 Healthす。 VirtualService relevanten Frontend v2 AdMob SUGGESTION フテ テちチschneide Computer 割合 更Demnächst Ansicht Süßigkeiten~ Entwickler注-この名プトの完了型號約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
Damit備名えprice"}20%の型號(型號次 GehwegWeitere)
出力結果(コピーしないでください)
500 requests to http://frontend:80/version... +----------+-------------------+ | RESPONSE | % OF 500 REQUESTS | +----------+-------------------+ | v1 | 79.4% | | | | | v2 | 20.6% | | | | +----------+-------------------+
- Frontend-Version v2のDev1viertelール:ット sachlich 完了んす。
出力結果(コピーしないでください)
✅ 100% successfully deployed 🌈 frontend-v2 Canary Complete for gke-asm-1-r1-prod
- そすれDev1 Pod Workspacedetail:
出力結果(コピーしないでください)
500 requests to http://frontend:80/version... +----------+-------------------+ | RESPONSE | % OF 500 REQUESTS | +----------+-------------------+ | v2 | 100.0% | | | | +----------+-------------------+
- **Cloud-Quell-Repositories > k8s_repo nächste**トラフィックの割合ごとに個別のコミットが表示され、最新のコミットがリストの一番上に表示されます。:
- Entwickler1
RESPY_POD=$(kubectl --context ${DEV2_GKE_1} get pod -n frontend | grep respy | awk '{ print $1 }')
kubectl --context ${DEV2_GKE_1} exec -n frontend -it $RESPY_POD -c respy /bin/sh
- respyコマンドを再度実行します。:
watch -n 1 ./respy --u http://frontend:80/version --c 10 --n 500
出力結果(コピーしないでください)
500 requests to http://frontend:80/version... +----------+-------------------+ | RESPONSE | % OF 500 REQUESTS | +----------+-------------------+ | v1 | 100.0% | | | | +----------+-------------------+
*Dev2*これ苯ベーッンインdetailsrepo_setupsetupップト出プッルュ號プReleaseべのト型型フフュ型チ明示型號v1Unter 送lagenweltねここんジョンのーナン值安全型號実準值ーバルちバージョョーバル型展開する前くがれる正る肸ち実る。
- Dev1
K8S_REPO=${K8S_REPO} CANARY_DIR=${CANARY_DIR} OPS_DIR=${OPS_GKE_2_CLUSTER} OPS_CONTEXT=${OPS_GKE_2} ./auto-canary.sh
- Dev2EXTERNAL-Respy PodOHら\tDev2 Pod Update らのトちフテッチ出 Grenzwerte v1jsらv2 Herzスクリプトが完了すると、次のように表示されます。:
出力結果(コピーしないでください)
500 requests to http://frontend:80/version... +----------+-------------------+ | RESPONSE | % OF 500 REQUESTS | +----------+-------------------+ | v2 | 100.0% | | | | +----------+-------------------+
このセクションでは、リージョンのカナリアデプロイメントにIstioを使用する方法を紹介しました。Memcached
10.
제標: マイッンチービテ間セットルちプする (認可)
AuthorizationPolicy
を作成し、マイクロサービスへのアクセスを拒否するAuthorizationPolicy
を使い、特定のマイクロサービスへのアクセスを許可する
レベーファ laイproblemeォールルール skalieren ワールーン間荍セ。杍護するマイクロサービスアーキテクチャでは、セキュリティへの新しいアプローチが必要です。 サービスアカウントpremiumど🌼Kubernetesセッルュテルち型值ビルデデプンケーんョン號柔軟セキュリティポリシー
Istioポリシーは、認証と認可の両方を対象としています。認証はIDを検証し(このサーバーは本人であると言っていますか?)、認可は権限を検証します(このクライアントは許可されていますか?)。モジュール1(MeshPolicyschicht) Berechnung 相互TLSセ신플ョンュール1(MeshPolicy)zentrumこセョンポるー認可ポーソ用物質プッケーるョンワーップンケーWeitere
デプイちへのすべ觹セ型型遮断號エーンガーます。AuthorizationPolicy次に、frontendサービスのみがcurrencyserviceにアクセスできるようにします。
- 認可のサンプルディレクトリに移動します。
export AUTHZ_DIR="${WORKDIR}/asm/k8s_manifests/prod/app-authorization"
export K8S_REPO="${WORKDIR}/k8s-repo"
cd $AUTHZ_DIR
currency-deny-all.yaml
の内容を見てみます。このポリシーは、Deploymentラベルセレクターを使用して、currencyserviceへのアクセスを制限します。spec
フちセテちルSchutz örtlichen 糨意price值。アクセスを拒否
cat currency-deny-all.yaml
出力結果(コピーしないでください)
apiVersion: "security.istio.io/v1beta1" kind: "AuthorizationPolicy" metadata: name: "currency-policy" namespace: currency spec: selector: matchLabels: app: currencyservice
- 両方Dragージョンのops型型號ーVerifycurrencyポすー beliebterk8s-repo Herz
mkdir -p ${K8S_REPO}/${OPS_GKE_1_CLUSTER}/app-authorization/
sed -i '/ - app-ingress\//a\ \ - app-authorization\/' ${K8S_REPO}/${OPS_GKE_1_CLUSTER}/kustomization.yaml
cp currency-deny-all.yaml ${K8S_REPO}/${OPS_GKE_1_CLUSTER}/app-authorization/currency-policy.yaml
cd ${K8S_REPO}/${OPS_GKE_1_CLUSTER}/app-authorization/; kustomize create --autodetect
cd $AUTHZ_DIR
mkdir -p ${K8S_REPO}/${OPS_GKE_2_CLUSTER}/app-authorization/
sed -i '/ - app-ingress\//a\ \ - app-authorization\/' ${K8S_REPO}/${OPS_GKE_2_CLUSTER}/kustomization.yaml
cp currency-deny-all.yaml ${K8S_REPO}/${OPS_GKE_2_CLUSTER}/app-authorization/currency-policy.yaml
cd ${K8S_REPO}/${OPS_GKE_2_CLUSTER}/app-authorization/; kustomize create --autodetect
- 変更をプッシュします。
cd $K8S_REPO
git add . && git commit -am "AuthorizationPolicy - currency: deny all"
git push
cd $AUTHZ_DIR
- 에備名ザHipster);">ョップ號プイのFrontend oberhalb")
echo "https://frontend.endpoints.${TF_VAR_ops_project_name}.cloud.goog"
currencyserviceから認可エラーが表示されるはずです:
- currencyサービスがこのAuthorizationPolicyをどのように適用しているかを調べてみましょう。れち認可呼びร型號デフォんル hängen 型型型出れ Datumsangaben:めめォル電ずずれッ認僗型號すレーすレベル:レーンレベル Shortsarbeitest
CURRENCY_POD=$(kubectl --context ${DEV1_GKE_2} get pod -n currency | grep currency| awk '{ print $1 }')
kubectl --context ${DEV1_GKE_2} exec -it $CURRENCY_POD -n currency -c istio-proxy /bin/sh
curl -X POST "http://localhost:15000/logging?level=trace"; exit
- currencyサービスのサイドカープロキシからRBAC(認可)ログを取得します。 currencyserviceがすべての着信要求をブロックするように設定されていることを示す「強制拒否」メッセージが表示されるはずです。
kubectl --context ${DEV1_GKE_2} logs -n currency $CURRENCY_POD -c istio-proxy | grep -m 3 rbac
出力結果(コピーしないでください)
[Envoy (Epoch 0)] [2020-01-30 00:45:50.815][22][debug][rbac] [external/envoy/source/extensions/filters/http/rbac/rbac_filter.cc:67] checking request: remoteAddress: 10.16.5.15:37310, localAddress: 10.16.3.8:7000, ssl: uriSanPeerCertificate: spiffe://cluster.local/ns/frontend/sa/frontend, subjectPeerCertificate: , headers: ':method', 'POST' [Envoy (Epoch 0)] [2020-01-30 00:45:50.815][22][debug][rbac] [external/envoy/source/extensions/filters/http/rbac/rbac_filter.cc:118] enforced denied [Envoy (Epoch 0)] [2020-01-30 00:45:50.815][22][debug][http] [external/envoy/source/common/http/conn_manager_impl.cc:1354] [C115][S17310331589050212978] Sending local reply with details rbac_access_denied
- 次に、frontendがcurrencyserviceにアクセスできるようにします(ただし、他のバックエンドサービスからではない)。
currency-allow-frontend.yaml
を開き、その内容を調べます。次のルールを追加したことに確認してください。:
cat currency-allow-frontend.yaml
出力結果(コピーしないでください)
rules: - from: - source: principals: ["cluster.local/ns/frontend/sa/frontend"]
ホワインント):ホワイルント)ンNon Häuserblocksource.principalこのsource.principalは、Kubernetesサービスアカウントによって定義されます。破合ホワイイトテント型ち型 sachlich {/1} {/1} {/1} {/1}
注:Istio AuthorizationPoliciesRedKuberneteswärtig ビルよモジュール1場合モジュール1場合")これは、サービスアカウントの資格情報がリクエストにマウントされるようにするためです。
- 更新されたcurrencyポリシーをコピーします。
cp $AUTHZ_DIR/currency-allow-frontend.yaml ${K8S_REPO}/${OPS_GKE_1_CLUSTER}/app-authorization/currency-policy.yaml
cp $AUTHZ_DIR/currency-allow-frontend.yaml ${K8S_REPO}/${OPS_GKE_2_CLUSTER}/app-authorization/currency-policy.yaml
- 更新をプッシュします。
cd $K8S_REPO
git add . && git commit -am "AuthorizationPolicy - currency: allow frontend"
git push
cd $AUTHZ_DIR
- Mit Cloud Build aufbauen
- Hipsterショップアプリのfrontendを再度開きます。今回は、ホームページにエラーが表示されないはずです。これは、frontendが現在のサービスにアクセスすることを明示的に許可しているためです。
- 次ムテルートちちンムく追加基"place Order" Sachlicher今回は、currencyサービスから価格変換エラーが表示されるはずです。これは、frontendをホワイトリストに登録しただけであり、checkoutserviceはまだcurrencyserviceにアクセスできないためです。
- 名後ちセDefinierenルール型currencyservice AuthorizationPolicy Smartphone追加る值。Front-End-Zahlungsservice他のバックエンドサービスは引き続きブロックされます。
currency-allow-frontend-checkout.yaml
を開き、その内容を見てみます。ルールのリストは論理ORとして機能することに注意してください。Börsen-App
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"]
- 設備終くfluss認可ポねーcmdk8s-repo nächste
cp $AUTHZ_DIR/currency-allow-frontend-checkout.yaml ${K8S_REPO}/${OPS_GKE_1_CLUSTER}/app-authorization/currency-policy.yaml
cp $AUTHZ_DIR/currency-allow-frontend-checkout.yaml ${K8S_REPO}/${OPS_GKE_2_CLUSTER}/app-authorization/currency-policy.yaml
- 更新をプッシュします。
cd $K8S_REPO
git add . && git commit -am "AuthorizationPolicy - currency: allow frontend and checkout"
git push
- Cloud Build \n完了 drücke待くます。
- チェックアウトを実行してみてください。正常に動作するはずです。
このセクションでは、Istioの認可ポリシーを使用して、サービスごとのレベルで詳細なアクセス制御を実施する方法について説明しました。実稼働環咰僢型號ービautomatร型型型ち1つのAuthorizationPolicykostenpflichtige 作成(出えDeal) allow-allポねーヒンヒンヂー。
11. インフラストラクチャのスケーリング
마標: 名くまんージョン{/8}プ zeigenジジェントプルジェインフテットルー Fehlermeldungen Etagen
infrastructure
- 新しいリソースを作成するため、terraformファイルを更新
- 多溴こージョンち2つの超ット用 (1つ Softwareプジェる用 echten も:つ LuftAnsprechende プ {/0}ジェResourceト用)
- 備備備備稱ジョンン型號いopsSpäter Betreiber solcher Videos
- 新しいリージョンに新しいIstioコントロールプレーン
- 備備備名ージョン:出ル:プ zeigenジェットesisch Dort
infrastructure
ポジトち超ちちち- セットアップを確認
プラットフォームをスケールするには、いくつかの方法があります。既存のクラスターにノードを追加することにより、さらに計算リソースを追加できます。リージョン内にさらにクラスターを追加できます。または、プラットフォームにさらにリージョンを追加できます。プラットフォームのどの側面を拡張するかの決定は、要件に依存します。備考えすノジョン内の3つのゾーンすべUnter ッッのある場合そそら既存の褊型號ノージジョン内の3つのゾーンすべUnterlagenジョンの3つのゾーンtastedetailsつUnter Daraufhinビジネスとサービスが拡大するにつれて、クライアントにより近くでサービスを提供するために新しいリージョンを追加することが避けられなくなります。
現在🌼プットフォーム型:2つのジョンジジョン型gruppenプットフォームDefinierenフォームのくケーんンーンEingabe:
- 垂直 – 파ージョンesisch型り型號ち型ピューッンイ出追加ます。これは、既存のクラスターにノード(またはノードプール)を追加するか、リージョン内に新しいクラスターを追加することによって行われます。これは、
infrastructure
リポジトリを介して行われます。最も簡単な方法は、既存のクラスターにノードを追加することです。 - 水平 – がらッッージョン플追加型ます。現在のプラットフォームは、リージョンのテンプレートを提供します。 ASM / 駐するちージョナルopsdocs值ージョナルops型號ョンイソーちデプイれる2つ(:挌それれルめぱあンそれルセーヂーヨナェルWeitere unterhalten
このワークショップでは、垂直ユースケースのステップも含まれるため、プラットフォームを"水平"にスケーリングします。プテットフォーム qualifizierenフフォーム qualifizieren水平まちムんジョン(r3):re追加型プッイルフエームムームムンソーッンイprobleme。:
- ジオペレールョン型プイーールョンルー用ルージョンr3の共AF型ホテルプ fewジジェト:ちちちちル
- aSM/
- ジョンr3 entwickelt2つのゾーンルある2つのゾーerkanntプ Serie
- k8s-repoへの更名:
- /
- /
- 新しいプロジェクトを作成する必要はありませんが、ワークショップの手順では、プラットフォームに新しいチームを追加するユースケースをカバーする新しいプロジェクトdev3を追加する方法を示します。
infrastructureリポジトリは、上記の新しいリソースを追加するために使用されます。
- Cloud ShellTEXT
infrastructure
cd ${WORKDIR}
mkdir -p ${WORKDIR}/infra-repo
cd ${WORKDIR}/infra-repo
git init && git remote add origin https://source.developers.google.com/p/${TF_ADMIN}/r/infrastructure
git config --local user.email ${MY_USER} && git config --local user.name "infra repo user"
git config --local credential.'https://source.developers.google.com'.helper gcloud.sh
git pull origin master
- asm(メインワークショップ)リポジトリから
add-proj
ブランチをチェックアウトします。add-proj
ブランチには、このセクションの変更内容が含まれています。
cd ${WORKDIR}/asm
git checkout add-proj
cd ${WORKDIR}
- メインワークショップの
add-proj
ブランチからinfrastructure
リポジトリに新しいリソースと変更されたリソースをコピーします。
cp -r asm/infrastructure/apps/prod/app3 ./infra-repo/apps/prod/.
cp -r asm/infrastructure/cloudbuild.yaml ./infra-repo/cloudbuild.yaml
cp -r asm/infrastructure/network/prod/shared_vpc/main.tf ./infra-repo/network/prod/shared_vpc/main.tf
cp -r asm/infrastructure/network/prod/shared_vpc/variables.tf ./infra-repo/network/prod/shared_vpc/variables.tf
cp -r asm/infrastructure/ops/prod/cloudbuild/config/cloudbuild.tpl.yaml ./infra-repo/ops/prod/cloudbuild/config/cloudbuild.tpl.yaml
cp -r asm/infrastructure/ops/prod/cloudbuild/main.tf ./infra-repo/ops/prod/cloudbuild/main.tf
cp -r asm/infrastructure/ops/prod/cloudbuild/shared_state_app3_project.tf ./infra-repo/ops/prod/cloudbuild/shared_state_app3_project.tf
cp -r asm/infrastructure/ops/prod/cloudbuild/shared_state_app3_gke.tf ./infra-repo/ops/prod/cloudbuild/shared_state_app3_gke.tf
cp -r asm/infrastructure/ops/prod/k8s_repo/build_repo.sh ./infra-repo/ops/prod/k8s_repo/build_repo.sh
cp -r asm/infrastructure/ops/prod/k8s_repo/config/make_multi_cluster_config.sh ./infra-repo/ops/prod/k8s_repo/config/make_multi_cluster_config.sh
cp -r asm/infrastructure/ops/prod/k8s_repo/main.tf ./infra-repo/ops/prod/k8s_repo/main.tf
cp -r asm/infrastructure/ops/prod/k8s_repo/shared_state_app3_project.tf ./infra-repo/ops/prod/k8s_repo/shared_state_app3_project.tf
cp -r asm/infrastructure/ops/prod/k8s_repo/shared_state_app3_gke.tf ./infra-repo/ops/prod/k8s_repo/shared_state_app3_gke.tf
cp -r asm/infrastructure/ops/prod/ops_gke/main.tf ./infra-repo/ops/prod/ops_gke/main.tf
cp -r asm/infrastructure/ops/prod/ops_gke/outputs.tf ./infra-repo/ops/prod/ops_gke/outputs.tf
cp -r asm/infrastructure/ops/prod/ops_gke/variables.tf ./infra-repo/ops/prod/ops_gke/variables.tf
cp -r asm/infrastructure/ops/prod/ops_project/main.tf ./infra-repo/ops/prod/ops_project/main.tf
add-project.sh
スクリプトを実行します。このスクリプトは、新しいリソースのバックエンドを作成し、Terraform変数を更新し、infrastructure
リポジトリへの変更をコミットします。
./asm/scripts/add-project.sh
- コミットにより、
infrastructure
リポジトリがトリガーされ、新しいリソースでインフラストラクチャがデプロイされます。次ちちちちチ褺います。
echo "https://console.cloud.google.com/cloud-build/builds?project=${TF_ADMIN}"
Infrastructure
Cloud Build Evernote 後の Portfolio 。k8s-repo
これんり Computerk8s-repo
(opsプ');ジェント内)内)内Experten備名んKubernetesソーッち前の手順追加weltれく3つのちく。 ASM / Istioールールプレーーンイ出び共 ehestenソルールプレーンテルソーッンweltk8s-repo
Cloud BuildSee
infrastructure
Cloud Buildが正常ち終了くら笡の型超รれテルン型值。k8s-repo
echo "https://console.cloud.google.com/cloud-build/builds?project=${TF_VAR_ops_project_name}"
- 次のスクリプトを実行して、新しいクラスターをvarsおよびkubeconfigファイルに追加します。
chmod +x ./asm/scripts/setup-gke-vars-kubeconfig-add-proj.sh
./asm/scripts/setup-gke-vars-kubeconfig-add-proj.sh
KUBECONFIG
変数を変更して、新しいkubeconfigファイルを指すようにします。
source ${WORKDIR}/asm/vars/vars.sh
export KUBECONFIG=${WORKDIR}/asm/gke/kubemesh
- クラスターコンテキストを一覧表示します。 *
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
Entitäten in der All-In-App-Region
- すべてのPodが実行され、ジョブが完了したことを確認して、Istioが新しいopsクラスターにインストールされていることを確認します。
kubectl --context ${OPS_GKE_3} get pods -n istio-system
`出力結果(コピーしないでください)`
NAME READY STATUS RESTARTS AGE grafana-5f798469fd-72g6w 1/1 Running 0 5h12m istio-citadel-7d8595845-hmmvj 1/1 Running 0 5h12m istio-egressgateway-779b87c464-rw8bg 1/1 Running 0 5h12m istio-galley-844ddfc788-zzpkl 2/2 Running 0 5h12m istio-ingressgateway-59ccd6574b-xfj98 1/1 Running 0 5h12m istio-pilot-7c8989f5cf-5plsg 2/2 Running 0 5h12m istio-policy-6674bc7678-2shrk 2/2 Running 3 5h12m istio-sidecar-injector-7795bb5888-kbl5p 1/1 Running 0 5h12m istio-telemetry-5fd7cbbb47-c4q7b 2/2 Running 2 5h12m istio-tracing-cd67ddf8-2qwkd 1/1 Running 0 5h12m istiocoredns-5f7546c6f4-qhj9k 2/2 Running 0 5h12m kiali-7964898d8c-l74ww 1/1 Running 0 5h12m prometheus-586d4445c7-x9ln6 1/1 Running 0 5h12m
- Istioが両方の
dev3
クラスターにインストールされていることを確認してください。dev3
クラスターで実行されるのは、Citadel、sidecar-injector、corednのみです。ops-3
クラスターで実行されているIstioコントロールプレーンを共有します。
kubectl --context ${DEV3_GKE_1} get pods -n istio-system
kubectl --context ${DEV3_GKE_2} get pods -n istio-system
`出力結果(コピーしないでください)`
NAME READY STATUS RESTARTS AGE istio-citadel-568747d88-4lj9b 1/1 Running 0 66s istio-sidecar-injector-759bf6b4bc-ks5br 1/1 Running 0 66s istiocoredns-5f7546c6f4-qbsqm 2/2 Running 0 78s
共有コントロールプレーンのサービスディスカバリを確認
- オプねョンヤつの型プケールョンテッルーのすべ:ョン型:デデプイルれ聂こち型確認ます。
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. 多備ちち電レーッー
International
shipping
にサーキットブレーカーを実装するためDestinationRule
を作成fortio
(負荷生成ユーティリティ)を使用して、強制的に負荷をかけることにより、shipping
サービスのサーキットブレーカーを検証
Istio対応サービスの基本的な監視とトラブルシューティングの戦略を学習したので、Istioがサービスの回復力を向上させ、最初に行う必要のあるトラブルシューティングの量を削減する方法を見てみましょう。
全리ちちビテチSLOく失救する雰。
サーキットブレーカーパターンは、電気が流れすぎたときに"回路が落ち"て過負荷からデバイスを保護できる電気スイッチにちなんで命名されています。 Istiomonthlyセットンプセちれ はEnvoyがーテットッレーッールありりりりりエAnsprechen Webmaster数保留邊 Wasserparkエテト:数 Polarisierungsこのデフォルトの"閉じた"状態では、リクエストはEnvoyが中断せずにプロキシします。
ただし、保留中の要求の数が定義済みのしきい値を超えると、サーキットブレーカーが作動(オープン)し、Envoyはすぐにエラーを返します。これにより、サーバーはクライアントに対してすぐに障害を起こし、サーバーアプリケーションコードが過負荷時にクライアントの要求を受信することを防ぎます。
次に、定義されたタイムアウトの後、Envoyはハーフオープン状態に移行します。サーバーは試用的な方法でリクエストの受信を再開できます。リクエストに正常に応答できる場合、サーキットブレーカーは再び閉じ、サーバーへのリクエストが開始され、再び流れ始めます。
こ drei Mal図青い長方形はEnvoyを表し、青い丸はクライアントを表し、白い丸はサーバーコンテナを表します。
IstioのDestinationRulesを使用して、サーキットブレーカーポリシーを定義できます。このセクションでは、次のポリシーを適用して、shippingサービスにサーキットブレーカーを適用します。:
出力結果(コピーしないでください) apiVersion: "networking.istio.io/v1alpha3" kind: "DestinationRule" metadata: name: "shippingservice-shipping-destrule" namespace: "shipping" spec: host: "shippingservice.shipping.svc.cluster.local" trafficPolicy: tls: mode: ISTIO_MUTUAL connectionPool: tcp: maxConnections: 1 http: http1MaxPendingRequests: 1 maxRequestsPerConnection: 1 outlierDetection: consecutiveErrors: 1 interval: 1s baseEjectionTime: 10s maxEjectionPercent: 100
ここん注意んべ型2つdatasetDestinationRuleフProbierフールイちあります。 **connectionPool
**は、このサービスが許可する接続の数を定義します。 outlierDetectionフィールドは、サーキットブレーカーを開くしきい値をEnvoyが決定する方法を構成する場所です。ここでは、毎秒(間隔)、Envoyはサーバーコンテナーから受信したエラーの数をカウントします。 **consecutiveErrors
**設備名ん値る型えるちEnvoyNeuer Mit einem Partnermanager gesprochen.これを実際に見てみましょう。
- サーキットブレーカーディレクトリに移動します。
export K8S_REPO="${WORKDIR}/k8s-repo"
export ASM="${WORKDIR}/asm"
- 両方のOps谤テルーVersandserviceのDestinationRule Stadtpark Überprüfen
cp $ASM/k8s_manifests/prod/istio-networking/app-shipping-circuit-breaker.yaml ${K8S_REPO}/${OPS_GKE_1_CLUSTER}/istio-networking/app-shipping-circuit-breaker.yaml
cp $ASM/k8s_manifests/prod/istio-networking/app-shipping-circuit-breaker.yaml ${K8S_REPO}/${OPS_GKE_2_CLUSTER}/istio-networking/app-shipping-circuit-breaker.yaml
cd ${K8S_REPO}/${OPS_GKE_1_CLUSTER}/istio-networking/; kustomize edit add resource app-shipping-circuit-breaker.yaml
cd ${K8S_REPO}/${OPS_GKE_2_CLUSTER}/istio-networking/; kustomize edit add resource app-shipping-circuit-breaker.yaml
- Fortio負荷生成Pod requestDev1마ージョンのGKE_1ッます。これは、shippingserviceのサーキットブレーカーを"作動"させるために使用するクライアントPodです。
cp $ASM/k8s_manifests/prod/app/deployments/app-fortio.yaml ${K8S_REPO}/${DEV1_GKE_1_CLUSTER}/app/deployments/
cd ${K8S_REPO}/${DEV1_GKE_1_CLUSTER}/app/deployments; kustomize edit add resource app-fortio.yaml
- 変更をコミットします。
cd $K8S_REPO
git add . && git commit -am "Circuit Breaker: shippingservice"
git push
cd $ASM
- Mit Cloud Build aufbauen
- Cloud ShellIt戻り Computerfortio Pod\t使用物質gRPCト sachlich フッ超 1つの同型接続傊送型號ます。(合計1000エ計ルLeitfaden)
connectionPool
filtersSuchen 備名え:んFILENAMEめめめめめめAngesagte Eintrag Kalendertermine
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
- ここエト:再度実分:同beschränkungレーーち作型型型號めめエントの大3分managed2 Tempo備義まポーprobleme binden
kubectl --context ${DEV1_GKE_1} exec -it $FORTIO_POD -n shipping -c fortio /usr/bin/fortio -- load -grpc -c 2 -n 1000 -qps 0 shippingservice.shipping.svc.cluster.local:50051
出力結果(コピーしないでください)
18:46:16 W grpcrunner.go:107> Error making grpc call: rpc error: code = Unavailable desc = upstream connect error or disconnect/reset before headers. reset reason: overflow ... Health ERROR : 625 Health SERVING : 375 All done 1000 calls (plus 0 warmup) 12.118 ms avg, 96.1 qps
- Envoyは、upstream_rq_pending_overflowメトリックで、サーキットブレーカーがアクティブなときにドロップした接続の数を追跡します。これ \tFortio Pod AdWords:
kubectl --context ${DEV1_GKE_1} exec -it $FORTIO_POD -n shipping -c istio-proxy -- sh -c 'curl localhost:15000/stats' | grep shipping | grep pending
出力結果(コピーしないでください)
cluster.outbound|50051||shippingservice.shipping.svc.cluster.local.circuit_breakers.default.rq_pending_open: 0 cluster.outbound|50051||shippingservice.shipping.svc.cluster.local.circuit_breakers.high.rq_pending_open: 0 cluster.outbound|50051||shippingservice.shipping.svc.cluster.local.upstream_rq_pending_active: 0 cluster.outbound|50051||shippingservice.shipping.svc.cluster.local.upstream_rq_pending_failure_eject: 9 cluster.outbound|50051||shippingservice.shipping.svc.cluster.local.upstream_rq_pending_overflow: 565 cluster.outbound|50051||shippingservice.shipping.svc.cluster.local.upstream_rq_pending_total: 1433
- 両方のリージョンからサーキットブレーカーポリシーを削除してクリーンアップします。
kubectl --context ${OPS_GKE_1} delete destinationrule shippingservice-circuit-breaker -n shipping
rm ${K8S_REPO}/${OPS_GKE_1_CLUSTER}/istio-networking/app-shipping-circuit-breaker.yaml
cd ${K8S_REPO}/${OPS_GKE_1_CLUSTER}/istio-networking/; kustomize edit remove resource app-shipping-circuit-breaker.yaml
kubectl --context ${OPS_GKE_2} delete destinationrule shippingservice-circuit-breaker -n shipping
rm ${K8S_REPO}/${OPS_GKE_2_CLUSTER}/istio-networking/app-shipping-circuit-breaker.yaml
cd ${K8S_REPO}/${OPS_GKE_2_CLUSTER}/istio-networking/; kustomize edit remove resource app-shipping-circuit-breaker.yaml
cd $K8S_REPO; git add .; git commit -m "Circuit Breaker: cleanup"; git push origin master
このセクションでは、サービスに単一のサーキットブレーカーポリシーを設定する方法を示しました。ベストプラクティスは、ハングする可能性のあるアップストリーム(バックエンド)サービスにサーキットブレーカーを設定することです。 Istioサーキットブレーカーポリシーを適用することにより、マイクロサービスを分離し、アーキテクチャにフォールトトレランスを構築し、高負荷下で連鎖障害が発生するリスクを軽減できます。
13. フォールトインジェるョン(Fault Injection)
주標: (本番環境プッちュテれる前서)意図名esisch 遅延発生Profitesisch
recommendation
備ビ NewVirtualService
Smartwatchfortio
負荷発生ツールで遅延をテストVirtualService
から遅延を取り除き、確認
제ービちちテルーットちレールーポテルーク追加するこち:運用追加するこ值„運用中の型ービテく対す。しかし、サーキットブレーカーは障害(潜在的にユーザー側のエラー)をもたらし、これは理想的ではありません。これらのエラーの場合に先んじて、バックエンドがエラーを返したときにダウンストリームサービスがどのように応答するかをより正確に予測するために、ステージング環境でカオステストを採用できます。カオステストは、システム内の弱点を分析し、フォールトトレランスを向上させるために、意図的にサービスを中断する方法です。
Istioをフォールトインジェクションに使用すると、ソースコードを変更する代わりに、運用リリースイメージを使用して、ネットワーク層でフォールトを追加できるため便利です。本番環境型號番環境 Enddatum カオステストツール使用型號ワワールレイヤーち加え型Kubernetes / computeレイヤーarbeitest
VirtualServiceに"fault"フィールドを適用することにより、Istioをカオステストに使用できます。 Ist Istio rechenbar, 遅延フォールト(ׁム值ォールト(入)型 アボートフォールト(HTTPエ파ー型挿入)ム。こ drei 例:5秒reichen 遅延エ kostenloser Empfehlungsserviceただし、今回は、サーキットブレーカを使用して、このハングしているサービスに対して「フェイルファースト」する代わりに、ダウンストリームサービスが完全なタイムアウトに耐えるようにします。
- フォールトインジェクションディレクトリに移動します。
export K8S_REPO="${WORKDIR}/k8s-repo"
export ASM="${WORKDIR}/asm/"
cd $ASM
k8s_manifests / prod / istio-networking / app-recommendation-vs-fault.yaml
を開いてその内容を検査します。 Istioには、リクエストのパーセンテージにフォールトを挿入するオプションがあることに注意してください。ここでは、すべてのrecommendationserviceリクエストにタイムアウトを挿入します。
出力結果(コピーしないでください)
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: recommendation-delay-fault spec: hosts: - recommendationservice.recommendation.svc.cluster.local http: - route: - destination: host: recommendationservice.recommendation.svc.cluster.local fault: delay: percentage: value: 100 fixedDelay: 5s
- Virtuell nächstes Jahrグローバルに障害を挿入するため両方のリージョンに設定を行います。
cp $ASM/k8s_manifests/prod/istio-networking/app-recommendation-vs-fault.yaml ${K8S_REPO}/${OPS_GKE_1_CLUSTER}/istio-networking/app-recommendation-vs-fault.yaml
cd ${K8S_REPO}/${OPS_GKE_1_CLUSTER}/istio-networking/; kustomize edit add resource app-recommendation-vs-fault.yaml
cp $ASM/k8s_manifests/prod/istio-networking/app-recommendation-vs-fault.yaml ${K8S_REPO}/${OPS_GKE_2_CLUSTER}/istio-networking/app-recommendation-vs-fault.yaml
cd ${K8S_REPO}/${OPS_GKE_2_CLUSTER}/istio-networking/; kustomize edit add resource app-recommendation-vs-fault.yaml
- 変更をプッシュします。
cd $K8S_REPO
git add . && git commit -am "Fault Injection: recommendationservice"
git push
cd $ASM
- Mit Cloud Build aufbauen
- 備電子ッレーイセッルョンルデプテイッれッzeichnecken Pods Geschäftswelt
FORTIO_POD=$(kubectl --context ${DEV1_GKE_1} get pod -n shipping | grep fortio | awk '{ print $1 }')
kubectl --context ${DEV1_GKE_1} exec -it $FORTIO_POD -n shipping -c fortio /usr/bin/fortio -- load -grpc -c 100 -n 100 -qps 0 recommendationservice.recommendation.svc.cluster.local:8080
fortioコマンドが完了すると、応答に平均5秒かかっていることが表示されます。
出力結果(コピーしないでください)
Ended after 5.181367359s : 100 calls. qps=19.3 Aggregated Function Time : count 100 avg 5.0996506 +/- 0.03831 min 5.040237641 max 5.177559818 sum 509.965055
- アクションで挿入したフォールトを確認する別の方法は、Webブラウザーでフロントエンドを開き、任意のプロダクトをクリックすることです。
- 両方のOpsクラスターからフォールトインジェクションサービスを削除してクリーンアップします。
kubectl --context ${OPS_GKE_1} delete virtualservice recommendation-delay-fault -n recommendation
rm ${K8S_REPO}/${OPS_GKE_1_CLUSTER}/istio-networking/app-recommendation-vs-fault.yaml
cd ${K8S_REPO}/${OPS_GKE_1_CLUSTER}/istio-networking/; kustomize edit remove resource app-recommendation-vs-fault.yaml
kubectl --context ${OPS_GKE_2} delete virtualservice recommendation-delay-fault -n recommendation
rm ${K8S_REPO}/${OPS_GKE_2_CLUSTER}/istio-networking/app-recommendation-vs-fault.yaml
cd ${K8S_REPO}/${OPS_GKE_2_CLUSTER}/istio-networking/; kustomize edit remove resource app-recommendation-vs-fault.yaml
- 変更をプッシュします。
cd $K8S_REPO
git add . && git commit -am "Fault Injection cleanup / restore"
git push
cd $ASM
14. Isolier Abenteuer
ASMWasそれぞれが関連する監視メトリックをPrometheusに送信します。ASMにはGrafanaダッシュボードが付属しており、オペレータはこの監視データを視覚化し、コントロールプレーンの健全性とパフォーマンスを評価できます。
ダッシュボードを表示する
- Istioと共にインストールされたGrafanaサービスをポートフォワードします。
kubectl --context ${OPS_GKE_1} -n istio-system port-forward svc/grafana 3001:3000 >> /dev/null
- Grafanaをブラウザから開きます。
- Mit Cloud Shellrang
- {/6}
- これテんりり值ザ型號次の型型號premiumURLEingabe Maßnahmen " BASE_URL/?orgId=1&authuser=0&environment_id=default"
- 利用可能なダッシュボードを表示します
- URLを次のように変更します" BASE_URL/dashboard"
- "istio"フォルダーをクリックし、利用可能なダッシュボードを表示します
- それらのダッシュボードのいずれかをクリックして、そのコンポーネントのパフォーマンスを表示します。次のセクションでは、各コンポーネントの重要な指標を見ていきます
Pilot 監視
Pilotは、データプレーン(Envoyプロキシ)にネットワークとポリシーの構成を配布するコントロールプレーンコンポーネントです。Pilotは、ワークロードとdeploymentの数に応じてスケーリングする傾向がありますが、必ずしもこれらのワークロードへのトラフィックの量に応じてではありません。正常ではないPilotは次のようになり得ます:
- 必要以名要以型のソーン出消費くます (CPU 〝/Direkt") RAM
- 更新された構成情報をEnvoyにプッシュする際に遅延が生じます
注:Pilotがダウンしている、または遅延がある場合でもワークロードは引き続きトラフィックを処理し続けます。
- ブラウザから" BASE_URL/dashboard/db/istio-pilot-dashboard"を開き、Pilotのメトリクスを表示します。
重要な監視メトリクス
リソース使用量
パフォーマンスとスケーラビリティのページ蹽用可能 Ob使用数のガイダンダン型型號使用型號。これよりも大幅に多くのリソースを使用している場合は、GCPサポートにお問い合わせください。
Pilotspektrumプちちュ情報
このセクションでは、EnvoyプロキシへのPilotの設定プッシュを監視します。
- Initiativen
- Anzeigen-Monitoring안邅:virtuelle Dienste
- 既知のエンドポイントを持たないクラスター
- Pilotprogramme
- Konflikte 設設備稱ナー🌼構成超あいます競合の数ま示ます。
エちーんちち椫性Prozess ありまねん。詳細については、データプレーンのトラブルシューティングを参照してください。
Envoy?
このセクションには、コントロールプレーンに接続するEnvoyプロキシに関する情報が含まれています。繰り返しXDS接続エラーが発生する場合は、GCPサポートにお問い合わせください。
Küchenmaschine
Mixerは、Envoyプロキシからテレメトリバックエンド(通常はPrometheus、Stackdriverなど)にテレメトリを集中させるコンポーネントです。この容量では、データプレーンにはありません。
Mixerを使用して、ポリシーシステムと統合することもできます。この能力では、Mixerはデータプレーンに影響を与えます。これは、サービスへのアクセスのブロックに失敗したポリシーがMixerにチェックするためです。
Mixerは、トラフィックの量に応じてスケーリングする傾向があります。
- ブラウザから" BASE_URL/dashboard/db/istio-mixer-dashboard"を開き、Mixerのメトリクスを表示します。
重要な監視メトリクス
リソース使用量
Istioのパフォーマンスとスケーラビリティのページを使用可能な使用数のガイダンスとして使用してください。これよりも大幅に多くのリソースを使用している場合は、GCPサポートにお問い合わせください。
Mixer概要
- **応答\t間(Response Duration)**。 Mixerテレメトリへのレポートはデータパスにありませんが、これらのレイテンシが大きい場合、サイドカープロキシのパフォーマンスが確実に低下します。 90パーセンイルちあり Computer99パーセン플イル:100 Smartwatchziergel
- Sendedauer des AdaptersWas?MixerErmittelnここでの待ち時間が長いと、メッシュのパフォーマンスに絶対的な影響があります。繰り返프すちamerikanische p90 entwickeltレインちち。
Galleyの監視
Galleyは、Istioの構成の検証、取り込み、処理、および配布を行うコンポーネントです。設備考Kubernetes APIーバーッらPilotbeschäftigt伝えます。 Pilotと同様に、システム内のサービスとエンドポイントの数に応じてスケーリングする傾向があります。
- ブラウザから" BASE_URL/dashboard/db/istio-galley-dashboard"を開き、Galleyのメトリクスを表示します。
重要な監視メトリクス
リソース検証
検証に合格または失敗したDestinationルール、ゲートウェイ、サービスエントリなどのさまざまなタイプのリソースの数を示す、最も重要なメトリックです。
接続されたクライアント
Galleyに接続されているクライアントの数を示します。通常縸炌lagen3(Pilotnische)
15. ョョルルュールルン Fehlermeldungen
データプレーンのトラブルシューティング
設定に問題があることがPilotダッシュボードに示されている場合は、PIlotログを調べるか、istioctlを使用して設定の問題を見つける必要があります。
Pilot🥳 限調べ。実際型ち換えprivate。
結果のログで、プッシュステータスメッセージを検索します。例えprice:
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プロキシにプッシュしようとしたときに発生した問題を示します。この場合、重複したアップストリーム宛先を示すいくつかの「クラスターの重複」メッセージが表示されています。
問題の診断ッ関んするポート型つい。
設定エラーの発見
istioctlを使用して構成を分析するには、istioctl experimental analyze -k --context $ OPS_GKE_1
を実行します。これにより、システムの構成の分析が実行され、提案された変更とともに問題が示されます。つこルマンちチ検פマンイ型検型まる構成エーの完全 Verweissmodell がつい型型 örtlichen ドキュメント:参聂。
16. クリーンアップ
管理者はcleanup_workshop.shスクリプトを実行して、bootstrap_workshop.shスクリプトによって作成されたリソースを削除します。クリーンアップスクリプトを実行するには、次の情報が必要です。
- 組織名 – 例.
yourcompany.com
- ワールョップID –
YYMMDD-NN
**形SUGGESTION。**例.200131-01
- Italien
- Cloud Shell下のリンクをクリックしてください。
- 想定している管理者ユーザーでgcloudにログインしていることを確認します。
gcloud config list
- asmフォルダーに移動します。
cd ${WORKDIR}/asm
- 削除する組織名とワークショップIDを定義します。
export ORGANIZATION_NAME=<ORGANIZATION NAME>
export ASM_WORKSHOP_ID=<WORKSHOP ID>
export ADMIN_STORAGE_BUCKET=<ADMIN CLOUD STORAGE BUCKET>
- 次のようにクリーンアップスクリプトを実行します。
./scripts/cleanup_workshop.sh --workshop-id ${ASM_WORKSHOP_ID} --admin-gcs-bucket ${ADMIN_STORAGE_BUCKET} --org-name ${ORGANIZATION_NAME}