このガイドでは、Anthos clusters on AWS に Anthos Service Mesh バージョン 1.8.6-asm.8 をインストールする方法について説明します。
Anthos Service Mesh では、Istio Ingress Gateway がプリインストールされています。ただし、Ingress コントローラを使用する場合は、Anthos Service Mesh を使用して Kubernetes Ingress リソースを設定できます。このガイドでは、Anthos Service Mesh のインストール方法と、オプションで Kubernetes Ingress リソースを設定する方法について説明します。
始める前に
Anthos Service Mesh のインストールを開始する前に、次のタスクを完了していることを確認してください。
- 管理サービスをインストールしている。
- ユーザー クラスタを作成している。
- AWS ネットワーキングを設定している。
- 設定を始める前に、次の要件と制限事項をご確認ください。
要件
Anthos Service Mesh をインストールするユーザー クラスタに、最低 4 つの vCPU、15 GB のメモリ、4 つのノードがあることを確認します。
ワークロードをデプロイする前に、サービスポートの命名をご覧ください。
クラスタ バージョンが、サポートされているプラットフォームに含まれていることを確認します。
制限事項
1 つの Google Cloud プロジェクトに関連付けることができるメッシュは 1 つのみです。
環境の設定
Anthos Service Mesh をインストールするマシンには、次のツールが必要です。Anthos Service Mesh はユーザー クラスタにのみインストールできます。管理クラスタにはインストールできません。
curl
コマンドライン ツール- Cloud SDK(
gcloud
コマンドライン ツール)
Cloud SDK をインストールしたら、次の手順を実施します。
Cloud SDK で認証します。
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)"
次のようにしてコンテキストをユーザー クラスタに切り替えます。
kubectl config use-context CLUSTER_NAME
ユーザー アカウント(Google Cloud ログイン メールアドレス)にクラスタ管理者の権限を付与します。この権限は、Anthos Service Mesh に必要なロールベースのアクセス制御(RBAC)ルールを作成するのに必要です。
kubectl 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.8.6-asm.8-linux-amd64.tar.gz
署名ファイルをダウンロードし、
openssl
を使用して署名を検証します。curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.8.6-asm.8-linux-amd64.tar.gz.1.sig openssl dgst -verify /dev/stdin -signature istio-1.8.6-asm.8-linux-amd64.tar.gz.1.sig istio-1.8.6-asm.8-linux-amd64.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
想定される出力は
Verified OK
です。ファイル システム上の任意の場所にファイルの内容を抽出します。たとえば、現在の作業ディレクトリにコンテンツを抽出するには、次のコマンドを実行します。
tar xzf istio-1.8.6-asm.8-linux-amd64.tar.gz
このコマンドにより、現在の作業ディレクトリに
istio-1.8.6-asm.8
という名前のインストール ディレクトリが作成されます。このディレクトリには、次のものが含まれます。samples
ディレクトリにあるサンプル アプリケーション。- Anthos Service Mesh のインストールに使用する
istioctl
コマンドライン ツールは、bin
ディレクトリにあります。 - Anthos Service Mesh 構成プロファイルは
manifests/profiles
ディレクトリにあります。
Anthos Service Mesh インストールのルート ディレクトリに移動していることを確認します。
cd istio-1.8.6-asm.8
Mac OS
Anthos Service Mesh インストール ファイルを現在の作業ディレクトリにダウンロードします。
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.8.6-asm.8-osx.tar.gz
署名ファイルをダウンロードし、
openssl
を使用して署名を検証します。curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.8.6-asm.8-osx.tar.gz.1.sig openssl dgst -sha256 -verify /dev/stdin -signature istio-1.8.6-asm.8-osx.tar.gz.1.sig istio-1.8.6-asm.8-osx.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
想定される出力は
Verified OK
です。ファイル システム上の任意の場所にファイルの内容を抽出します。たとえば、現在の作業ディレクトリにコンテンツを抽出するには、次のコマンドを実行します。
tar xzf istio-1.8.6-asm.8-osx.tar.gz
このコマンドにより、現在の作業ディレクトリに
istio-1.8.6-asm.8
という名前のインストール ディレクトリが作成されます。このディレクトリには、次のものが含まれます。samples
ディレクトリにあるサンプル アプリケーション。- Anthos Service Mesh のインストールに使用する
istioctl
コマンドライン ツールは、bin
ディレクトリにあります。 - Anthos Service Mesh 構成プロファイルは
manifests/profiles
ディレクトリにあります。
Anthos Service Mesh インストールのルート ディレクトリに移動していることを確認します。
cd istio-1.8.6-asm.8
Windows
Anthos Service Mesh インストール ファイルを現在の作業ディレクトリにダウンロードします。
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.8.6-asm.8-win.zip
署名ファイルをダウンロードし、
openssl
を使用して署名を検証します。curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.8.6-asm.8-win.zip.1.sig openssl dgst -verify - -signature istio-1.8.6-asm.8-win.zip.1.sig istio-1.8.6-asm.8-win.zip <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
想定される出力は
Verified OK
です。ファイル システム上の任意の場所にファイルの内容を抽出します。たとえば、現在の作業ディレクトリにコンテンツを抽出するには、次のコマンドを実行します。
tar xzf istio-1.8.6-asm.8-win.zip
このコマンドにより、現在の作業ディレクトリに
istio-1.8.6-asm.8
という名前のインストール ディレクトリが作成されます。このディレクトリには、次のものが含まれます。samples
ディレクトリにあるサンプル アプリケーション。- Anthos Service Mesh のインストールに使用する
istioctl
コマンドライン ツールは、bin
ディレクトリにあります。 - Anthos Service Mesh 構成プロファイルは
manifests/profiles
ディレクトリにあります。
Anthos Service Mesh インストールのルート ディレクトリに移動していることを確認します。
cd istio-1.8.6-asm.8
Anthos Service Mesh のインストール
このセクションでは、Anthos Service Mesh をユーザー クラスタにインストールする方法について説明します。Anthos Service Mesh をインストールすると、asm-multicloud
プロファイルの [サポートされる機能] ページにリストされた、サポートされているデフォルト機能が使用できるようになります。公開サブネットまたは非公開サブネットで Ingress を有効にすることもできます。
公開
必要に応じて、
istio-1.8.6-asm.8
ディレクトリに移動します。istioctl
クライアントはバージョンに依存します。istio-1.8.6-asm.8/bin
ディレクトリにあるバージョンを使用してください。次のコマンドを実行して、Anthos Service Mesh をインストールします。サポートされているオプション機能を有効にするには、コマンドラインで
-f
と YAML のファイル名を指定します。詳細については、オプション機能の有効化をご覧ください。次のコマンドを実行して Anthos Service Mesh をインストールします。
bin/istioctl install \ -f manifests/profiles/asm-multicloud.yaml \ --set revision=asm-186-8
--set revision
引数は、istio.io/rev=asm-186-8
形式のリビジョン ラベルをistiod
に追加します。リビジョン ラベルは、自動サイドカー インジェクタ Webhook によって使用され、挿入されたサイドカーを特定のistiod
リビジョンに関連付けます。名前空間のサイドカー自動挿入を有効にするには、istiod
のラベルと一致するリビジョンのラベルを付ける必要があります。検証 Webhook を構成して、リビジョン ラベルで
istiod
サービスを検出できるようにします。kubectl apply -f istiod-service.yaml
このコマンドは、構成の適用前に検証 Webhook が構成を自動的にチェックするサービス エントリを作成します。
限定公開
次の手順に沿って、Anthos Service Mesh が作成するすべてのサービスに service.beta.kubernetes.io/aws-load-balancer-internal
アノテーションを追加します。このアノテーションが存在する場合、Anthos clusters on AWS は非公開 Ingress サービスを作成します。
必要に応じて、
istio-1.8.6-asm.8
ディレクトリに移動します。istioctl
クライアントはバージョンに依存します。istio-1.8.6-asm.8/bin
ディレクトリにあるバージョンを使用してください。次の YAML を
istio-operator-internal-lb.yaml
というファイルに保存します。apiVersion: install.istio.io/v1alpha1 kind: IstioOperator spec: components: ingressGateways: - enabled: true k8s: serviceAnnotations: service.beta.kubernetes.io/aws-load-balancer-internal: "true" name: istio-ingressgateway
次のコマンドを実行して、Anthos Service Mesh をインストールします。サポートされているオプション機能を有効にするには、コマンドラインで
-f
と YAML のファイル名を指定します。詳細については、オプション機能の有効化をご覧ください。bin/istioctl install \ -f manifests/profiles/asm-multicloud.yaml \ --set revision=asm-186-8 \ -f istio-operator-internal-lb.yaml
--set revision
引数は、istio.io/rev=asm-186-8
形式のリビジョン ラベルをistiod
に追加します。リビジョン ラベルは、自動サイドカー インジェクタ Webhook によって使用され、挿入されたサイドカーを特定のistiod
リビジョンに関連付けます。名前空間のサイドカー自動挿入を有効にするには、istiod
のラベルと一致するリビジョンのラベルを付ける必要があります。検証 Webhook を構成して、リビジョン ラベルで
istiod
サービスを検出できるようにします。kubectl apply -f istiod-service.yaml
このコマンドは、構成の適用前に検証 Webhook が構成を自動的にチェックするサービス エントリを作成します。
コントロール プレーン コンポーネントを確認する
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
これで、あらかじめ Ingress ゲートウェイがインストールされた Anthos Service Mesh コントロール プレーンがインストールされました。Ingress コントローラを使用する Ingress の機能のみが必要な場合は、クラスタにアプリケーションをインストールする準備ができました。Ingress リソースの構成方法については、サンプル Deployment の作成をご覧ください。
Anthos Service Mesh が提供する機能をすべて利用する場合は、インストールの次のフェーズに進んで、サイドカー プロキシを挿入し、ワークロードを再起動します。
サイドカー プロキシの挿入
Anthos Service Mesh は、サイドカー プロキシを使用してネットワークのセキュリティ、信頼性、オブザーバビリティを強化します。Anthos Service Mesh では、これらの機能がアプリケーションのプライマリ コンテナから抽出され、同じ Pod 内の個別のコンテナとして提供される共通のプロセス外プロキシに実装されます。
インストールは、自動サイドカー プロキシ挿入(自動挿入)を有効化して、Anthos Service Mesh をインストールする前にクラスタで実行していたワークロードの Pod を再起動するまで完了しません。
自動挿入を有効にするには、Anthos Service Mesh をインストールしたときに istiod
に設定したリビジョン ラベルで名前空間にラベルを付けます。リビジョン ラベルは、サイドカー インジェクタ Webhook によって使用され、挿入されたサイドカーを特定の istiod
リビジョンに関連付けます。ラベルを追加したら、サイドカーを挿入できるように、名前空間内の既存の Pod を再起動する必要があります。
新しいワークロードを新しい名前空間にデプロイする前に、Anthos Service Mesh がトラフィックのモニタリングと保護を行えるように自動挿入を構成してください。
自動インジェクションを有効にするには:
次のコマンドを使用して、
istiod
のリビジョン ラベルを探します。kubectl -n istio-system get pods -l app=istiod --show-labels
出力は次のようになります。
NAME READY STATUS RESTARTS AGE LABELS istiod-asm-186-8-5788d57586-bljj4 1/1 Running 0 23h app=istiod,istio.io/rev=asm-186-8,istio=istiod,pod-template-hash=5788d57586 istiod-asm-186-8-5788d57586-vsklm 1/1 Running 1 23h app=istiod,istio.io/rev=asm-186-8,istio=istiod,pod-template-hash=5788d57586
出力の
LABELS
列で、接頭辞istio.io/rev=
に続くistiod
リビジョン ラベルの値をメモします。この例での値はasm-186-8
です。リビジョン ラベルを適用し、存在する場合は
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
Ingress Gateway へのアクセス
Anthos Service Mesh には事前構成された Ingress ゲートウェイ istio-ingressgateway
があります。これにより、サービス メッシュで実行されているアプリケーションへの受信トラフィックを管理できます。クラスタ外(ブラウザなど)からアプリケーションにアクセスできるようにするには、次のコマンドを実行します。
istio-ingressgateway
が構成されている外部ロードバランサの外部 IP アドレスか、ホスト名とポートを取得する必要があります。アプリケーションでは、Online Boutique サンプル アプリケーションの
frontend-gateway.yaml
と同様に、ゲートウェイと VirtualService リソースを定義する必要があります。
istio-ingressgateway
の外部アドレスを取得するには:
INGRESS_HOST
環境変数を作成します。export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
INGRESS_PORT
環境変数を作成します。export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
テストするには、Online Boutique などのサンプル アプリケーションをデプロイします。
ブラウザでアプリケーションにアクセスするには、URL に
$INGRESS_HOST:$INGRESS_PORT
の値を使用します。
トラブルシューティング
Anthos clusters on AWS には、ロードバランサのエンドポイントを含むサブネットのタグが必要です。Anthos clusters on AWS は、AWSCluster
リソースの spec.Networking.ServiceLoadBalancerSubnetIDs
フィールドで指定されたすべてのサブネットに自動的にタグ付けします。
ユーザー クラスタにサブネットを追加する場合、または既存のサブネットにタグを再適用する必要がある場合は、次の手順に沿って操作します。
anthos-aws
ディレクトリからanthos-gke
を使用して、コンテキストを管理サービスに切り替えます。cd anthos-aws anthos-gke aws management get-credentials
kubectl
を使用してクラスタの AWS VPC の ID を取得し、これを変数として保存します。export VPC_ID=$(\ env HTTP_PROXY=http://localhost:8118 \ kubectl get awscluster cluster-0 -o jsonpath='{.spec.networking.vpcID}')
echo
を使用して変数の内容を確認します。出力はvpc-12345678abcdef0
のようになります。echo $VPC_ID
クラスタ ID を環境変数に保存します。
export CLUSTER_ID=$(\ env HTTP_PROXY=http://localhost:8118 \ kubectl get awscluster cluster-0 -o jsonpath='{.status.clusterID}')
この変数は
echo
で確認できます。echo $CLUSTER_ID
レスポンスにクラスタ ID が含まれます。
gke-12345678
Anthos clusters on AWS クラスタを専用 VPC にインストールした場合は、
aws
コマンドライン ツールを使用してサブネット ID を取得できます。次のいずれかを選択します。
- 公開。パブリック サブネットで Service を公開する場合に使用します。
- 非公開。プライベート サブネットで Service を公開する場合に使用します。
複数のサブネット。複数のサブネットで Service を公開する場合に使用します。
公開
export SUBNET_ID=$(aws ec2 describe-subnets \ --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*public*" \ --query "Subnets[*].SubnetId" \ --output text)
出力は、サブネット ID を含むオブジェクトです。
subnet-1234abcdefg
のようになります。この変数はecho
で確認できます。echo $SUBNET_ID
レスポンスに、サブネット ID が含まれます。
subnet-012345678abcdef
非公開
export SUBNET_ID=$(aws ec2 describe-subnets \ --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*private*" \ --query "Subnets[*].SubnetId" \ --output text)
出力は、サブネット ID を含むオブジェクトです。
subnet-1234abcdefg
のようになります。この変数はecho
で確認できます。echo $SUBNET_ID
レスポンスに、サブネット ID が含まれます。
subnet-012345678abcdef
複数のサブネット
AWSNodePool に複数のサブネットを使用している場合(たとえば、複数のアベイラビリティ ゾーンを使用している場合)、サブネット ID を個別にタグ付けする必要があります。
aws ec2 describe-subnets
を使用してサブネット ID のリストを取得します。すべてのパブリック サブネットのリストを取得するには、次のコマンドを実行します。
aws ec2 describe-subnets \ --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*public*" \ --query "Subnets[*].SubnetId" \ --output text
すべてのプライベート サブネットのリストを取得するには、次のコマンドを実行します。
aws ec2 describe-subnets \ --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*private*" \ --query "Subnets[*].SubnetId" \ --output text
レスポンスに、サブネット ID が含まれます。
subnet-012345678abcdef subnet-abcdef123456789 subnet-123456789abcdef
サブネットにクラスタ ID を使用してタグを付けます。複数のサブネットがある場合は、「複数のサブネット」のコマンドを実行してください。
単一のサブネット
aws ec2 create-tags \ --resources $SUBNET_ID \ --tags Key=kubernetes.io/cluster/$CLUSTER_ID,Value=shared
複数のサブネット
サブネットごとに、次のコマンドを実行します。
aws ec2 create-tags \ --resources subnet-ids \ --tags Key=kubernetes.io/cluster/$CLUSTER_ID,Value=shared
subnet-ids は、スペースで区切ったサブネット ID のリストに置き換えます。例:
subnet-012345678abcdef subnet-abcdef123456789 subnet-123456789abcdef
次のステップ
Anthos clusters on AWS にサンプル デプロイを作成する。