このガイドでは、GKE on VMware とベアメタル版 Anthos クラスタに、Anthos Service Mesh バージョン 1.11.8-asm.4 をクリーン インストールする方法について説明します。以前のバージョンの Anthos Service Mesh がインストールされている場合は、オンプレミスでの Anthos Service Mesh のアップグレードをご覧ください。インストール ガイドでは、Anthos Service Mesh の認証局(Mesh CA)または Istio 認証局(旧称 Citadel)のインストール方法について説明します。このガイドではクラスタを cluster1
と表記していますが、説明された手順を繰り返して多数のクラスタを設定することもできます。
コントロール プレーン コンポーネントの概要
GKE on VMware とベアメタル版 Anthos クラスタには、次の Istio コンポーネントがプリインストールされています。
- Istio 認証局(旧称 Citadel)は
kube-system
名前空間にインストールされます。 - Istio Ingress Gateway とその他の Istio コンポーネントは、
gke-system
名前空間にインストールされます。
GKE on VMware とベアメタル版 Anthos クラスタでは、これらのコンポーネントを使用して Ingress を有効化し、Google が管理するコンポーネント間の安全な通信を実現します。
Anthos Service Mesh をインストールすると、そのコンポーネントは istio-system
名前空間にインストールされます。Anthos Service Mesh コンポーネントは別の名前空間にあるため、プリインストールされた Istio コンポーネントとは競合しません。
始める前に
次の要件を確認してから設定を開始してください。
要件
Anthos のサブスクリプションが必要です。また、Google Cloud の GKE Enterprise の場合のみ、従量課金制の請求オプションを使用できます。詳細については、GKE Enterprise の料金ガイドをご覧ください。
Anthos Service Mesh をインストールするユーザー クラスタには、少なくとも vCPU が 4 つ、メモリが 15 GB、ノードが 4 つあることを確認します。
Mesh CA のみ: ユーザー クラスタノードで Anthos Service Mesh のインストールを正常に完了させるには、インターネット接続が必要です。HTTP プロキシ経由でのインターネット アクセスはできません。
サービスポートには、
name: protocol[-suffix]
の構文を使用して名前を指定する必要があります。角かっこはオプションの接尾辞を示しており、この接尾辞は先頭をダッシュにする必要があります。詳細については、サービスポートの命名をご覧ください。クラスタ バージョンがサポートされるプラットフォームに含まれていることを確認します。
環境設定
インストール プロセスを管理するコンピュータには、次のツールが必要です。Anthos Service Mesh はユーザー クラスタにのみインストールできます。管理クラスタにはインストールできません。
curl
コマンドライン ツール- Google Cloud CLI
Google Cloud CLI をインストールした後:
Google Cloud CLI で認証します。
gcloud auth login
コンポーネントを更新します。
gcloud components update
kubectl
をインストールします。gcloud components install kubectl
kpt
をインストールします。curl -L https://github.com/GoogleContainerTools/kpt/releases/download/v0.39.2/kpt_linux_amd64 > kpt_0_39_2 chmod +x kpt_0_39_2 alias kpt="$(readlink -f kpt_0_39_2)"
環境変数の設定
このコマンドの出力の
NAME
列にある値を使用して、クラスタのコンテキスト名を取得します。kubectl config get-contexts
環境変数をクラスタ コンテキスト名に設定します。これは、このガイドの多くの手順で使用されます。
export CTX_CLUSTER1=CLUSTER1_CONTEXT_NAME
クラスタ管理者権限の付与
ユーザー アカウント(Google Cloud ログイン メールアドレス)にクラスタ管理者の権限を付与します。この権限は、Anthos Service Mesh に必要なロールベースのアクセス制御(RBAC)ルールを作成するのに必要です。
kubectl --context="${CTX_CLUSTER1}" create clusterrolebinding cluster-admin-binding \ --clusterrole=cluster-admin \ --user=USER_ACCOUNT
インストール ファイルのダウンロード
Linux
Anthos Service Mesh インストール ファイルを現在の作業ディレクトリにダウンロードします。
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.11.8-asm.4-linux-amd64.tar.gz
署名ファイルをダウンロードし、
openssl
を使用して署名を検証します。curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.11.8-asm.4-linux-amd64.tar.gz.1.sig openssl dgst -verify /dev/stdin -signature istio-1.11.8-asm.4-linux-amd64.tar.gz.1.sig istio-1.11.8-asm.4-linux-amd64.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
想定される出力は
Verified OK
です。ファイル システム上の任意の場所にファイルの内容を抽出します。たとえば、現在の作業ディレクトリにコンテンツを抽出するには、次のコマンドを実行します。
tar xzf istio-1.11.8-asm.4-linux-amd64.tar.gz
このコマンドにより、現在の作業ディレクトリに
istio-1.11.8-asm.4
という名前のインストール ディレクトリが作成されます。このディレクトリには、次のものが含まれます。samples
ディレクトリにあるサンプル アプリケーション。- Anthos Service Mesh のインストールに使用する
istioctl
コマンドライン ツールは、bin
ディレクトリにあります。 - Anthos Service Mesh 構成プロファイルは
manifests/profiles
ディレクトリにあります。
Anthos Service Mesh インストールのルート ディレクトリに移動していることを確認します。
cd istio-1.11.8-asm.4
Mac OS
Anthos Service Mesh インストール ファイルを現在の作業ディレクトリにダウンロードします。
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.11.8-asm.4-osx.tar.gz
署名ファイルをダウンロードし、
openssl
を使用して署名を検証します。curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.11.8-asm.4-osx.tar.gz.1.sig openssl dgst -sha256 -verify /dev/stdin -signature istio-1.11.8-asm.4-osx.tar.gz.1.sig istio-1.11.8-asm.4-osx.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
想定される出力は
Verified OK
です。ファイル システム上の任意の場所にファイルの内容を抽出します。たとえば、現在の作業ディレクトリにコンテンツを抽出するには、次のコマンドを実行します。
tar xzf istio-1.11.8-asm.4-osx.tar.gz
このコマンドにより、現在の作業ディレクトリに
istio-1.11.8-asm.4
という名前のインストール ディレクトリが作成されます。このディレクトリには、次のものが含まれます。samples
ディレクトリにあるサンプル アプリケーション。- Anthos Service Mesh のインストールに使用する
istioctl
コマンドライン ツールは、bin
ディレクトリにあります。 - Anthos Service Mesh 構成プロファイルは
manifests/profiles
ディレクトリにあります。
Anthos Service Mesh インストールのルート ディレクトリに移動していることを確認します。
cd istio-1.11.8-asm.4
Windows
Anthos Service Mesh インストール ファイルを現在の作業ディレクトリにダウンロードします。
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.11.8-asm.4-win.zip
署名ファイルをダウンロードし、
openssl
を使用して署名を検証します。curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.11.8-asm.4-win.zip.1.sig openssl dgst -verify - -signature istio-1.11.8-asm.4-win.zip.1.sig istio-1.11.8-asm.4-win.zip <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
想定される出力は
Verified OK
です。ファイル システム上の任意の場所にファイルの内容を抽出します。たとえば、現在の作業ディレクトリにコンテンツを抽出するには、次のコマンドを実行します。
tar xzf istio-1.11.8-asm.4-win.zip
このコマンドにより、現在の作業ディレクトリに
istio-1.11.8-asm.4
という名前のインストール ディレクトリが作成されます。このディレクトリには、次のものが含まれます。samples
ディレクトリにあるサンプル アプリケーション。- Anthos Service Mesh のインストールに使用する
istioctl
コマンドライン ツールは、bin
ディレクトリにあります。 - Anthos Service Mesh 構成プロファイルは
manifests/profiles
ディレクトリにあります。
Anthos Service Mesh インストールのルート ディレクトリに移動していることを確認します。
cd istio-1.11.8-asm.4
Mesh CA を使用する Anthos Service Mesh のインストール
このセクションでは、Mesh CA を使用する Anthos Service Mesh をインストールし、そのクラスタをフリートに登録する方法について説明します。次の理由から、Mesh CA を使用することをおすすめします。
- Mesh CA は信頼性とスケーラビリティに優れたサービスで、Google Cloud とオンプレミスで動的にスケーリングされるワークロード用に最適化されています。
- Mesh CA を使用する場合、Google は CA バックエンドのセキュリティと可用性を管理します。
- Mesh CA を使用すると、クラスタ間で単一のルート オブ トラストを使用できます。
独自のルート CA で Istio CA を使用する場合は、Istio CA の構成をご覧ください。
Mesh CA の機能はフリート登録によって異なります。デフォルトでは、クラスタはフリートに登録されます。クラスタのステータスを確認するには、登録済みクラスタの表示をご覧ください。
次の API を有効にします。
gcloud services enable \ anthos.googleapis.com \ cloudtrace.googleapis.com \ cloudresourcemanager.googleapis.com \ container.googleapis.com \ compute.googleapis.com \ gkeconnect.googleapis.com \ gkehub.googleapis.com \ iam.googleapis.com \ iamcredentials.googleapis.com \ logging.googleapis.com \ meshca.googleapis.com \ meshtelemetry.googleapis.com \ meshconfig.googleapis.com \ monitoring.googleapis.com \ stackdriver.googleapis.com \ sts.googleapis.com
メッシュ構成を初期化します。
IDENTITY_PROVIDER="$(kubectl get memberships.hub.gke.io membership -o=jsonpath='{.spec.identity_provider}')" IDENTITY="$(echo "${IDENTITY_PROVIDER}" | sed 's/^https:\/\/gkehub.googleapis.com\/projects\/\(.*\)\/locations\/global\/memberships\/\(.*\)$/\1 \2/g')" read -r ENVIRON_PROJECT_ID HUB_MEMBERSHIP_ID <<EOF ${IDENTITY} EOF POST_DATA='{"workloadIdentityPools":["'${ENVIRON_PROJECT_ID}'.hub.id.goog","'${ENVIRON_PROJECT_ID}'.svc.id.goog"]}' curl --request POST \ --header "Content-Type: application/json" \ --header "Authorization: Bearer $(gcloud auth print-access-token)" \ --data "${POST_DATA}" \ https://meshconfig.googleapis.com/v1alpha1/projects/${ENVIRON_PROJECT_ID}:initialize
インストールを構成します。
kpt pkg get \ https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.11 asm ENVIRON_PROJECT_NUMBER=$(gcloud projects describe "${ENVIRON_PROJECT_ID}" --format="value(projectNumber)") CLUSTER_NAME="${HUB_MEMBERSHIP_ID}" CLUSTER_LOCATION="global" HUB_IDP_URL="$(kubectl get memberships.hub.gke.io membership -o=jsonpath='{.spec.identity_provider}')" kpt cfg set asm gcloud.core.project ${ENVIRON_PROJECT_ID} kpt cfg set asm gcloud.container.cluster ${CLUSTER_NAME} kpt cfg set asm gcloud.compute.location ${CLUSTER_LOCATION} kpt cfg set asm anthos.servicemesh.hub gcr.io/gke-release/asm kpt cfg set asm anthos.servicemesh.rev asm-1118-4 kpt cfg set asm anthos.servicemesh.tag 1.11.8-asm.4 kpt cfg set asm gcloud.project.environProjectNumber ${ENVIRON_PROJECT_NUMBER} kpt cfg set asm anthos.servicemesh.trustDomain ${ENVIRON_PROJECT_ID}.svc.id.goog kpt cfg set asm anthos.servicemesh.idp-url "${HUB_IDP_URL}"
必要に応じて、
istio-1.11.8-asm.4
ディレクトリに移動します。istioctl
クライアントはバージョンに依存します。istio-1.11.8-asm.4/bin
ディレクトリにあるバージョンを使用してください。次のコマンドを実行して、Anthos Service Mesh をインストールします。
bin/istioctl install \ -f asm/istio/istio-operator.yaml \ -f asm/istio/options/hub-meshca.yaml --revision=asm-1118-4
サポートされているオプション機能を有効にするには、コマンドラインで
-f cluster.yaml
の後に-f
と YAML のファイル名を指定します。詳細については、オプション機能の有効化をご覧ください。
Istio CA を使用する Anthos Service Mesh のインストール
このセクションでは、Anthos Service Mesh On-Prem がワークロードの署名に使用する Istio CA の証明書と鍵を生成する方法について説明します。すでに Mesh CA を使用する Anthos Service Mesh をインストールしている場合は、デフォルト ネットワークの設定に進んでください。
最高レベルのセキュリティを確保するには、オフラインのルート CA を維持し、下位 CA を使用して各クラスタの証明書を発行することを強くおすすめします。詳しくは、CA 証明書のプラグインをご覧ください。この構成では、サービス メッシュ内のすべてのワークロードは同じルート認証局(CA)を使用します。各 Anthos Service Mesh CA は、ルート CA によって署名された中間 CA 署名鍵と証明書を使用します。メッシュ内に複数の CA が存在する場合、CA 間の信頼の階層を確立します。この手順を繰り返して、任意の数の認証局の証明書と鍵をプロビジョニングできます。
証明書と鍵のディレクトリを作成します。
mkdir -p certs && \ pushd certs
ルート証明書と鍵を生成します。
make -f ../tools/certs/Makefile.selfsigned.mk root-ca
これにより、次のファイルが生成されます。
- root-cert.pem: ルート証明書
- root-key.pem: ルート鍵
- root-ca.conf: ルート証明書を生成するための openssl の構成
- root-cert.csr: ルート証明書の CSR
中間証明書と鍵を生成します。
make -f ../tools/certs/Makefile.selfsigned.mk cluster1-cacerts
これにより、
cluster1
という名前のディレクトリにファイルが生成されます。- ca-cert.pem: 中間証明書
- ca-key.pem: 中間鍵
- cert-chain.pem: istiod が使用する証明書チェーン
- root-cert.pem: ルート証明書
オフラインのコンピュータを使用してこれらの手順を行う場合は、生成されたディレクトリを、クラスタにアクセスできるコンピュータにコピーします。
すべての入力ファイル
ca-cert.pem
、ca- key.pem
、root-cert.pem
、cert-chain.pem
を含むシークレットcacerts
を作成します。kubectl --context="${CTX_CLUSTER1}" create namespace istio-system kubectl --context="${CTX_CLUSTER1}" create secret generic cacerts -n istio-system \ --from-file=cluster1/ca-cert.pem \ --from-file=cluster1/ca-key.pem \ --from-file=cluster1/root-cert.pem \ --from-file=cluster1/cert-chain.pem
Anthos Service Mesh オンプレミスは、これらの証明書と鍵の存在を検出し、後のインストール プロセスで使用します。
前のディレクトリに戻ります。
popd
Istio CA を使用する Anthos Service Mesh の構成とインストール
このセクションでは、以前に生成した Istio CA(旧称 Citadel)証明書を使用して Anthos Service Mesh をインストールする方法について説明します。すでに Mesh CA を使用する Anthos Service Mesh をインストールしている場合は、デフォルト ネットワークの設定に進んでください。
プロジェクト ID の環境変数を作成します。
export PROJECT_ID=YOUR_PROJECT_ID
プロジェクト番号の環境変数を作成します。
export PROJECT_NUMBER=$(gcloud projects describe ${PROJECT_ID} --format="value(projectNumber)")
メッシュ ID の環境変数を作成します。任意の文字列を使用できますが、クラスタ間で一貫した形式にする必要があります。
export MESH_ID="proj-${PROJECT_NUMBER}"
クラスタのコントロール プレーンの構成を作成します。これにより、
asm-multicloud
プロファイルを使用して Anthos Service Mesh がインストールされます。サポートされているオプション機能を有効にするには、コマンドラインで-f
と YAML のファイル名を指定します。詳細については、オプション機能の有効化をご覧ください。下記の例で、
前の手順で定義した
MESH_ID
を使用します。NETWORK_ID
は、クラスタのネットワークを識別する任意の文字列です。このオンプレミス構成では、すべてのクラスタが独自のネットワーク上に存在するため、各クラスタに異なる値を指定する必要があります。NETWORK_ID
には、構文と文字セットで説明される Kubernetes ラベルと同じ文字列制限があります。
cat <<EOF > cluster.yaml apiVersion: install.istio.io/v1alpha1 kind: IstioOperator spec: profile: asm-multicloud revision: asm-1118-4 values: global: meshID: ${MESH_ID} multiCluster: clusterName: CLUSTER_NAME network: NETWORK_ID EOF
必要に応じて、
istio-1.11.8-asm.4
ディレクトリに移動します。istioctl
クライアントはバージョンに依存します。istio-1.11.8-asm.4/bin
ディレクトリにあるバージョンを使用してください。次のコマンドを実行して、Anthos Service Mesh をインストールします。サポートされているオプション機能を有効にするには、コマンドラインで
-f cluster.yaml
の後に-f
と YAML のファイル名を指定します。詳細については、オプション機能の有効化をご覧ください。bin/istioctl install \ --context="${CTX_CLUSTER1}" \ -f cluster.yaml
デフォルト ネットワークの設定
istio-system
名前空間でデフォルト ネットワークを設定します。
kubectl --context="${CTX_CLUSTER1}" label \ namespace istio-system topology.istio.io/network=NETWORK_ID
検証 Webhook の構成
Anthos Service Mesh をインストールするときに、istiod
にリビジョン ラベルを設定します。検証 Webhook に同じリビジョンを設定する必要があります。
次の YAML を
istiod-service.yaml
という名前のファイルにコピーします。cat <<EOF > istiod-service.yaml apiVersion: v1 kind: Service metadata: name: istiod namespace: istio-system labels: istio.io/rev: asm-1118-4 app: istiod istio: pilot release: istio spec: ports: - port: 15010 name: grpc-xds # plaintext protocol: TCP - port: 15012 name: https-dns # mTLS with k8s-signed cert protocol: TCP - port: 443 name: https-webhook # validation and injection targetPort: 15017 protocol: TCP - port: 15014 name: http-monitoring # prometheus stats protocol: TCP selector: app: istiod istio.io/rev: asm-1118-4 EOF
検証 Webhook を構成して、リビジョン ラベルで
istiod
サービスを検出できるようにします。kubectl --context="${CTX_CLUSTER1}" apply -f istiod-service.yaml
このコマンドは、構成の適用前に検証 Webhook が構成を自動的にチェックするサービス エントリを作成します。
自動相互 TLS(自動 mTLS)はデフォルトで有効になっています。自動 mTLS の場合、クライアント サイドカー プロキシがサーバーにサイドカーがあるかどうかを自動的に検出します。クライアント サイドカーは、サイドカーを含むワークロードに mTLS を送信し、サイドカーなしでワークロードに書式なしテキストのトラフィックを送信します。
コントロール プレーン コンポーネントの確認
istio-system
のコントロール プレーン Pod が稼働していることを確認します。
kubectl --context="${CTX_CLUSTER1}" get pod -n istio-system
予想される出力は次のようになります。
NAME READY STATUS RESTARTS AGE istio-ingressgateway-74cc894bfd-786rg 1/1 Running 0 7m19s istiod-78cdbbbdb-d7tps 1/1 Running 0 7m36s promsd-576b8db4d6-lqf64 2/2 Running 1 7m19s
サイドカー プロキシの挿入
Anthos Service Mesh は、サイドカー プロキシを使用してネットワークのセキュリティ、信頼性、オブザーバビリティを強化します。Anthos Service Mesh では、これらの機能がアプリケーションのプライマリ コンテナから抽出され、同じ Pod 内の個別のコンテナとして提供される共通のプロセス外プロキシに実装されます。
インストールは、自動サイドカー プロキシ挿入(自動挿入)を有効化して、Anthos Service Mesh をインストールする前にクラスタで実行していたワークロードの Pod を再起動するまで完了しません。
自動挿入を有効にするには、Anthos Service Mesh をインストールしたときに istiod
に設定したリビジョン ラベルで名前空間にラベルを付けます。リビジョン ラベルは、サイドカー インジェクタ Webhook によって使用され、挿入されたサイドカーを特定の istiod
リビジョンに関連付けます。ラベルを追加したら、サイドカーを挿入できるように、名前空間内の既存の Pod を再起動する必要があります。
新しいワークロードを新しい名前空間にデプロイする前に、Anthos Service Mesh がトラフィックのモニタリングと保護を行えるように自動挿入を構成してください。
自動インジェクションを有効にするには:
次のコマンドを使用して、
istiod
のリビジョン ラベルを探します。kubectl --context=${CTX_CLUSTER1} \ -n istio-system get pods -l app=istiod --show-labels
出力は次のようになります。
NAME READY STATUS RESTARTS AGE LABELS istiod-asm-1118-4-5788d57586-bljj4 1/1 Running 0 23h app=istiod,istio.io/rev=asm-1118-4,istio=istiod,pod-template-hash=5788d57586 istiod-asm-1118-4-5788d57586-vsklm 1/1 Running 1 23h app=istiod,istio.io/rev=asm-1118-4,istio=istiod,pod-template-hash=5788d57586
出力の
LABELS
列で、接頭辞istio.io/rev=
に続くistiod
リビジョン ラベルの値をメモします。この例での値はasm-1118-4
です。リビジョン ラベルを適用し、存在する場合は
istio-injection
ラベルを削除します。次のコマンドで、NAMESPACE
は自動インジェクションを有効にする名前空間の名前で、REVISION
は前の手順でメモしたリビジョン ラベルです。kubectl --context=${CTX_CLUSTER1} \ label namespace NAMESPACE istio-injection- istio.io/rev=REVISION --overwrite
出力中のメッセージ
"istio-injection not found"
は無視して構いません。これは、今までは名前空間にistio-injection
ラベルが付いていなかったことを意味します。Anthos Service Mesh の新規インストールや新規デプロイでは、こうなって当然です。名前空間にistio-injection
とリビジョン ラベルの両方があると自動インジェクションが失敗するため、Anthos Service Mesh ドキュメント内のすべてのkubectl label
コマンドにはistio-injection
ラベルの削除が含まれています。Anthos Service Mesh をインストールする前にクラスタでワークロードが実行されていた場合は、Pod を再起動して再インジェクションをトリガーします。
Pod を再起動する方法は、アプリケーションとクラスタが属する環境によって異なります。たとえば、ステージング環境では、すべての Pod を削除するのみの場合がありますが、それによって Pod が再起動されます。ただし、本番環境では、Blue/Green デプロイを実装するプロセスにより、トラフィックが中断しないように Pod を安全に再起動できます。
kubectl
を使用すると、ローリングの再起動を実行できます。kubectl --context=${CTX_CLUSTER1} \ rollout restart deployment -n NAMESPACE
Pod が新しいバージョンの
istiod
を指すように構成されていることを確認します。kubectl --context=${CTX_CLUSTER1} \ get pods -n NAMESPACE -l istio.io/rev=REVISION
次のステップ
オンプレミス サービス メッシュに複数のクラスタを使用する場合は、複数のクラスタとネットワークへのオンプレミス Anthos Service Mesh のインストールをご覧ください。
それ以外の場合、次のステップでは外部 IP アドレスの構成を行います。