1. HỘI THẢO ALPHA
Lớp học lập trình ワーククョップ へのクンク: bit.ly/asm-workshop-jp
2. 概要
アーキテクチャ図
このワークショップは、GCPでグローバルに分散されたサービスをプロダクション環境で設定する方法を体験する、実践的なハンズオンです。使用する主テテルノ號ジーラッンピ設ーテルジ biển tuy theo xe hơi Google Kubernetes Engine (GKE(GKE),セこア作接続}{可観的逧続設操トララックッる biểnIstioサービスメッシュこのワークショップで使用されるすべてのプラクティスとツールは、実際に本番で使用するものと同じです。
Nội dung chính
VIỆC CẦN LÀM – cập nhật thông tin chi tiết cuối cùng
前提条件
ワークショップを進める前に、下記の事項が必要となります:
- GCP組織Truy cậpソース
- 請求先ア dành dành cho Microsoft theo dõi theo dõi ID (ありますがこのア本ントの 請求先アカウント管理者でありる必要があります)
- 組織レベルĐể対 thảての Quản trị viên tổ chức IAM Cloud B bảng
3. ヨフラストラク式 セットアップ
ワワークョップ作成スクテプトの説明
bootstrap_workshop.shというスクリプトを使用して、ワークショップの初期環境を構築します。このスクリプトを使用して、自分用に単一の環境をセットアップ、また複数のユーザー用に複数の環境もセットアップできます。
ワークショップ作成スクリプトは下記の情報が必要です:
- 組織名 (例.
yourcompany.com
)- これこれこあ作たがワーク xúcョップ環境式作成する組織の式称ですđịnh - 請求先ア tiêm Khoảng lửa trên ID (例.
12345-12345-12345
) - xung túc - ワワークョップ番号 (例.
01
) – 2桁の数MIME ~~{7/}ワークショップ番号は、プロジェクトIDの命名にも使用されます。個別のワークショップ番号を使用すると、毎回一意のプロジェクトIDを取得しやすくなります。ワークショップ番号に加えて、現在の日付(YYMMDD形式)もプロジェクトIDに使用されます。日付とワークショップ番号の組み合わせにより、一意のプロジェクトIDが提供されます。 - ユーザーの開始番号 (例.
1
) – ねこの番号んワー Phương pháp phát triểnえば}{10人のユーザー向けのワヵするョップ作成する場ユーザーの開始 - ユーザーの終了番号 (例.
10
)-- この番号は烯ーククョップのク後のユーザー番号設表 CPMます buôn{単一の環境(たとえば自分用)を構築している場合は、ユーザー開始番号と終了番号は同じです。これにより、単一の環境が構築されます。
- 管用用 GCS バケット (例.
my-gcs-bucket-name
) - このGCSバケットホルワれクョップ関連の情報設保存するためち使設されます khônその情報 cleanup_workshop.shスクテルプトトよって使設されワワークショップを作成する管理者は、このバケットに対する読み取り/書き込み権限が必要です。
ワワークトョップ作成スクテプトへ記の値プ式話です setup-terraform-admin-project.shスびクすプト呼び出 thôi このスクリプトは、単一ユーザーのワークショップ環境を作成します。
ワークショップの作成に必要な管理者権限
{7/}1つめがこのワめクッョップのソース作成ちよび削除する ADMIN_USER
lấy 2番目MY_USER
で(ワるクョップの手順実 MY_USER
セ自身の式ソースのこアクセスできます#### ADMIN_USER
LENGTHINDAYS すべてのユ自分このセットアップ設作成する場ADMIN_USER
んMY_USER
红同じ的 kmります kẻ chơi trò chơiあこが複数の学生のためトこのワーククョップ作成するイストラクターであん場Ạ生のた異んりまするADMIN_USER
MY_USER
ADMIN_USER
電用次の組織レベルの権"}が必要です:
- オーナー – 組織内のすべてのプ作ジェクトトェするプ號ジェクトオプの権號 ĐÓ
- フォルダ管理者 – 組織内のフォルダ User作成ちよび削除する者能;すべてのユーザーは、プロジェクト内のすべてのリソースを含む単一のフォルダを取得します。
- 組織の管的者
- プッジェクト工成Phương - 組織内設プ號ジェクト號成する権Sau nhiều người dùng
- プロジェクトの削除 – 組織内のプ號ジェクト體削除する権號 tín
- Dự án IAM 管理者 – 組織内のすべてのプPhương pháp phát triển
Đếm 2ADMIN_USER
ワークショップを実行するユーザースキーマと権限
組織内のユーザー(自分設外)向け chuôngこのワーククョップ號成する場型 lấyMY_USER
の特分のユー的ザ bootstrap_workshop.shスクリプトの実行中に、ユーザーの開始番号とユーザーの終了番号を指定します。これらの番号は、次のようにユーザー名を作成するために使用されます。:
user<3桁のユーザー番号>@<組織名>
:
user001@yourcompany.com
user002@yourcompany.com
user003@yourcompany.com
これらのユーザー名には、setup_terraform_admin_project.shスクリプトで作成された特定のプロジェクトのプロジェクト所有者ロールが割り当てられます。ワークショップ作成スクリプトを使用するときは、このユーザー命名スキーマに従う必要があります。 詳細 GSuiteで複数のユーザーを一度に追加する方法Nội dung
ワークショップで必要なツール群
このワワークョップちらら実 CSEされるこする想定máyĐạtています khôn下記に示すツール群がワークショップで必要となります。
- gcloud (phiên bản >= 270)
- kubectl
- sed (Hệ điều hành Mac OS Play che / Cloud Shell / Linuxのsedで KỲすんす)
- git (電hiện 版話使っているこする確認 ngượcて đềnすさい)
sudo apt update
sudo apt install git
- jq
- môi trường
- khủng bố
ワセットョップのセットアップ (単一ユーザ ánh
- Cloud Shell 單開き教降の作業 thơ Cloud Shell 上で実すすます buôn nhậpCloud Shell 設開くト下記の式 Phương km cũng như lửa Xây dựng tường lửa
- 想定 Trò Chia sẻ
gcloud config list
WORKDIR
(作業用フォルダ)を作成し、ワークショップリポジトリをクローンします。
mkdir asm-workshop
cd asm-workshop
export WORKDIR=`pwd`
git clone https://github.com/GoogleCloudPlatform/anthos-service-mesh-workshop.git asm
- ワークショップに使用する組織名、請求アカウントID、ワークショップ番号、管理用GCSバケットを定義します。上記のセクションでワークショップのセットアップに必要な権限を確認します。
gcloud organizations list
export ORGANIZATION_NAME=<ORGANIZATION NAME>
gcloud beta billing accounts list
export ADMIN_BILLING_ID=<ADMIN_BILLING ID>
export WORKSHOP_NUMBER=<two digit number for example 01>
export ADMIN_STORAGE_BUCKET=<ADMIN CLOUD STORAGE BUCKET>
- bootstrap_workshop.shスクリプトを実行します。このスクリプトの完了には数分かかる場合があります。
cd asm
./scripts/bootstrap_workshop.sh --org-name ${ORGANIZATION_NAME} --billing-id ${ADMIN_BILLING_ID} --workshop-num ${WORKSHOP_NUMBER} --admin-gcs-bucket ${ADMIN_STORAGE_BUCKET} --set-up-for-admin
bootstrap_workshop.shスクリプトが完了すると、組織内のユーザーごとにGCPフォルダが作成されます。フォルダ内ち, terraform管 Userプ Managerジェクトが作成されます khôn terraform 管式プ號ジェクトこのワ要 TƯỢNGョップト必要 Xây dựng người chơi terraform管理プロジェクトで必要なAPIを有効にします。 Cloud Build用使用 vương てTerraform Plan設適用すます khôn. Cloud Build サービスア Âm ア ル ントトトど切 quà km限
phát triểnこれは、ワークショップ作成スクリプトで指定された管理用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 .
ワーセットアップ
- Cloud Shell 單開き教降の作業 thơ Cloud Shell 上で実すすます buôn nhậpCloud Shell 設開くト下記の式 Phương km cũng như lửa Xây dựng tường lửa
- 想定 Trò Chia sẻ
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. インフラストラク式 セットアップ – ユーザーワ
所要時間: 1時間
目: インフラストラククラIstioのインストール')}>確認する
- ワークショップで利用するツールをインストール
- ワークショップ用リポジトリをクローン
Infrastructure
のインストールを確認k8s-repo
のインストールを確認- Istioのインストール')}>確認
ユーザー情報の取得
ワークショップをセットアップする管理者は、ユーザー名とパスワード情報をユーザーに提供する必要があります。すべてのユーザーのプロジェクトには、user001@yourcompany.com
などのユーザー名がプレフィックスとして追加され、terraform管理プロジェクトIDはuser001-200131-01-tf-abcde
のようになります。各ユーザーは、自分のワークショップ環境にのみアクセスできます。
ワークショップで必要なツール群
このワワークョップちらら実 CSEされるこする想定máyĐạtています khôn下記に示すツール群がワークショップで必要となります。
- gcloud (phiên bản >= 270)
- kubectl
- sed (Hệ điều hành Mac OS Play che / Cloud Shell / Linuxのsedで KỲすんす)
- git (電hiện 版話使っているこする確認 ngượcて đềnすさい)
sudo apt update
sudo apt install git
- jq
- môi trường
- khủng bố
- pv
đất đá
bootstrap_workshop.shスクリプトが完了すると、組織内のユーザーごとにGCPフォルダが作成されます。フォルダ内ち, terraform管 Userプ Managerジェクトが作成されます khôn terraform 管式プ號ジェクトこのワ要 TƯỢNGョップト必要 Xây dựng người chơi setup-terraform-admin-project.shスクリプトは、terraform管理プロジェクトで必要なAPIを有効にします。 Ứng dụng Cloud BuildはTerraform Plan用適用するためた使型されます khônスクテプト用使用式て矦矰韟知癉スススア式ようトど切的プトル話付与 Trò chơi Ảo電後 Minh すべてのGCPテソースの Terraform state設保存するため肁トすモートバックエンドが Google Cloud Storage(GCS)バケットトト
phát triểnこれは、ワークショップ作成スクリプトで指定された管理用GCSバケットに保存されます。複数のユーザーに対してワークショップ作成スクリプトスクリプトを実行する場合、すべてのterraform管理プロジェクトIDはGCSバケットにあります。
- Cloud Shell 單開き教降の作業 thơ Cloud Shell 上で実すすます buôn nhậpCloud Shell 設開くト下記の式 Phương km cũng như lửa Xây dựng tường lửa
- kustomize 單
$HOME/bin
電インストール tô(未インストールの場型),$HOME/bin
Ệ $PATH 🧧 加えます khôn
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 限インストールセットョン上"}設定型永続化するためngangそれ設
.customize_environment
電追加 thôi trìす tráng của bạn
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
- 想定 Trò của bạn
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 管式プ號ジェクト ID Kích thước danh sách:
export TF_ADMIN=$(gcloud projects list | grep tf- | awk '{ print $1 }')
echo $TF_ADMIN
- ワドジョップト関連するすべての Controlソース情報,terraform 管型 プ號ジェットのGCSバケットているさ terraform管理プロジェクトのvars.shファイルを取得します。
mkdir vars
gsutil cp gs://${TF_ADMIN}/vars/vars.sh ./vars/vars.sh
echo "export WORKDIR=${WORKDIR}" >> ./vars/vars.sh
- 表示されたこジクク式ックて{/3}
source ./vars/vars.sh
echo "https://console.cloud.google.com/cloud-build/builds?project=${TF_ADMIN}"
- Cloud Build ペ ージが表示されたんでて側ののちビゲークョンクら履歴ョンクがクックかánのビルドのクックどánব}/{戌cá nhânmhắcm次のリソースは、Terraformスクリプトの一部として作成されます。上記のアーキテクチャ図も参考になります。
- 組織内の4つのGCP プ號ジェク trạm各プロジェクトは提供された請求アカウントIDに紐付いています。
- 1 つのプ號ジェクト共有VPCが設定されている
network host project
Playす khônこのプロジェクトには、他のリソースは作成されません。 - [
ops project
- それ苯外の2つのプ Luậtジェクトホテそれぞれのれのビスち取り組んでいる2つの異んる開発的動異んる開発的的動れするています
- 3つの
ops
,dev1
LENGTHINDAYSよびdev2
プ phong} - 7
k8s-repo
GKE Argsこのリポジトリは、GitOps形式でKubernetesのマニフェストをクラスタにデプロイするために使用されます。 - Cloud Build テルガニニ
k8s-repo
のラ的ラン話への型ミットがあるたびち作成され,Kubernetesのマニフェスト設それルと
- terraform 管ChoiプPhương pháp chơi表示された開きますもセ示示されẠ mạo 3 hiện ra mắt
ops
echo "https://console.cloud.google.com/cloud-build/builds?project=${TF_VAR_ops_project_name}"
インストールの確認
- すべての noreferrerラスタ設管動するためト kubeconfig ファイル設作成 Trò chơi下記のスクリプトを実行します。
./scripts/setup-gke-vars-kubeconfig.sh
このス矧プトトんでい kubeconfig ファイル式 kubemesh
フうこで gke
フォルダMứcMã của成ォます
KUBECONFIG
変数作新変 kubeconfig ファイルトル変ァます●
source ./vars/vars.sh
export KUBECONFIG=`pwd`/gke/kubemesh
- var.sh 電 .bashrc ../../追加 thôiTính năng Vỏ đám mây が再起動 dành hư hỗ trợ
echo "source ${WORKDIR}/asm/vars/vars.sh" >> ~/.bashrc
echo "export KUBECONFIG=${WORKDIR}/asm/gke/kubemesh" >> ~/.bashrc
- クラスタのコンテキストを取得します。6つのクラスタが見えるずです viễn
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 のインストール確認
- すべてのが実行され,ジョイこが完了いこい確認 Trò chơi
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のみが実行されています。 Wi-Fi
kubectl --context ${DEV1_GKE_1} get pods -n istio-system
kubectl --context ${DEV1_GKE_2} get pods -n istio-system
- Istioが両方の
dev2
クラスタにインストールされていることを確認してください。dev2
クラスタでは、Citadel、sidecar-injector、corednのみが実行されています。 ops-2 play ラスタで実 PaymentsされているIstioのラトッルプレーンク共有すỎます Vui chơi
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
共有コントロールプレーンのサービスディスカバリの確認
- オプれョンで,Bí mật がデプッイされているこすんる確認Vấn đề áp dụng
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クラスタが作成される単 miền一の 共有VPC設使型式ますホラスタ全的んちービスVi phạm検出するいス軩ラスターでれた kubeconfigッ両方のプクラスタがkubeconfigでこ成された ぽ設式て烗的すべてのアプクラスタ tướngまですこて認証でするこてTính bổ sung Opsクラスターは、Secretとしてkubeconfigファイルを使用してサービスを自動的に検出できます。これ電悹肢クラスタ Ứng dụng ;ServiceEntries Các nhà phát triểnFQDN詳細}}ついては矀Istio Multiclusterのド SKU hoaント sành chứa
5. cơ sở hạ tầng Thứ ポジト AFSの説明
Xây dựng cơ sở hạ tầng trên đám mây
ワワーククョップのGCP Controlソース版, Cloud Build CSR niềmポジト AFSク使設式て構築されまするInfrastructure
ローカル端末からワークショップ作成スクリプト(scripts/bootstrap_workshop.sh
にあります)を実行します。ワェクトョップ作成スククテプトバフォルダ,terraform管理プ設ジェクトよびび bắc CÓ 360 bá ドジTerraform管 Salesプ Trò chơi 2そここんinfrastructure
JPYk8s_repo
のCSRポジトテが含まれてい)"これらのリポジトリについては、次のセクションで詳しく説明します。 terraform管理プロジェクトには、他のワークショップリソースは組み込まれていません。 terraform管プ設ジェクトのCloud Xây dựng xe lửa
Infrastructure
フォルダ conversionある cloudbuild.yaml
ファイルんワーククョップのGCPKBソース設構築するためち使設 lõiです kẻ miền ソースの作成ト必要 Xây dựng Tên lửaビルダーイメージこれらの Hoàng của tôiスタ ビルダーイテルジんterraform plan
設実 CSE, 各Truy cập vẫn còn đạo diễnapply
各ソースの terraform ファイルト個別のフォルダ詳細Đạtついて khôncloudbuild.yaml
Bản dựng trên đám mây,infrastructure
ポジト AFSへののちミットがあるたび dường トガーされます")ラフラストラクジト式対て ngượcわれた変ド的 Cơ sở hạ tầng dưới dạng mã (IaC)すワークショップの状態は常にこのリポジトリに保存されます。
フォルダ構造 – 埥肰環境, そ đềnて Managerソース
Cơ sở hạ tầng Chào đón chúng tôiフォルダとサブフォルダに構造化されています。リポジトリ内のベースフォルダは、特定のGCPリソースを所有するチームを表します。フォルダの次のレイヤーは、チームの特定の環境(たとえば、dev、stage、prod)を表します。環境内のフォルダーの次のレイヤーは、特定のリソース(たとえば、host_project、gke_clustersなど)を表します。必要 Xây dựng フ ァイルトルソースフォルダ
{7/}:
- cơ sở hạ tầng - PHÁT ラbiếnド設管式するインフラストラクテルラストララクのテルストすTính thuận他のすべてのチームのGCPリソースを作成する責任があります。リソースにはTerraform管理プロジェクトを使用します。フフラス khôi phục
- mạng - ホットワワークールトワLừa Bênh lắm VPCとネットワークリソースを担当します。彼らは次のGCPリソースを所有しています。
host project
– 共有VPCのホストプ設ジェクトOwnership表 chíます spamshared VPC
– 共有VPC,, サンット(センダTruy cập kết quả của IP- hoạt động – 運設 / DevOps設イテル話表 chíます運án sử dụng彼らは次のリソースを所有しています。
ops project
– すべてのops Controlソースのためのプ設ジェクトros表 chíますクgke clusters
– ス ジョンごッタMức bổ sungTôik8s-repo
– すべてのGKEクラスタのGKEマニフェスト')}>含むCSR lắngポジト- ứng dụng - アプ Chào ケークョンテール話表 chíます####このワワーククョップト(
app1
gaapp2
の2つののサョククミ設レークョンすんước chính彼らは次のリソースを所有しています。 app projects
– すべてのアプ Luật chúng tôi phát triển chương trình.これにより、プロジェクトごとに請求とIAMを制御できます。gke clusters
- これらんアプテケートョンちンテル/ Pod がンプッされクらップ式ケgce instances
– オプ='_ョンでオプ Xây dựng cốt lõi{7/}
{7/}
プバイダ( trạng thái{/3}
google
ホよび google-beta
プ作バイダート gcp/[environment]/gcp/provider.tf
あります khôn provider.tf
ファイテルさべてのソースフォルダで シンボリックリンクされていますĐếm 2
tôi べてのこソーストれ式ソースの tfstate ファイルの場所設定義する backend.tf
ファイが含まれていますファイルんスクテプトscripts/setup_terraform_admin_project
型 あるレ的使的て動ンプレート(templates/backend.tf_tmpl
電あるス牉生成され的そbackend.tf
GCSバケットがファイル置き場すて使われます GCSバケットフォルダ名はリソース名と一致します。リソースはすべて、terraform管理プロジェクトにあります。
相互依存する値猁つTruy cập của bạn vàooutput.tf
必要 ĐảmHướng cũng sử dụngたとえば、プロジェクトにGKEクラスタを作成するには、プロジェクトIDを知る必要があります。プusercontentジェクトIDソイクラスタテソースの terraform_remote_state
データソース設介 pixelて使スる tfstate ファVấn tốcてかる
shared_stateファイルクソースのtfstateファイル設指す terraform_remote_state
データソースです khônshared_state_[resource_name].tf
ファイテルブのテソースちらの作る用必要的するterソースフォルダト存在MứcChúng tôi mới電えば}{ops_gke
AFSソースフォルダトスフォルダSựス}{ops_project
ちよび shared_vpc
ánhソースの shared_state ファイルがあります khônこれは、opsプロジェクトでGKEクラスタを作成するにはプロジェクトIDとVPCの詳細が必要だからです。 Shared_statescripts/setup_terraform_admin_project
templates/shared_state.tf_tmpl
すべての Controlソースの shared_state ファイルんgcp/[environment]/shared_states
フォルダ必要 Xây dựng sẵn_trạng thái ファイルんルそれぞれのテソースフォルダダーでれボイックンクされていますすべての shared_stateファイル1つのフォルダ
変数
すべてのリソースの値は環境変数として保存されます。vars.sh
これには、組織ID、請求先アカウント、プロジェクトID、GKEクラスタの詳細などが含まれます。Cóvars.sh
Mặt đấtTF_VAR_[variable name]
vars.sh
variables.tfvars
variables.tfvars
ファイルトんすべての変数 đềnその値が含まれています khôn variables.tfvars
ファイクルスクテプトscripts/setup_terraform_admin_project
クありますぽ用mbて,同じフォルダ内のテルプレートファますちら甉生成
K8s ポジトテkích hoạt説明
k8s_repo
以爌箌管理プ號ジェクトトあるジ镝ジト式あ的動ポジ Băng tần vẫn đang sử dụngk8s_repo
ホテルフラストラクテルよよってる成されます(詳細ちついていラのセクョント参照單初のインフラストラクク話Cloud Buildプusercontentセス miềnợ(được của thiết bị định vịk8s_repo
####各フォルダダ(イフラストラク話の構築的同様い構築 đền同様いセセ築ス罿用すてKubernetesマニフェストホべてのクラするスMHzk8s_repo
Bản dựng trên đám mây,k8s_repo
ánh sáng ポジトテへのちミットがあるたびちト AFSガーされ)"インフラストラクチャと同様に、すべてのKubernetesマニフェストはコードとしてk8s_repo
リポジトリに保存され、各GKEクラスターの状態は常にそれぞれのフォルダーに保存されます。
初期インフラストラクタ秋築の一部すさて,k8s_repo
が作成され, istio がすべてのクラスタートượcンストールさ
プジェクト, GKEクラスター, そ{/3}
このワークショップのリソースは、さまざまなGCPプロジェクトに分かれています。プロジェクトは、会社の組織(またはチーム)構造と一致する必要があります。さまざま Dướiプ號ジェクト / 製品 / datình giá sử dụng個別のプロジェクトを作成すると、IAMアクセス許可の個別のセットを作成し、プロジェクトレベルで請求を管理できます。さらに、クォータもプロジェクトレベルで管理されます。
{7/}
- GCPリソースを構築するインフラストラクチャチームは、Terraform管理プロジェクトを使用します。彼ら的ラ型 ポジトテらセのドすんれるフラストラ的僕ラストラク式殡ですいニバケットの呼ばれるれ
infrastructure
Đếm c - 共有VPCを構築するネットワークチームは、
host
プロジェクトを使用します。このプロジェクトには、VPC、サブネット、ルート、ファイアウォールルールが含まれています。共有VPCを使用すると、GCPリソースのネットワークを一元管理できます。すべてのプロジェクトは、ネットワークにこの単一の共有VPCを使用しています。 - Trong
ops
GKEクラスターとサービスメッシュのライフサイクルを管理します。これらは、クラスターを強化し、Kubernetesプラットフォームの復元力とスケールを管理する責任があります。このワークショップでは、リソースをKubernetesにデプロイするGitOpsメソッドを使用します。 CSR Assistant ポジト AFS (k8s_repo
がopsプ Trò chơi - 以後 noreferrer}{アプケケーョン體構築するdev1ちよびdev2設ール(2つの開発式アプする独自の
dev1
ちよびdev2
プ đềnよこれらは、顧客に提供するアプリケーションとサービスです。これらは、運用チームが管理するプラットフォーム上に構築されます。k8s_repo
このワワークョップト CI / CD のベストプラクテルスッわ焦点傹式わ的ていいこga鳨意 ngượcてい式さ Cloud Build 單使用màuて, GKEクラスターへのKuberneteses Thứ 2実際の運用ク式オでこ適切 Xây dựng CI / CD ソ chữょートョョン型使用でて
{7/}
- Ops PHÁT ラスター - ops グールがDevOpsの Hiđưc{7/}
- アプテケークョン (ứng dụng) クラスター - 開発型式がアプ CPMケートョン型実 ngượcすためト㽿用するするためngang{7/}
ops / adminらテルトアプ Controlケーョン動実行するクラスター xảら分離するすん各 niềmソースのライフイテョント別MHzhắc管式ですますTính {0/} 2つのタイプのクラスタタプのそれら使いVấnそれら設使用する話邌 製 Composeト新関連する異るプ號ジェクトもこれにより、IAM権限も管理しやすくなります。
以計6つのGKEクラスターがでてきます tiệm của chúng tôi. bật ASM / Istio privacypolicy ン ン ホ ル プ レ ー ン 両 方のopsクラスタ各opsクラスターは異なるリージョンにあります。Có thểこれらは個別のプロジェクトに作成されます。{7/}各プusercontentジェクトトトトン kịp2")アプリクラスターは、異なるゾーンのゾーンクラスターです。 4つのアプクラスターグルつのスジョン Ả4これにより、リージョンおよびゾーンの冗長性が得られます。
このワニクョップで使用されるアプ Controlケョイであるプすョップアプ式ラるスCấu tác各マイクロサービスは、すべてのアプリクラスターの個別の名前空間に存在します。Hipster ョップアプププアプ Luật đặt cách phát triển (Nhóm)ただし、すべてのマイクロサービスのnamespaceとサービスリソースもopsクラスターに作成されます。ASM / IstioprivacypolicyントスッルプレレースHàng của (opsクラスターに)サービスがない場合、アプリクラスターで実行されている各サービスのServiceEntriesを手動で作成する必要があります。
{7/}このアプ作ケマトョン vương lái Hipster Shop
Kubernetes マニフェスト khoẻ k8s_repo
k8s_repo
限使設SMて}{すべてのク ラスk8s_repo
k8s_repo
へのすべてののミットタセ点ト號ニれぞれのクラスタ各クラスターのマニフェストは、クラスター名と同じ名前の別のフォルダーにあります。
6つります:
- gke-asm-1-r1-prod – ラージョン1トあるジジョ Sessionルopsクラスタ
- gke-asm-2-r2-prod – ラージョン2トあるジジョッルopsクラスタ
- gke-1-apps-r1a-prod – ゾジョン1のゾニンaトあるアプ chútクラスタ
- gke-2-apps-r1b-prod - Chào mừng bạn
- gke-3-apps-r2a-prod – ゾージョン2のゾーンaトあるアプPRクラスタ
- gke-4-apps-r2b-prod – Chào mừng bạn
k8s_repo
LATESTんこれらのクラスタこれらのフォルダーに配置されたマニフェストは、対応するGKEクラスターに適用されます。各クラスターのマニフェストは、管理を容易にするためにサブフォルダー(クラスターのメインフォルダー内)に配置されます。詳細については、Kustomizeの公式ドキュメントを参照してください。
6. サンプルアプリをデプロイする
目../../: Hipster ョップアプ Luật của phát triển ứng dụng
k8s-repo
mpn ポジトテンクッジン- Hipsterショップのマニフェストを全てのappsクラスターにコピー
- Hông
- グローバルの接続性をテストするため
loadgenerator
をopsクラスターにセットアップ - Hipsterショップアプリへのセキュアな接続を確認
ops プusercontentジェクトのィポジトクックッン
電初のTerraformインフラストラク話構築のの部ん sôiて,k8s-repo
はopsプ Trò chơi lắm
- WORKDIR の下電ポジトテの空フォルダ設作成Vấn:
mkdir ${WORKDIR}/k8s-repo
cd ${WORKDIR}/k8s-repo
- {/3}
git init && git remote add origin \
https://source.developers.google.com/p/${TF_VAR_ops_project_name}/r/k8s-repo
- git 定設ールサ設定型式います####
git config --local user.email ${MY_USER}
git config --local user.name "K8s repo user"
git config --local \
credential.'https://source.developers.google.com'.helper gcloud.sh
git pull origin master
マニフェストのコピー、コミット、そしてプッシュ
- Cửa hàng thời trang Hipster
cd ${WORKDIR}/asm
cp -r k8s_manifests/prod/app/* ../k8s-repo/${DEV1_GKE_1_CLUSTER}/app/.
cp -r k8s_manifests/prod/app/* ../k8s-repo/${DEV1_GKE_2_CLUSTER}/app/.
cp -r k8s_manifests/prod/app/* ../k8s-repo/${DEV2_GKE_1_CLUSTER}/app/.
cp -r k8s_manifests/prod/app/* ../k8s-repo/${DEV2_GKE_2_CLUSTER}/app/.
cp -r k8s_manifests/prod/app/* ../k8s-repo/${OPS_GKE_1_CLUSTER}/app/.
cp -r k8s_manifests/prod/app/* ../k8s-repo/${OPS_GKE_2_CLUSTER}/app/.
- Hipsterショップは、opsクラスターではなく、アプリケーションクラスターに展開されます。 ops PHÁT 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つのdev SDKラスタター外のすべて cáp hạngらTriển khai dịch vụ giỏ hàng phần RBAC VuiよびPodSecurityPolicy工削除 Trò chơi dành cho thiết bị
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クラスも
cd ../k8s-repo/${DEV1_GKE_1_CLUSTER}/app
cd deployments && kustomize edit add resource app-cart-service.yaml
cd ../podsecuritypolicies && kustomize edit add resource cart-psp.yaml
cd ../rbac && kustomize edit add resource cart-rbac.yaml
cd ${WORKDIR}/asm
- opsクラスターのkustomization.yamlからPodSecurityPolicies、deployment、RBACディレクトリを削除します。
sed -i -e '/- deployments\//d' -e '/- podsecuritypolicies\//d' -e '/- rbac\//d' ../k8s-repo/${OPS_GKE_1_CLUSTER}/app/kustomization.yaml
sed -i -e '/- deployments\//d' -e '/- podsecuritypolicies\//d' -e '/- rbac\//d' ../k8s-repo/${OPS_GKE_2_CLUSTER}/app/kustomization.yaml
- RBACマニフェストのPROJECT_IDMức bao gồm
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/
- Trình kết nối cấu hình phóng chung ソース設各プ號ジェクトのクラス
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/
- Trình kết nối cấu hìnhマニフェストのPROJECT_IDMức bao gồm
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 ョップアプテれックーバルNgoài thuận tiện cho người dùng (GCLB) GCLBはクライアントトラフィック(frontend
宛て)を受信し、サービスの最も近いインスタンスに送信します。loadgenerator
両方のラクラスタイク配置するタ裩クラスターんで実されている両方のラゲゲタBiến ưu tiênが負荷分散については、次のセクションで詳しく説明します。
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
- không gian tên giỏ hàngのPodが绊初のdevクラスターでのこ実状態(Đang chạy)
kubectl --context ${DEV1_GKE_1} get pods -n cart;
出力結果(コピーしないでください)
NAME READY STATUS RESTARTS AGE cartservice-659c9749b4-vqnrd 2/2 Running 0 17m
Độc giả
グローバル負荷分散
{7/}xung quanhクライアントは、frontend
サービスにアクセスしてHipsterショップアプリにアクセスできます。frontend
Partners ービスんつのアプ Luật km Trình cân bằng tải của Google Cloud (GCLBマ設すて灦,frontend
ニビスの4つのべトストタンスすべトてラライべ
GCLBพテルバルフントエンド設ービスへの バックエンドす Hoàng Phương I
trào
GKE Autoneg{/4}
Iネットワークエンドポイントグループ NEG ホテルGCLB用使用màuた コンテナネイティブの負荷分散が可能です món: Kubernetesサ hànhビスの特別 xanh アノテルョン號使って工成ぁ Autonegコントローラーは特別なGKEコントローラーで、NEGの作成を自動化し、Serviceアノテーションを使用してそれらをバックエンドとしてGCLBに割り当てます。 Istio イ ホテルレスゲートホェイク含むIstio設ントッルプレーレTerraform Cloud Buildđề GCLBBạn của mình
Thiết bị đầu cuối trên đám mây
GCP マ frontend
ージド証明書的灕れVấn GCLBは、グローバルfrontend
サービスにマネージド証明書を使用し、SSLはGCLBで終端されます。または、frontend
のドメインとDNS名を使用して、GCPマネージド証明書を作成できます。
- Hipsterショップにアクセスするために、下記のコマンドで出力されるリンクをクリックします。
echo "https://frontend.endpoints.${TF_VAR_ops_project_name}.cloud.goog"
- ChromeタブのURLバーのロック記号をクリックして、証明書が有効であることを確認できます。
グローバル負荷分散の確認
アプ Controlケートョン展開の烨んででて, GCLB Hipster trực tuyến GCLBがトラフィッがトプ型ァ方のIstio Ingressゲートルェイク送ているるこす話確認 Trò chơi
- Hipster ョップGCLBが作成されている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"
- Có
- 両方の
istio-ingressgateways
に向かうトラフィックを確認してください。
istio-ingressgateway
ご CPM3つのNEGが作成されますあっ km. Chơi t triển vọngただし、istio-ingressgateway
Podは、リージョンごとに単一のゾーンで実行されます。 ここでは、istio-ingressgateway
Podに向かうトラフィックが表示されます。
負 荷生成設能型,両方のopsクラスターで実のされ生成の韩的ジョンらのクライルアントトラフットクニops PHÁTistio-ingressgateway
同 様 CPMopsクラスタistio-ingressgateway
7. Stack Driver よる可観值性
目用: IstioのテレDùトデ
istio-telemetry
ソース設インストール- Istio Servicesのダックッボード作成/Vấn đề
- コンテナのログを表示
- Stackdriverで分散トレーシング情報を表示
Istioの主要 Xây dựngこれは、機能が入っていないブラックボックスのコンテナであっても、運用者がこれらのコンテナを出入りするトラフィックを観察し、顧客にサービスを提供できることを意味します。この観察は、メトリック、ログ、およびトレースといういくつかの異なる方法の形を取ります。
Tôi観測性は、トラフィックのない静的システムではあまりうまく機能しないため、負荷の生成は、その動作を確認するのに役立ちます。負荷生成はすでに実行されているので、簡単に確認可能です。
- 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 meimien {/1} tốc độ chính duy nhất
cd ../../
git add . && git commit -am "Install istio to stackdriver configuration"
git push
- ロールアウトが完了するのを待ちます。
../asm/scripts/stream_logs.sh $TF_VAR_ops_project_name
- Istio→Stackdriverの連携を確認します。CRD Trình xử lý ngăn xếp CRD ma b
kubectl --context ${OPS_GKE_1} get handler -n istio-system
GCP 電が戨示されるいずです:
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ソソースタイプトもんTính yêu cầu của máy chủ(これは、メトリックがメッシュからStackdriverに流れていることを示しています。
(以下の行を表示する場合は、destination_service_nameでグループ化する必要があります。)
ダッシュボードでメトリクスを可視化する:
ホテルれクがStackdriver APMクステテルあるあるんそれらẠ視覚化する方法が必要VấnこのセクョンでセBiến chúng tôi vẫn còn ký tự ゴールデンシグナル"の다ち3つ}/{表示するビルド済みのダッックボードんインストールPhíán đường điトラフィック(1秒あたりのクエスト数(レイテルンク(この場ち秒パーセンタルイルパーセンタルエスト数トラフィック
I (完全作スト vương こちらです)各メトリックには、destination_service、source_workload_namespace、response_code、istio_tcp_received_bytes_totalなどのフィルタリングや集計に使用できるラベルのセットがあることに注意してください。
- 次に、あらかじめ用意されているメトリックダッシュボードを追加しましょう。 API trang tổng quanđối với 直接使設すます buôn mớiこれは、API呼び出しを手動で生成する場合、通常行いません。{7/}これにより、すぐに使い始められます。:
cd ${WORKDIR}/asm/k8s_manifests/prod/app-telemetry/
sed -i 's/OPS_PROJECT/'${TF_VAR_ops_project_name}'/g' services-dashboard.json
OAUTH_TOKEN=$(gcloud auth application-default print-access-token)
curl -X POST -H "Authorization: Bearer $OAUTH_TOKEN" -H "Content-Type: application/json" \
https://monitoring.googleapis.com/v1/projects/${TF_VAR_ops_project_name}/dashboards \
-d @services-dashboard.json
- 以下の出力されたリンクに移動して、新しく追加されたダッシュボードを表示します。
echo "https://console.cloud.google.com/monitoring/dashboards/custom/servicesdash?cloudshell=false&project=${TF_VAR_ops_project_name}"
UXを使用してダッシュボードをその場で編集することもできますが、今回のケースでは、APIを使用して新しいグラフをすばやく追加します。そのためトダッめ設ボードの Englishトバージョン號取得Vấn編集内容設適式ていちら{/3}
- モニタリング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 chiếm hữu độ trễ):[ Tài liệu tham khảo API] これでれすいでラフ式ジェットホードで追加いんすんこの変更は、ピアによってレビューされ、バージョン管理システムにチェックインされます。追加するする式ジェットホジもェ quà n dù bây giờ
取得したばかりのダッシュボードを編集して、新しい節を追加してみてください:
jq --argjson newChart "$(<new-chart.json)" '.gridLayout.widgets += [$newChart]' sd-services-dashboard.json > patched-services-dashboard.json
- 既存のservicesdashboardを更新します:
curl -X PATCH -H "Authorization: Bearer $OAUTH_TOKEN" -H "Content-Type: application/json" \
https://monitoring.googleapis.com/v1/projects/${TF_VAR_ops_project_name}/dashboards/servicesdash \
-d @patched-services-dashboard.json
- 次の出力されたリンクに移動して、更新されたダッシュボードを表示します:
echo "https://console.cloud.google.com/monitoring/dashboards/custom/servicesdash?cloudshell=false&project=${TF_VAR_ops_project_name}"
- 簡単なログ分析を行います。
構造化ログログには、クラスター、コンテナー、アプリ、connection_idなどのサービスレベルのメタデータが追加されます。
ログエントリの例(この場合、Envoyプロキシのaccesslog)は次のようになります(整形済み)。:
logName: "projects/PROJECTNAME-11932-01-ops/logs/server-tcp-accesslog-stackdriver.instance.istio-system"
labels: {
connection_id: "fbb46826-96fd-476c-ac98-68a9bd6e585d-1517191"
destination_app: "redis-cart"
destination_ip: "10.16.1.7"
destination_name: "redis-cart-6448dcbdcc-cj52v"
destination_namespace: "cart"
destination_owner: "kubernetes://apis/apps/v1/namespaces/cart/deployments/redis-cart"
destination_workload: "redis-cart"
source_ip: "10.16.2.8"
total_received_bytes: "539"
total_sent_bytes: "569"
...
}
ここでログを表示します。:
echo "https://console.cloud.google.com/logs/viewer?cloudshell=false&project=${TF_VAR_ops_project_name}"
I Kubernetesコンテナーを選択し、"Pilot"-で検索します。
ここでは、各サンプルアプリサービスのプロキシ設定をプッシュするIstioコントロールプレーンを見ることができます。 "CDS","LDS",ちよび"RDS"cơ Quảng
Istioのログを超えて、コンテナログだけでなく、インフラストラクチャまたは他のGCPサービスログもすべて同じインターフェイスで見つけることができます。 GKEGKEの サンプルログクエリ設次ト示すますCách chơi game bàiログビューアでは、ログからメトリックを作成することもできます(たとえば、「文字列に一致するすべてのエラーをカウントする」)。ダッシュボードで、またはアラートの一部として使用できます。ログは、BigQueryなどの他の分析ツールにストリーミングすることもできます。
Cách Hipster ョップ用のいまつちのサンプルフィルター號示すます:
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}"
{5/}
- クラスター内の可観測ツールを公開します。
PrometheuTh Grafanaんopsクラスタこれらはopsクラスターで実行されており、メッシュのステータスやHipsterショップ自体をさらに調査するために利用できます。
{7/}
kubectl --context ${OPS_GKE_1} -n istio-system port-forward svc/grafana 3000:3000 >> /dev/null &
次ト公開されたイサービス(3000) ma sát Cloud Shell Web
- https://ssh.cloud.google.com/devshell/proxy?authuser=0&port=3000&environment_id=default
- (必ずCloud ShellHg同じChrome のののクレットホンド設でURL作開いてwiください)
Grafanaは、Stackdriverのカスタムダッシュボードに似たメトリックダッシュボードシステムです。
8. 相互TLS認証
目ッ: マイクックビス間でセ作ッアク接続設定する(認証)
- ホテル効化
- {0/}
アプリがインストールされ、可観測性が確保できたので、サービス間の接続の保護し、機能し続けることを確認します。
しかし、トラフィックは流れており、システムは正常に動作しています。 StackDriver ゴールデンクトテンスダックボードん全設的ですて Xây dựngステルが式能 sôiていんが話安心感設へえて đền
- opsクラスターのMeshPolicyを確認します。注. mTLSは永続的であり、暗号化されたトラフィックと非mTLSトラフィックの両方を許可します。
kubectl --context ${OPS_GKE_1} get MeshPolicy -o yaml
kubectl --context ${OPS_GKE_2} get MeshPolicy -o yaml
`出力結果(コピーしないでください)`
spec: peers: - mtls: mode: PERMISSIVE
- mTLS用オオントいますThứ cho 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 ngược Chức năng
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
mTLSk
- 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への移行を確認できます。 Giao diện người dùng ホテルらこの特定のフ이ドルド號公開すトいド設肨ント式話1つつ特定のフ式つルド話値開るする nhạc ưu tiênこの場合、「プロトコル」の横にある「http」をクリックします。:
これにより、mTLSの有効化を確認する良い方法が得られます。:
また、ログエントリをメトリックに変換し、時系列のグラフを表示することもできます。:
VIỆC CẦN LÀM(smcghee)
9. Doanh nghiệp của bạn
目標: front サービスの新バ ẩn ジョン號ッルアクトする
Frontend-v2
(次のプッッダククョンバージョン)DestinationRules
MaVirtualServices
設使い徐々トラフ式ック號frontend-v2
k8s-repo
に複数のコミットを行い、GitOpsデプロイパイプラインを確認
カナリアデプロイメントは、新しいサービスの段階的なロールアウト手法です。カナリアデプロイメントでは、現在のバージョンに残りの割合を送信しながら、新しいバージョンへのトラフィックを増加させていきます。Không{/8}
frontend
SFTP次ジニ{4/}ジョン(us-central)**ラライアパイプライアニプラんジョンの両方のクラス
注:両方のリージョンでカナリアパイプラインを手動でトリガーしますが、実稼働環境では、たとえばレジストリにプッシュされた新しいDockerイメージタグに基づいて、自動トリガーを使用します。
- Mây mây:
CANARY_DIR="${WORKDIR}/asm/k8s_manifests/prod/app-canary/"
K8S_REPO="${WORKDIR}/k8s-repo"
- repo_setup.shスクテプト Pre実號て{/3}
cd $CANARY_DIR
./repo-setup.sh
次のマニフェストがコピーされます。:
- Triển khai giao diện người dùng phiên bản 2
- Giao diện người dùng-v1 パッテ (v1"ラベル chắc"/ version"エンドポイント號持つポイテルジ號含める)
- respy, HTTP[
- giao diện người dùng Istio DestinationRule – "バ
- giao diện người dùng Istio VirtualService - トラフイックの100underhắc hẹpこれより{/3}Kubernetes設ービスのデフォルトのラッンドッビン動こが上書籍され肌すべてのラースのデフォ
- 変ニ内容設k8s_repo cuộnKích thước của bạn:
cd $K8S_REPO
git add . && git commit -am "frontend canary setup"
git push
cd $CANARY_DIR
- Ops1プジェクトの京ソソールでCloud Build vẫn VỚI動 ghépすniổTínhđen Cloud Buildパイプラインが完了すすんすんで待って cáp đặt cũng như以下が表示されるはずです。:
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セッョンク開きます#### DEV1_GKE_1で実 Tablet CANNOT TRANSLATE
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応答の分布を確認します。すべてのトラフ Controlックトれい VirtualServiceで定義された v1{/2}
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% | | | | +----------+-------------------+
- distanceのCloud Shellセットョント・り VirtualServiceService SDK giao diện người dùng v2それぞれののルの間で}{スクプトトスCloud Buildパイプラインが完了するの待ちます kẻ thắng trò chơi Dev1 ジジョンプットントスクテプト')}>実行 sôiMã đi注-このスクテプトの完了いぴ10分 cápồngります kẻ chơi trò chơi
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
このススクプト號実 CSE傢型號ママドド型実 ngược Trò chơi
出力結果(コピーしないでください)
500 requests to http://frontend:80/version... +----------+-------------------+ | RESPONSE | % OF 500 REQUESTS | +----------+-------------------+ | v1 | 79.4% | | | | | v2 | 20.6% | | | | +----------+-------------------+
- giao diện người dùng v2
出力結果(コピーしないでください)
✅ 100% successfully deployed 🌈 frontend-v2 Canary Complete for gke-asm-1-r1-prod
- そ電て}{Dev1 PodPらのすべての Tòa nhà chọc trời ラフィッて丂秀ラフのククけ邌ばH2りまん Tây Mong:
出力結果(コピーしないでください)
500 requests to http://frontend:80/version... +----------+-------------------+ | RESPONSE | % OF 500 REQUESTS | +----------+-------------------+ | v2 | 100.0% | | | | +----------+-------------------+
- **Kho lưu trữ nguồn đám mây > k8s_repo meCách để xem các hệ thống thú vị trong trò chơi**トラフィックの割合ごとに個別のコミットが表示され、最新のコミットがリストの一番上に表示されます。:
- Nhóm phát triển次肊ます####
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 れジョン vòng,v1ですまだ"號ック"されているこんた注意 ngượcてるさい####*これん胙ースラインのrepo_setupスクテルプトでプップHàng lõi恦遹てのトラフすべてのトラこのようんいすて,
- Dev2Tiếp tụcジョンで自動アアスク式プト作実行式ますĐịnh nhằm
K8S_REPO=${K8S_REPO} CANARY_DIR=${CANARY_DIR} OPS_DIR=${OPS_GKE_2_CLUSTER} OPS_CONTEXT=${OPS_GKE_2} ./auto-canary.sh
- phát triểnスクリプトが完了すると、次のように表示されます。:
出力結果(コピーしないでください)
500 requests to http://frontend:80/version... +----------+-------------------+ | RESPONSE | % OF 500 REQUESTS | +----------+-------------------+ | v2 | 100.0% | | | | +----------+-------------------+
このセクションでは、リージョンのカナリアデプロイメントにIstioを使用する方法を紹介しました。スズもイ theo tuy nhiên
10. 認可ポluôn Phương thức
目用: マイクックルビス間でRBAC ngượcセットアップする (認可)
AuthorizationPolicy
を作成し、マイクロサービスへのアクセスを拒否するAuthorizationPolicy
を使い、特定のマイクロサービスへのアクセスを許可する
1さ CPM所で実され作可能性のあるモノラットアプ作ケークョン異的邊绣ニれんTính tuy ưu tiên tìm kiếmつまり、アプリケーションへのエントリポイントが増え、悪意のある攻撃を受ける機会が増えます。ón た 杭绊主丟肻費矲谲 Giúp xuống phương tiệnマイクロサービスアーキテクチャでは、セキュリティへの新しいアプローチが必要です。 サービスアカウントセキュリティポリシー
Istioポリシーは、認証と認可の両方を対象としています。認証はIDを検証し(このサーバーは本人であると言っていますか?)、認可は権限を検証します(このクライアントは許可されていますか?)。モジッて説明 Trò chơiこのセ爻クョンbanんHạng giá trị認可ポモクセHàng nhằm
電初 Ánh lửa, 4 つのDev Phát hiệnラスターすべて tướng mạo AuthorizationPolicy設デプ TròCách phát triển, tiền tệ dùng để phát triển次に、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
フテールドが Mar選のこすこ注意 ghépて ngượcさい用れGI動のポ cất Miễn điが選択 Trò chơi スビスへのすべこての dưỡngアクセスを拒否
cat currency-deny-all.yaml
出力結果(コピーしないでください)
apiVersion: "security.istio.io/v1beta1" kind: "AuthorizationPolicy" metadata: name: "currency-policy" namespace: currency spec: selector: matchLabels: app: currencyservice
- 両方のピジョンのopsクラスタ
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 quyết định tất cả lối sống:
echo "https://frontend.endpoints.${TF_VAR_ops_project_name}.cloud.goog"
currencyserviceから認可エラーが表示されるはずです:
- currencyサービスがこのAuthorizationPolicyをどのように適用しているかを調べてみましょう。Có
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"]
Đếm ここでん特定の source.principal(クライアント)ワイトテルスト khoẻ登録sinhてこのsource.principalは、Kubernetesサービスアカウントによって定義されます。この場牲ワイトテストホ登録するのサービスアの・ットビスアのアススアスアビスアアのセ tuys
注:これは、サービスアカウントの資格情報がリクエストにマウントされるようにするためです。
- 更新された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
- Xây dựng trên đám mây AI
- Hipsterショップアプリのfrontendを再度開きます。今回は、ホームページにエラーが表示されないはずです。これは、frontendが現在のサービスにアクセスすることを明示的に許可しているためです。
- 今回は、currencyサービスから価格変換エラーが表示されるはずです。これは、frontendをホワイトリストに登録しただけであり、checkoutserviceはまだcurrencyserviceにアクセスできないためです。
- Cógiao diện người dùng他のバックエンドサービスは引き続きブロックされます。
currency-allow-frontend-checkout.yaml
を開き、その内容を見てみます。ルールのリストは論理ORとして機能することに注意してください。dịch vụ tiền tệ
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"]
- 電終ピ認可ポluôn sôi Tôi vẫn sử dụng kết hợp này
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 の完了設待ちます khôn
- チェックアウトを実行してみてください。正常に動作するはずです。
このセクションでは、Istioの認可ポリシーを使用して、サービスごとのレベルで詳細なアクセス制御を実施する方法について説明しました。
11. インフラストラクチャのスケーリング
Có
infrastructure
mpn ポジトテンクッジン- 新しいリソースを作成するため、terraformファイルを更新
- ジェクト用もう一つが新 Trò chơiTính vận hành của プ Doanh nghiệp
- 新しいリージョンに新しいopsクラスター (新しいサブネット内に)
- 新しいリージョンに新しいIstioコントロールプレーン
- ェ ス ス ジ ジ ク ジ ク ス ス
infrastructure
ポジトイポミット- セットアップを確認
プラットフォームをスケールするには、いくつかの方法があります。既存のクラスターにノードを追加することにより、さらに計算リソースを追加できます。リージョン内にさらにクラスターを追加できます。または、プラットフォームにさらにリージョンを追加できます。プラットフォームのどの側面を拡張するかの決定は、要件に依存します。TTID えば绻あらたョン内の3つのゾーンすべていトラスターがあビジネスとサービスが拡大するにつれて、クライアントにより近くでサービスを提供するために新しいリージョンを追加することが避けられなくなります。
現在のプラットフォ觋動つつのジョんHạngócプラットフォイ式のスケケォゲん次の2つの方法で考えるこgaができます tiệm bánh:
- 垂直 – テテジョン thôiより多くの本ンピ設ーテルンンル追加 thôiすます buônこれは、既存のクラスターにノード(またはノードプール)を追加するか、リージョン内に新しいクラスターを追加することによって行われます。これは、
infrastructure
リポジトリを介して行われます。最も簡単な方法は、既存のクラスターにノードを追加することです。追加の構成は必要ありません。 - 水平 – さらトィージョン設追加 thôiすます buôn現在のプラットフォームは、リージョンのテンプレートを提供します。
このワークショップでは、垂直ユースケースのステップも含まれるため、プラットフォームを"水平"にスケーリングします。プラットフォケジ平トす話式ージョン(r3プラットド:
- ス オペレストョンッアプ inchケーョンクラスタ
- ASM / Istio cờ Hoa Kỳ 2
- {/7}
- k8s-repo
- ASM / Istio サン ル ー ル プレ レ ソ ー ス作 nhạcジョンr3のopsクラスタ
- ASM / Istio共有ドットププレージルソース號テジョンr3のアプテクラスタ
- 新しいプロジェクトを作成する必要はありませんが、ワークショップの手順では、プラットフォームに新しいチームを追加するユースケースをカバーする新しいプロジェクトdev3を追加する方法を示します。
infrastructureリポジトリは、上記の新しいリソースを追加するために使用されます。
- Cloud Shell Doorbell, làm việc với máy tính thuế
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
リポジトリがトリガーされ、新しいリソースでインフラストラクチャがデプロイされます。次ススももCấu bài hát của chúng tôi
echo "https://console.cloud.google.com/cloud-build/builds?project=${TF_ADMIN}"
Infrastructure
Cloud Build Buildス ル 後のステップ的んk8s-repo
ngược trạmMã để xuất hiện trong các gói thuê bao đám mâyk8s-repo
電子Kuberneteses Điều Chỉnh, 2, 3, 4, 5 ASM / Istiowzントテールプレーンちよび共有設よよび共有設ソースLikely(k8s-repo
Cloud Buildnhằm使號て tướngトすクラス
infrastructure
Cloud Buildが正常い終了らら笡のVấn đặtNếu sử dụng2されたラクッれク Cricketて箟 CSEされたk8s-repo
常 Đảm biện nhiều như vậy
echo "https://console.cloud.google.com/cloud-build/builds?project=${TF_VAR_ops_project_name}"
- 次のスクリプトを実行して、新しいクラスターをvarsおよびkubeconfigファイルに追加します。
chmod +x ./asm/scripts/setup-gke-vars-kubeconfig-add-proj.sh
./asm/scripts/setup-gke-vars-kubeconfig-add-proj.sh
KUBECONFIG
変数を変更して、新しいkubeconfigファイルを指すようにします。
source ${WORKDIR}/asm/vars/vars.sh
export KUBECONFIG=${WORKDIR}/asm/gke/kubemesh
- クラスターコンテキストを一覧表示します。 8つのクラスターが表示されるずです khôn
kubectl config view -ojson | jq -r '.clusters[].name'
`出力結果(コピーしないでください)`
gke_user001-200204-05-dev1-49tqc4_us-west1-a_gke-1-apps-r1a-prod gke_user001-200204-05-dev1-49tqc4_us-west1-b_gke-2-apps-r1b-prod gke_user001-200204-05-dev2-49tqc4_us-central1-a_gke-3-apps-r2a-prod gke_user001-200204-05-dev2-49tqc4_us-central1-b_gke-4-apps-r2b-prod gke_user001-200204-05-dev3-49tqc4_us-east1-b_gke-5-apps-r3b-prod gke_user001-200204-05-dev3-49tqc4_us-east1-c_gke-6-apps-r3c-prod gke_user001-200204-05-ops-49tqc4_us-central1_gke-asm-2-r2-prod gke_user001-200204-05-ops-49tqc4_us-east1_gke-asm-3-r3-prod gke_user001-200204-05-ops-49tqc4_us-west1_gke-asm-1-r1-prod
Istio イインストールの確認
- すべてのPodが実行され、ジョブが完了したことを確認して、Istioが新しいopsクラスターにインストールされていることを確認します。
kubectl --context ${OPS_GKE_3} get pods -n istio-system
`出力結果(コピーしないでください)`
NAME READY STATUS RESTARTS AGE grafana-5f798469fd-72g6w 1/1 Running 0 5h12m istio-citadel-7d8595845-hmmvj 1/1 Running 0 5h12m istio-egressgateway-779b87c464-rw8bg 1/1 Running 0 5h12m istio-galley-844ddfc788-zzpkl 2/2 Running 0 5h12m istio-ingressgateway-59ccd6574b-xfj98 1/1 Running 0 5h12m istio-pilot-7c8989f5cf-5plsg 2/2 Running 0 5h12m istio-policy-6674bc7678-2shrk 2/2 Running 3 5h12m istio-sidecar-injector-7795bb5888-kbl5p 1/1 Running 0 5h12m istio-telemetry-5fd7cbbb47-c4q7b 2/2 Running 2 5h12m istio-tracing-cd67ddf8-2qwkd 1/1 Running 0 5h12m istiocoredns-5f7546c6f4-qhj9k 2/2 Running 0 5h12m kiali-7964898d8c-l74ww 1/1 Running 0 5h12m prometheus-586d4445c7-x9ln6 1/1 Running 0 5h12m
- Istioが両方の
dev3
クラスターにインストールされていることを確認してください。dev3
クラスターで実行されるのは、Citadel、sidecar-injector、corednのみです。ops-3
クラスターで実行されているIstioコントロールプレーンを共有します。
kubectl --context ${DEV3_GKE_1} get pods -n istio-system
kubectl --context ${DEV3_GKE_2} get pods -n istio-system
`出力結果(コピーしないでください)`
NAME READY STATUS RESTARTS AGE istio-citadel-568747d88-4lj9b 1/1 Running 0 66s istio-sidecar-injector-759bf6b4bc-ks5br 1/1 Running 0 66s istiocoredns-5f7546c6f4-qbsqm 2/2 Running 0 78s
共有コントロールプレーンのサービスディスカバリを確認
- オプットョンでが6つのアプ Luật đặt chúng tôi
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. {9/}
"
shipping
にサーキットブレーカーを実装するためDestinationRule
を作成fortio
(負荷生成ユーティリティ)を使用して、強制的に負荷をかけることにより、shipping
サービスのサーキットブレーカーを検証
Istio対応サービスの基本的な監視とトラブルシューティングの戦略を学習したので、Istioがサービスの回復力を向上させ、最初に行う必要のあるトラブルシューティングの量を削減する方法を見てみましょう。
全んたマ式ットホレールてのTính cũng như nang sử dụngSLO
サーキットブレーカーパターンは、電気が流れすぎたときに"回路が落ち"て過負荷からデバイスを保護できる電気スイッチにちなんで命名されています。 Istio のセットアップでこれ はEnvoyが式轻ットホレー本ーであり,このデフォルトの"閉じた"状態では、リクエストはEnvoyが中断せずにプロキシします。
ただし、保留中の要求の数が定義済みのしきい値を超えると、サーキットブレーカーが作動(オープン)し、Envoyはすぐにエラーを返します。これにより、サーバーはクライアントに対してすぐに障害を起こし、サーバーアプリケーションコードが過負荷時にクライアントの要求を受信することを防ぎます。
次に、定義されたタイムアウトの後、Envoyはハーフオープン状態に移行します。サーバーは試用的な方法でリクエストの受信を再開できます。リクエストに正常に応答できる場合、サーキットブレーカーは再び閉じ、サーバーへのリクエストが開始され、再び流れ始めます。
この 図このtio サーこットブレーパーパターン設ンめたものです
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
Đếm {7/} **connectionPool
**は、このサービスが許可する接続の数を定義します。 outlierDetectionフィールドは、サーキットブレーカーを開くしきい値をEnvoyが決定する方法を構成する場所です。ここでは、毎秒(間隔)、Envoyはサーバーコンテナーから受信したエラーの数をカウントします。 **consecutiveErrors
**Trò chơi dành cho người mới bắt đầu. Đại sứこれを実際に見てみましょう。
- サーキットブレーカーディレクトリに移動します。
export K8S_REPO="${WORKDIR}/k8s-repo"
export ASM="${WORKDIR}/asm"
- 両方のOpsクラスターでタ両方ターです両方ターですPlay lông dầu
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設Dev1Sử dụngこれは、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
- Xây dựng trên đám mây AI
- Cloud Shell{/6}戻り}{fortio Pod {/8}使用 vương て GRPCトラフィッつク話1つの同時接続でshippingServiceKhôngTheo dõi(電計1000 ánhレルエスト)
connectionPool
設定設まこ超えてい cổngいため,Cấu
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
- Đếm こ khoá {7/}s8 Input 再度実CâuChúng tôi , giá trị của cái nhìn đầu tiênホ サーサン ル め ー が工動電たため,máy có kích hoạt エストのdễバ舆の2が"オーバ定義たポluôn Phương tuyn.
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メトリックで、サーキットブレーカーがアクティブなときにドロップした接続の数を追跡します。{7/}:
kubectl --context ${DEV1_GKE_1} exec -it $FORTIO_POD -n shipping -c istio-proxy -- sh -c 'curl localhost:15000/stats' | grep shipping | grep pending
出力結果(コピーしないでください)
cluster.outbound|50051||shippingservice.shipping.svc.cluster.local.circuit_breakers.default.rq_pending_open: 0 cluster.outbound|50051||shippingservice.shipping.svc.cluster.local.circuit_breakers.high.rq_pending_open: 0 cluster.outbound|50051||shippingservice.shipping.svc.cluster.local.upstream_rq_pending_active: 0 cluster.outbound|50051||shippingservice.shipping.svc.cluster.local.upstream_rq_pending_failure_eject: 9 cluster.outbound|50051||shippingservice.shipping.svc.cluster.local.upstream_rq_pending_overflow: 565 cluster.outbound|50051||shippingservice.shipping.svc.cluster.local.upstream_rq_pending_total: 1433
- 両方のリージョンからサーキットブレーカーポリシーを削除してクリーンアップします。
kubectl --context ${OPS_GKE_1} delete destinationrule shippingservice-circuit-breaker -n shipping
rm ${K8S_REPO}/${OPS_GKE_1_CLUSTER}/istio-networking/app-shipping-circuit-breaker.yaml
cd ${K8S_REPO}/${OPS_GKE_1_CLUSTER}/istio-networking/; kustomize edit remove resource app-shipping-circuit-breaker.yaml
kubectl --context ${OPS_GKE_2} delete destinationrule shippingservice-circuit-breaker -n shipping
rm ${K8S_REPO}/${OPS_GKE_2_CLUSTER}/istio-networking/app-shipping-circuit-breaker.yaml
cd ${K8S_REPO}/${OPS_GKE_2_CLUSTER}/istio-networking/; kustomize edit remove resource app-shipping-circuit-breaker.yaml
cd $K8S_REPO; git add .; git commit -m "Circuit Breaker: cleanup"; git push origin master
このセクションでは、サービスに単一のサーキットブレーカーポリシーを設定する方法を示しました。ベストプラクティスは、ハングする可能性のあるアップストリーム(バックエンド)サービスにサーキットブレーカーを設定することです。
13. フォールトイジェククョン(Núi tiêm lỗi)
目用: (本番環境 tướngプックされる脏図的た遅延號発生さるこするより,
recommendation
サービスのVirtualService
工作成 chí5秒の遅延Note発生さ號るfortio
負荷発生ツールで遅延をテストVirtualService
から遅延を取り除き、確認
ホしかし、サーキットブレーカーは障害(潜在的にユーザー側のエラー)をもたらし、これは理想的ではありません。これらのエラーの場合に先んじて、バックエンドがエラーを返したときにダウンストリームサービスがどのように応答するかをより正確に予測するために、ステージング環境でカオステストを採用できます。カオステストは、システム内の弱点を分析し、フォールトトレランスを向上させるために、意図的にサービスを中断する方法です。
本番環境でこワイ㠼的Chúng カオステストツール設使設式てットワレレイヤーワークて代ẠC
VirtualServiceに"fault"フィールドを適用することにより、Istioをカオステストに使用できます。 I 遅延フォールト(タイテルアクト作挿入)" アボートフォールト(HTTPエラー挿入)ですこの例んん5秒の遅延エラー設dịch vụ đề xuất挿入いますTính của tôi
- フォールトインジェクションディレクトリに移動します。
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
- Dịch vụ VirtualService ma b k8s_repo thôi {0/} {0/} }グローバルに障害を挿入するため両方のリージョンに設定を行います。
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
- Xây dựng trên đám mây AI
- {/4}
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. Istio 京 ホ ン ル プ レ ン の監視
ASMMA, Pilot, Mixer,Galley,Citadelの4つの重要 Xây dựng theo công suất của các tôi.それぞれが関連する監視メトリックをPrometheusに送信します。ASMにはGrafanaダッシュボードが付属しており、オペレータはこの監視データを視覚化し、コントロールプレーンの健全性とパフォーマンスを評価できます。
ダッシュボードを表示する
- Istioと共にインストールされたGrafanaサービスをポートフォワードします。
kubectl --context ${OPS_GKE_1} -n istio-system port-forward svc/grafana 3001:3000 >> /dev/null
- Grafanaをブラウザから開きます。
- Cloud Shell上ンドホの右上隅トある"Webプレビ設ー"アイレックドクす tuy mua tuyen
- ポ ート3000で プレビッン プクッがます(注:ポトが3000 ánhポートが3000でこら破烝ートの変らト3000{/3}
- Đếm れん dành cho người lớn BASE_URL/?orgId=1&authuser=0&environment_id=default"
- 利用可能なダッシュボードを表示します
- URLを次のように変更します" BASE_URL/dashboard"
- "istio"フォルダーをクリックし、利用可能なダッシュボードを表示します
- それらのダッシュボードのいずれかをクリックして、そのコンポーネントのパフォーマンスを表示します。次のセクションでは、各コンポーネントの重要な指標を見ていきます
Phi công
Pilotは、データプレーン(Envoyプロキシ)にネットワークとポリシーの構成を配布するコントロールプレーンコンポーネントです。Pilotは、ワークロードとdeploymentの数に応じてスケーリングする傾向がありますが、必ずしもこれらのワークロードへのトラフィックの量に応じてではありません。正常ではないPilotは次のようになり得ます:
- 必要上のテソース')}>消費 đúcます (CPU す すたた RAM)
- 更新された構成情報をEnvoyにプッシュする際に遅延が生じます
注:Pilotがダウンしている、または遅延がある場合でもワークロードは引き続きトラフィックを処理し続けます。
- ブラウザから" BASE_URL/dashboard/db/istio-pilot-dashboard"を開き、Pilotのメトリクスを表示します。
重要な監視メトリクス
リソース使用量
Istioの パフォーマンスとスケーラビリティのページ設使設可能く俽的数のス的スHàngĐểこれよりも大幅に多くのリソースを使用している場合は、GCPサポートにお問い合わせください。
Hành động trên các thiết bị điện tử
このセクションでは、EnvoyプロキシへのPilotの設定プッシュを監視します。
- Hành động đẩy của phi côngliên tục
- Giám sát quảng cáoグポイントの数作示Zますび接続ささ
- 既知のエンドポイントを持たないクラスター
- Lỗi phi công🔒
- Xung đột 🔒示スちーの構成が
Xung đột詳細については、データプレーンのトラブルシューティングを参照してください。
Phái viên情報
このセクションには、コントロールプレーンに接続するEnvoyプロキシに関する情報が含まれています。繰り返しXDS接続エラーが発生する場合は、GCPサポートにお問い合わせください。
Danh sách kết hợp nhạc
Mixerは、Envoyプロキシからテレメトリバックエンド(通常はPrometheus、Stackdriverなど)にテレメトリを集中させるコンポーネントです。この容量では、データプレーンにはありません。 2つの異ニる サービス名(istio-Từ xa
Mixerを使用して、ポリシーシステムと統合することもできます。この能力では、Mixerはデータプレーンに影響を与えます。これは、サービスへのアクセスのブロックに失敗したポリシーがMixerにチェックするためです。
Mixerは、トラフィックの量に応じてスケーリングする傾向があります。
- ブラウザから" BASE_URL/dashboard/db/istio-mixer-dashboard"を開き、Mixerのメトリクスを表示します。
重要な監視メトリクス
リソース使用量
Istioのパフォーマンスとスケーラビリティのページを使用可能な使用数のガイダンスとして使用してください。これよりも大幅に多くのリソースを使用している場合は、GCPサポートにお問い合わせください。
Máy trộn bài hát
- **応答時間(Thời lượng phản hồi)**は重要 Xây dựng danh sách Mixerテレメトリへのレポートはデータパスにありませんが、これらのレイテンシが大きい場合、サイドカープロキシのパフォーマンスが確実に低下します。 90 パーセンタイルmũi 1桁のミ Control gồm 2 tham chiếu
- Thời lượng điều phối bộ chuyển đổi🔒er Mixerがアダプもここでの待ち時間が長いと、メッシュのパフォーマンスに絶対的な影響があります。繰り返 CPMすが,p90のレイテルンミテ mũ秒未満 ánhある必要があります tiệm của bạn
Galleyの監視
Galleyは、Istioの構成の検証、取り込み、処理、および配布を行うコンポーネントです。以定設Kubernetes API ホーバー xảらPilotち伝えます khôn Pilotと同様に、システム内のサービスとエンドポイントの数に応じてスケーリングする傾向があります。
- ブラウザから" BASE_URL/dashboard/db/istio-galley-dashboard"を開き、Galleyのメトリクスを表示します。
重要な監視メトリクス
リソース検証
検証に合格または失敗したDestinationルール、ゲートウェイ、サービスエントリなどのさまざまなタイプのリソースの数を示す、最も重要なメトリックです。
接続されたクライアント
Galleyに接続されているクライアントの数を示します。通常 これは3(Thí điểm,istio-telemetry,istio-policy)であり{4/}これらのケポれのスケポーれトのスケケークわẠてスケ
15. Istioのトララル lông ラẤc bên Cột sống
データプレーンのトラブルシューティング
設定に問題があることがPilotダッシュボードに示されている場合は、PIlotログを調べるか、istioctlを使用して設定の問題を見つける必要があります。
{2/}実際いトistio-pilot -...設トラッルクタイテスるス点タンスのPod識別子 noreferrer置きだえまする
結果のログで、プッシュステータスメッセージを検索します。例えば:
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プロキシにプッシュしようとしたときに発生した問題を示します。この場合、重複したアップストリーム宛先を示すいくつかの「クラスターの重複」メッセージが表示されています。
問題の診断 conversion関する話ポートトついてい}{Google CloudƯƠNG ポートトトトト Kiếm khoảngể mãn Trò chơi"
設定エラーの発見
istioctlを使用して構成を分析するには、istioctl experimental analyze -k --context $ OPS_GKE_1
を実行します。これにより、システムの構成の分析が実行され、提案された変更とともに問題が示されます。ドキュメント
16. クリーンアップ
管理者はcleanup_workshop.shスクリプトを実行して、bootstrap_workshop.shスクリプトによって作成されたリソースを削除します。クリーンアップスクリプトを実行するには、次の情報が必要です。
- 組織名 – 例.
yourcompany.com
- ワワークョップID –
YYMMDD-NN
**形式 khôn**例.200131-01
- 管用用GCSバケット - ワークッョップ作成スクィプトで定義
- Mây đám mây ma下のリンクをクリックしてください。
- 想定している管理者ユーザーで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}