このガイドでは、既存のVMware 上の GKE クラスタに Anthos Service Mesh バージョン 1.7.8-asm.10 をクリーン インストールする方法を説明します。以前のバージョンの Anthos Service Mesh がインストールされている場合は、GKE on VMware での Anthos Service Mesh のアップグレードをご覧ください。
インストールすると、asm-multicloud
構成プロファイルによりクラスタ上でサポートされる機能が有効になります。
コントロール プレーン コンポーネントの概要
GKE on VMware には、次の Istio コンポーネントがプリインストールされています。
- Citadel は
kube-system
名前空間にインストールされます。 - パイロットと Istio Ingress Gateway は
gke-system
名前空間にインストールされます。
GKE on VMware では、これらのコンポーネントを使用して Ingress を有効にし、Google が管理するコンポーネント間のセキュア通信を実現しています。Ingress 機能のみが必要な場合は、OSS Istio または Anthos Service Mesh をインストールする必要はありません。Ingress の構成の詳細については、Ingress を有効にするをご覧ください。
Anthos Service Mesh をインストールすると、そのコンポーネントは istio-system
名前空間にインストールされます。Anthos Service Mesh コンポーネントは別の名前空間にあるため、GKE on VMware がプリインストールされた Istio コンポーネントと競合することはありません。
準備
次の要件を確認してから設定を開始してください。
要件
Anthos のサブスクリプションが必要です。また、Google Cloud の GKE Enterprise の場合のみ、従量課金制の請求オプションを使用できます。詳細については、GKE Enterprise の料金ガイドをご覧ください。
Anthos Service Mesh をインストールするユーザー クラスタには、少なくとも vCPU が 4 つ、メモリが 15 GB、ノードが 4 つあることを確認します。
サービスポートには、
name: protocol[-suffix]
の構文を使用して名前を指定する必要があります。角かっこはオプションの接尾辞を示しており、この接尾辞は先頭をダッシュにする必要があります。詳細については、サービスポートの命名をご覧ください。クラスタ バージョンがサポートされる環境に含まれていることを確認します。クラスタのバージョンを確認するには、
gkectl
コマンドライン ツールを使用します。gkectl
がインストールされていない場合は、GKE On-Prem のダウンロードをご覧ください。gkectl version
環境設定
Anthos Service Mesh をインストールするマシンには、次のツールが必要です。Anthos Service Mesh はユーザー クラスタにのみインストールできます。管理クラスタにはインストールできません。
curl
コマンドライン ツール- Google Cloud CLI
Google Cloud CLI をインストールした後:
Google Cloud CLI で認証します。
gcloud auth login
コンポーネントを更新します。
gcloud components update
kubectl
をインストールします。gcloud components install kubectl
Online Boutique のサンプル アプリケーションでインストールをデプロイしてテストする場合は、
kpt
をインストールします。gcloud components install kpt
コンテキストをユーザー クラスタに切り替えます(必要な場合)。
kubectl config use-context CLUSTER_NAME
ユーザー アカウント(Google Cloud ログイン メールアドレス)にクラスタ管理者の権限を付与します。この権限は、Anthos Service Mesh に必要なロールベースのアクセス制御(RBAC)ルールを作成するのに必要です。
kubectl create clusterrolebinding cluster-admin-binding \ --clusterrole=cluster-admin \ --user=USER_ACCOUNT
インストール ファイルのダウンロード
- Anthos Service Mesh インストール ファイルを現在の作業ディレクトリにダウンロードします。
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-linux-amd64.tar.gz
- 署名ファイルをダウンロードし、
openssl
を使用して署名を検証します。curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-linux-amd64.tar.gz.1.sig openssl dgst -verify /dev/stdin -signature istio-1.7.8-asm.10-linux-amd64.tar.gz.1.sig istio-1.7.8-asm.10-linux-amd64.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
想定される出力は
Verified OK
です。 -
ファイル システム上の任意の場所にファイルの内容を抽出します。たとえば、現在の作業ディレクトリにコンテンツを抽出するには、次のコマンドを実行します。
tar xzf istio-1.7.8-asm.10-linux-amd64.tar.gz
このコマンドにより、現在の作業ディレクトリに
istio-1.7.8-asm.10
という名前のインストール ディレクトリが作成されます。このディレクトリには、次のものが含まれます。samples
ディレクトリにあるサンプル アプリケーション- Anthos Service Mesh のインストールに使用する
istioctl
コマンドライン ツールは、bin
ディレクトリにあります。 - Anthos Service Mesh 構成プロファイルは
install/kubernetes/operator/profiles
ディレクトリにあります。
- Anthos Service Mesh インストール ファイルを現在の作業ディレクトリにダウンロードします。
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-osx.tar.gz
- 署名ファイルをダウンロードし、
openssl
を使用して署名を検証します。curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-osx.tar.gz.1.sig openssl dgst -sha256 -verify /dev/stdin -signature istio-1.7.8-asm.10-osx.tar.gz.1.sig istio-1.7.8-asm.10-osx.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
想定される出力は
Verified OK
です。 -
ファイル システム上の任意の場所にファイルの内容を抽出します。たとえば、現在の作業ディレクトリにコンテンツを抽出するには、次のコマンドを実行します。
tar xzf istio-1.7.8-asm.10-osx.tar.gz
このコマンドにより、現在の作業ディレクトリに
istio-1.7.8-asm.10
という名前のインストール ディレクトリが作成されます。このディレクトリには、次のものが含まれます。samples
ディレクトリにあるサンプル アプリケーション- Anthos Service Mesh のインストールに使用する
istioctl
コマンドライン ツールは、bin
ディレクトリにあります。 - Anthos Service Mesh 構成プロファイルは
install/kubernetes/operator/profiles
ディレクトリにあります。
- Anthos Service Mesh インストール ファイルを現在の作業ディレクトリにダウンロードします。
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-win.zip
- 署名ファイルをダウンロードし、
openssl
を使用して署名を検証します。curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-win.zip.1.sig openssl dgst -verify - -signature istio-1.7.8-asm.10-win.zip.1.sig istio-1.7.8-asm.10-win.zip <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
想定される出力は
Verified OK
です。 -
ファイル システム上の任意の場所にファイルの内容を抽出します。たとえば、現在の作業ディレクトリにコンテンツを抽出するには、次のコマンドを実行します。
tar xzf istio-1.7.8-asm.10-win.zip
このコマンドにより、現在の作業ディレクトリに
istio-1.7.8-asm.10
という名前のインストール ディレクトリが作成されます。このディレクトリには、次のものが含まれます。samples
ディレクトリにあるサンプル アプリケーション- Anthos Service Mesh のインストールに使用する
istioctl
コマンドライン ツールは、bin
ディレクトリにあります。 - Anthos Service Mesh 構成プロファイルは
install/kubernetes/operator/profiles
ディレクトリにあります。
- Anthos Service Mesh インストールのルート ディレクトリに移動していることを確認します。
cd istio-1.7.8-asm.10
- 利便性を考えて、
/bin
ディレクトリ内のツールを PATH に追加します。export PATH=$PWD/bin:$PATH
Linux
Mac OS
Windows
istio-system
名前空間を作成します。
コントロール プレーン コンポーネント用に istio-system という名前空間を作成します。
kubectl create namespace istio-system
検証 Webhook の構成
Anthos Service Mesh をインストールするときに、istiod
にリビジョン ラベルを設定します。検証 Webhook に同じリビジョンを設定する必要があります。
次の YAML を istiod-service.yaml
という名前のファイルにコピーします。
apiVersion: v1
kind: Service
metadata:
name: istiod
namespace: istio-system
labels:
istio.io/rev: asm-178-10
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-178-10
Anthos Service Mesh のインストール
次のコマンドを実行し、
asm-multicloud
プロファイルを使用して Anthos Service Mesh をインストールします。サポートされているオプション機能を有効にするには、コマンドラインで-f
と YAML のファイル名を指定します。詳細については、オプション機能の有効化をご覧ください。istioctl install \ --set profile=asm-multicloud \ --set revision=asm-178-10
--set revision
引数は、istio.io/rev=asm-178-10
形式のリビジョン ラベルをistiod
に追加します。リビジョン ラベルは、自動サイドカー インジェクタ Webhook によって使用され、挿入されたサイドカーを特定のistiod
リビジョンに関連付けます。名前空間のサイドカー自動挿入を有効にするには、istiod
のラベルと一致するリビジョンのラベルを付ける必要があります。検証 Webhook を構成して、リビジョン ラベルで
istiod
サービスを検出できるようにします。kubectl apply -f istiod-service.yaml
このコマンドは、構成の適用前に検証 Webhook が構成を自動的にチェックするサービス エントリを作成します。
自動相互 TLS(自動 mTLS)はデフォルトで有効になっています。自動 mTLS の場合、クライアント サイドカー プロキシがサーバーにサイドカーがあるかどうかを自動的に検出します。クライアント サイドカーは、サイドカーを含むワークロードに mTLS を送信し、サイドカーなしでワークロードに書式なしテキストのトラフィックを送信します。
コントロール プレーン コンポーネントを確認する
istio-system
のコントロール プレーン Pod が稼働していることを確認します。
kubectl 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 内の個別のコンテナとして提供される共通のプロセス外プロキシに実装されます。Pod にサイドカー プロキシを挿入するには、Anthos Service Mesh をインストールしたときに istiod
に設定したものと同じリビジョン ラベルを使用して名前空間をラベル付けし、自動サイドカー プロキシ インジェクション(自動インジェクション)を構成します。
Anthos Service Mesh をインストールする前に、クラスタで実行されているワークロードがある名前空間で自動インジェクションを有効にする必要があります。
新しいワークロードをデプロイする前に、Anthos Service Mesh がトラフィックをモニタリングおよび保護できるように、自動インジェクションを構成します。
自動インジェクションを有効にするには:
次のコマンドを使用して、
istiod
のリビジョン ラベルを探します。kubectl -n istio-system get pods -l app=istiod --show-labels
出力は次のようになります。
NAME READY STATUS RESTARTS AGE LABELS istiod-asm-178-10-5788d57586-bljj4 1/1 Running 0 23h app=istiod,istio.io/rev=asm-178-10,istio=istiod,pod-template-hash=5788d57586 istiod-asm-178-10-5788d57586-vsklm 1/1 Running 1 23h app=istiod,istio.io/rev=asm-178-10,istio=istiod,pod-template-hash=5788d57586
出力の
LABELS
列で、接頭辞istio.io/rev=
に続くistiod
リビジョン ラベルの値をメモします。この例での値はasm-178-10
です。リビジョン ラベルを適用し、存在する場合は
istio-injection
ラベルを削除します。次のコマンドで、NAMESPACE
は自動インジェクションを有効にする名前空間の名前で、REVISION
は前の手順でメモしたリビジョン ラベルです。kubectl 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 rollout restart deployment -n NAMESPACE
Pod が新しいバージョンの
istiod
を指すように構成されていることを確認します。kubectl get pods -n NAMESPACE -l istio.io/rev=REVISION
外部 IP アドレスの構成
デフォルトの Anthos Service Mesh インストールでは、外部 IP アドレスが LoadBalancer
サービスに自動的に割り振られることを前提としています。これは、GKE on VMware には当てはまりません。このため、Anthos Service Mesh Ingress Gateway リソースに IP アドレスを手動で割り振る必要があります。
外部 IP アドレスを構成するには、クラスタの負荷分散モードに応じて、以下のいずれかのセクションに従います。
統合負荷分散モードを構成する
istio-ingressgateway
Service の構成を開きます。kubectl edit svc -n istio-system istio-ingressgateway
istio-ingressgateway
Service の構成がシェルのデフォルトのテキスト エディタで開かれます。このファイルの仕様(
spec
)ブロックの下に次の行を追加します。loadBalancerIP: <your static external IP address>
例:
spec: loadBalancerIP: 203.0.113.1
ファイルを保存します。
手動負荷分散モードを構成する
選択したロードバランサで VIP を使用して NodePort タイプの Service を公開するには、まず nodePort
値を確認する必要があります。
シェルで
istio-ingressgateway
Service の構成を表示します。kubectl get svc -n istio-system istio-ingressgateway -o yaml
Anthos Service Mesh のゲートウェイの各ポートが表示されます。コマンドの出力は次のようになります。
... ports: - name: status-port nodePort: 30391 port: 15020 protocol: TCP targetPort: 15020 - name: http2 nodePort: 31380 port: 80 protocol: TCP targetPort: 80 - name: https nodePort: 31390 port: 443 protocol: TCP targetPort: 443 - name: tcp nodePort: 31400 port: 31400 protocol: TCP targetPort: 31400 - name: https-kiali nodePort: 31073 port: 15029 protocol: TCP targetPort: 15029 - name: https-prometheus nodePort: 30253 port: 15030 protocol: TCP targetPort: 15030 - name: https-grafana nodePort: 30050 port: 15031 protocol: TCP targetPort: 15031 - name: https-tracing nodePort: 31204 port: 15032 protocol: TCP targetPort: 15032 - name: tls nodePort: 30158 port: 15443 protocol: TCP targetPort: 15443 ...
こうしたポートはロードバランサで公開されます。
たとえば、
http2
という名前のサービスポートにはport
80 とnodePort
31380 があります。ユーザー クラスタのノードアドレスが192.168.0.10
、192.168.0.11
、192.168.0.12
で、ロードバランサの VIP が203.0.113.1
であると仮定します。203.0.113.1:80
に送信されたトラフィックが192.168.0.10:31380
、192.168.0.11:31380
、192.168.0.12:31380
のいずれかに転送されるようにロードバランサを構成します。この指定された VIP で公開するサービスポートを選択できます。