Azure Kubernetes Service 用の Istio ベースのサービス メッシュ アドオンをデプロイする
この記事では、Azure Kubernetes Service (AKS) クラスター用の Istio ベースのサービス メッシュ アドオンをインストールする方法について説明します。
Istio とサービス メッシュ アドオンの詳細については、「Azure Kubernetes Service 用の Istio ベースのサービス メッシュ アドオン」を参照してください。
開始する前に
アドオンには、Azure CLI バージョン 2.57.0 以降がインストールされている必要があります。
az --version
を実行してバージョンを確認できます。 インストールまたはアップグレードする必要には、「Azure CLI のインストール」をご覧ください。リージョンで利用可能な Istio アドオン リビジョンと、それと AKS クラスター バージョンの互換性に関する情報を確認するには、コマンド
az aks mesh get-revisions
を使用します:az aks mesh get-revisions --location <location> -o table
istioctl
CLI コマンドを使用する場合は、Istio のアドオン インストールを指すフラグを含める必要があることに注意してください:--istioNamespace aks-istio-system
環境変数の設定
export CLUSTER=<cluster-name>
export RESOURCE_GROUP=<resource-group-name>
export LOCATION=<location>
Istio アドオンをインストールする
このセクションでは、クラスターの作成時に Istio アドオンをインストールする手順、または Azure CLI を使用して既存のクラスターに対して有効にする手順について説明します。 Bicep を使用してこのアドオンをインストールする場合は、Bicep を使用して AKS クラスターを Istio サービス メッシュ アドオンと共にインストールする方法のガイドを参照してください。 AKS クラスターの Bicep リソース定義の詳細については、「Bicep managedCluster リファレンス」を参照してください。
リビジョンの選択
リビジョンを指定せずにアドオンを有効にすると、既定でサポートされているリビジョンが自動的にインストールされます。
リビジョンを指定するには、次の手順を実行します。
az aks mesh get-revisions
コマンドを使用し、リージョンのさまざまな AKS クラスター バージョンにどのリビジョンが利用できるか確認します。- 使用可能なリビジョンに基づいて、メッシュ インストールに使用する enable コマンドに
--revision asm-X-Y
(例:--revision asm-1-20
) フラグを含めることができます。
クラスター作成中にメッシュをインストールする
クラスターの作成時に Istio アドオンをインストールするには、--enable-azure-service-mesh
または --enable-asm
パラメーターを使用します。
az group create --name ${RESOURCE_GROUP} --location ${LOCATION}
az aks create \
--resource-group ${RESOURCE_GROUP} \
--name ${CLUSTER} \
--enable-asm \
--generate-ssh-keys
既存のクラスターのメッシュをインストールする
次の例では、既存の AKS クラスターに対して Istio アドオンを有効にします。
重要
クラスターに OSM アドオンが既に存在する場合、既存のクラスターで Istio アドオンを有効にすることはできません。 Istio アドオンをインストールする前に、OSM アドオンをアンインストールします。 詳細については、AKS クラスターからの OSM アドオンのアンインストールに関する記事を参照してください。 Istio アドオンは、AKS クラスターのバージョン >= 1.23 でのみ有効にできます。
az aks mesh enable --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}
インストールの成功を確認する
Istio アドオンがクラスターにインストールされていることを確認するには、次のコマンドを実行します。
az aks show --resource-group ${RESOURCE_GROUP} --name ${CLUSTER} --query 'serviceMeshProfile.mode'
出力に Istio
が表示されていることを確認します。
AKS クラスターの資格情報に az aks get-credentials
を使用します。
az aks get-credentials --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}
istiod
(Istio コントロール プレーン) ポッドが正常に実行されていることを確認するには、kubectl
を使用します。
kubectl get pods -n aks-istio-system
istiod
ポッドの状態が Running
であることを確認します。 次に例を示します。
NAME READY STATUS RESTARTS AGE
istiod-asm-1-18-74f7f7c46c-xfdtl 1/1 Running 0 2m
istiod-asm-1-18-74f7f7c46c-4nt2v 1/1 Running 0 2m
サイドカー インジェクションを有効にする
新しいポッドにサイドカーを自動インストールするには、現在インストールされているコントロール プレーン リビジョンに対応するリビジョン ラベルを注釈として名前空間に付加する必要があります。
インストールされているリビジョンがわからない場合、次を使用します。
az aks show --resource-group ${RESOURCE_GROUP} --name ${CLUSTER} --query 'serviceMeshProfile.istio.revisions'
リビジョン ラベルを適用します。
kubectl label namespace default istio.io/rev=asm-X-Y
重要
既定のラベル付け istio-injection=enabled
は機能しません。 コントロール プレーンのリビジョンに一致する明示的なバージョン管理 (例: istio.io/rev=asm-1-18
) が必要です。
istioctl kube-inject
を使用してサイドカーを手動で挿入するには、istioNamespace
(-i
) と revision
(-r
) の追加のパラメーターを指定する必要があります。 次に例を示します。
kubectl apply -f <(istioctl kube-inject -f sample.yaml -i aks-istio-system -r asm-X-Y) -n foo
サイドカー インジェクションをトリガーする
テスト用に提供されたサンプル アプリケーションをデプロイするか、既存のワークロードのサイドカー インジェクションをトリガーできます。
既存のアプリケーション
メッシュに追加する既存のアプリケーションがある場合、前の手順のように名前空間のラベルが付いていることを確認し、デプロイを再起動してサイドカー インジェクションをトリガーします。
kubectl rollout restart -n <namespace> <deployment name>
すべてのコンテナーの準備ができていることを確認し、kubectl describe
出力で istio-proxy
コンテナーを探すことで、サイドカー インジェクションが成功したことを確認します。次に例を示します。
kubectl describe pod -n namespace <pod name>
istio-proxy
コンテナーは、Envoy サイドカーです。 これでアプリケーションがデータ プレーンの一部になりました。
サンプル アプリケーションをデプロイする
kubectl apply
を使用して、サンプル アプリケーションをクラスターにデプロイします。
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.18/samples/bookinfo/platform/kube/bookinfo.yaml
Note
送信インターネット アクセスに HTTP プロキシを使用するクラスターでは、サービス エントリを設定する必要があります。 セットアップ手順については、「Azure Kubernetes Service での HTTP プロキシのサポート」を参照してください
クラスターに複数のデプロイとサービスが作成されていることを確認します。 次に例を示します。
service/details created
serviceaccount/bookinfo-details created
deployment.apps/details-v1 created
service/ratings created
serviceaccount/bookinfo-ratings created
deployment.apps/ratings-v1 created
service/reviews created
serviceaccount/bookinfo-reviews created
deployment.apps/reviews-v1 created
deployment.apps/reviews-v2 created
deployment.apps/reviews-v3 created
service/productpage created
serviceaccount/bookinfo-productpage created
deployment.apps/productpage-v1 created
サービスが正常に作成されたことを確認するには、kubectl get services
を使用します。
kubectl get services
次のサービスがデプロイされたことを確認します。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
details ClusterIP 10.0.180.193 <none> 9080/TCP 87s
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 15m
productpage ClusterIP 10.0.112.238 <none> 9080/TCP 86s
ratings ClusterIP 10.0.15.201 <none> 9080/TCP 86s
reviews ClusterIP 10.0.73.95 <none> 9080/TCP 86s
kubectl get pods
NAME READY STATUS RESTARTS AGE
details-v1-558b8b4b76-2llld 2/2 Running 0 2m41s
productpage-v1-6987489c74-lpkgl 2/2 Running 0 2m40s
ratings-v1-7dc98c7588-vzftc 2/2 Running 0 2m41s
reviews-v1-7f99cc4496-gdxfn 2/2 Running 0 2m41s
reviews-v2-7d79d5bd5d-8zzqd 2/2 Running 0 2m41s
reviews-v3-7dbcdcbc56-m8dph 2/2 Running 0 2m41s
すべてのポッドの状態が Running
であり、READY
列に 2 つのコンテナーがあることを確認します。 各ポッドに追加された 2 つ目のコンテナー (istio-proxy
) が Istio によって挿入された Envoy サイドカーで、もう 1 つはアプリケーション コンテナーです。
このサンプル アプリケーションをイングレスに対してテストするには、次の手順を確認します。
リソースを削除する
サンプル アプリケーションを削除するには、kubectl delete
を使用します。
kubectl delete -f https://raw.githubusercontent.com/istio/istio/release-1.18/samples/bookinfo/platform/kube/bookinfo.yaml
クラスターで Istio イングレスを有効にする予定がないため、Istio アドオンを無効にする場合は、次のコマンドを実行します。
az aks mesh disable --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}
注意事項
サービス メッシュ アドオンを無効にすると、Istio コントロール プレーンがクラスターから完全に削除されます。
Istio CustomResourceDefintion
(CRD) は既定では削除されません。 これらをクリーンアップするには、こちらを使用します。
kubectl delete crd $(kubectl get crd -A | grep "istio.io" | awk '{print $1}')
az group delete
を使用して、クラスターと関連リソースを削除します。
az group delete --name ${RESOURCE_GROUP} --yes --no-wait
次のステップ
Azure Kubernetes Service