このガイドでは、既存のVMware 上の GKE クラスタに Anthos Service Mesh バージョン 1.6.14-asm.2 をクリーン インストールする方法を説明します。以前のバージョンの 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 version
正常終了した場合は、出力は次のようになります。
1.4.0-gke.13 (git-b39331512)
gkectl
がインストールされていない場合は、GKE On-Prem のダウンロードをご覧ください。
環境設定
Anthos Service Mesh をインストールするマシンには、次のツールが必要です。Anthos Service Mesh はユーザー クラスタにのみインストールできます。管理クラスタにはインストールできません。
curl
コマンドライン ツール- Google Cloud CLI
gcloud CLI のインストール後、次の手順に従います。
gcloud 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.6.14-asm.2-linux-amd64.tar.gz
- 署名ファイルをダウンロードし、
openssl
を使用して署名を検証します。curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-linux-amd64.tar.gz.1.sig openssl dgst -verify /dev/stdin -signature istio-1.6.14-asm.2-linux-amd64.tar.gz.1.sig istio-1.6.14-asm.2-linux-amd64.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
想定される出力は
Verified OK
です。 -
ファイル システム上の任意の場所にファイルの内容を抽出します。たとえば、現在の作業ディレクトリにコンテンツを抽出するには、次のコマンドを実行します。
tar xzf istio-1.6.14-asm.2-linux-amd64.tar.gz
このコマンドにより、現在の作業ディレクトリに
istio-1.6.14-asm.2
という名前のインストール ディレクトリが作成されます。このディレクトリには、次のものが含まれます。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.6.14-asm.2-osx.tar.gz
- 署名ファイルをダウンロードし、
openssl
を使用して署名を検証します。curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-osx.tar.gz.1.sig openssl dgst -sha256 -verify /dev/stdin -signature istio-1.6.14-asm.2-osx.tar.gz.1.sig istio-1.6.14-asm.2-osx.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
想定される出力は
Verified OK
です。 -
ファイル システム上の任意の場所にファイルの内容を抽出します。たとえば、現在の作業ディレクトリにコンテンツを抽出するには、次のコマンドを実行します。
tar xzf istio-1.6.14-asm.2-osx.tar.gz
このコマンドにより、現在の作業ディレクトリに
istio-1.6.14-asm.2
という名前のインストール ディレクトリが作成されます。このディレクトリには、次のものが含まれます。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.6.14-asm.2-win.zip
- 署名ファイルをダウンロードし、
openssl
を使用して署名を検証します。curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-win.zip.1.sig openssl dgst -verify - -signature istio-1.6.14-asm.2-win.zip.1.sig istio-1.6.14-asm.2-win.zip <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
想定される出力は
Verified OK
です。 -
ファイル システム上の任意の場所にファイルの内容を抽出します。たとえば、現在の作業ディレクトリにコンテンツを抽出するには、次のコマンドを実行します。
tar xzf istio-1.6.14-asm.2-win.zip
このコマンドにより、現在の作業ディレクトリに
istio-1.6.14-asm.2
という名前のインストール ディレクトリが作成されます。このディレクトリには、次のものが含まれます。samples
ディレクトリにあるサンプル アプリケーション- Anthos Service Mesh のインストールに使用する
istioctl
コマンドライン ツールは、bin
ディレクトリにあります。 - Anthos Service Mesh 構成プロファイルは
install/kubernetes/operator/profiles
ディレクトリにあります。
- Anthos Service Mesh インストールのルート ディレクトリに移動していることを確認します。
cd istio-1.6.14-asm.2
- 利便性を考えて、
/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-1614-2
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-1614-2
Anthos Service Mesh のインストール
次のコマンドを実行し、
asm-multicloud
プロファイルを使用して Anthos Service Mesh をインストールします。サポートされているオプション機能を有効にするには、コマンドラインで-f
と YAML のファイル名を指定します。詳細については、オプション機能の有効化をご覧ください。istioctl install \ --set profile=asm-multicloud \ --set revision=asm-1614-2
--set revision
引数は、istio.io/rev=asm-1614-2
形式のリビジョン ラベルを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 内の個別のコンテナとして提供される共通のプロセス外プロキシに実装されます。
ワークロードをデプロイする前に、サイドカー プロキシ インジェクションを構成して、Anthos Service Mesh がトラフィックをモニタリングし、保護できるようにします。
Anthos Service Mesh のインストール前にクラスタで実行されていたワークロードの場合、現在の Anthos Service Mesh バージョンを使用するように、サイドカー プロキシを挿入または更新する必要があります。新しいワークロードをデプロイする前に、サイドカー プロキシ インジェクションを構成して、Anthos Service Mesh がトラフィックをモニタリングし、保護できるようにします。
サイドカー自動挿入を有効にするには、istiod
で設定したリビジョンと同じ名前を使用して、名前空間にラベルを付けます。次のコマンドを実行して、istiod
のラベルを表示します。
kubectl -n istio-system get pods -l app=istiod --show-labels
リビジョン ラベル istio.io/rev=asm-1614-2
が出力にあることを確認します。これは、自動挿入を有効にするために使用するラベルです。自動挿入は、次のように 1 つのコマンドで有効にできます。
kubectl label namespace NAMESPACE istio-injection- istio.io/rev=asm-1614-2 --overwrite
ここで、NAMESPACE
はアプリケーションのサービスの名前空間の名前です。名前空間を明示的に作成していない場合は default
です。
詳細については、サイドカー プロキシの挿入をご覧ください。
外部 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 で公開するサービスポートを選択できます。