この記事では、Azure Kubernetes Service (AKS) クラスター用の Istio ベースのサービス メッシュ アドオンをインストールする方法について説明します。
Istio とサービス メッシュ アドオンの詳細については、「Azure Kubernetes Service 用の Istio ベースのサービス メッシュ アドオン」を参照してください。
ヒント
Azure で Microsoft Copilot を使用すると、Azure portal で Istio を AKS クラスターにデプロイできます。 詳細については、「 Azure で Microsoft Copilot を使用して AKS クラスターを効率的に操作する」を参照してください。
開始する前に
アドオンには、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
場合によっては、以前のインストールの Istio CRD がアンインストール時に自動的にクリーンアップされないことがあります。 既存の Istio CRD が削除されていることを確認します。
kubectl delete crd $(kubectl get crd -A | grep "istio.io" | awk '{print $1}')
また、ClusterRoles、MutatingWebhookConfigurations、ValidatingWebhookConfigurations など、Istio のセルフマネージド インストールから他のリソースをクリーンアップすることをお勧めします。
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 リファレンス」を参照してください。
注意
特定のノードにスケジュールされた istiod
ゲートウェイ ポッドとイングレス/エグレス ゲートウェイ ポッドが必要な場合は、 AKS システム ノード または azureservicemesh/istio.replica.preferred
ノード ラベルを使用できます。 ポッドにはノード アフィニティがあり、AKS システム ノードの100
の重み付け設定 (kubernetes.azure.com/mode: system
) と、50
ラベルが付けられたノードのazureservicemesh/istio.replica.preferred: true
の重み付け設定があります。
リビジョンの選択
リビジョンを指定せずにアドオンを有効にすると、既定でサポートされているリビジョンが自動的にインストールされます。
リビジョンを指定するには、次の手順を実行します。
az aks mesh get-revisions
コマンドを使用し、リージョンのさまざまな AKS クラスター バージョンにどのリビジョンが利用できるか確認します。- 使用可能なリビジョンに基づいて、メッシュ インストールに使用する enable コマンドに
--revision asm-X-Y
(例:--revision asm-1-24
) フラグを含めることができます。
クラスター作成中にメッシュをインストールする
クラスターの作成時に 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}
kubectl
を使用して、istiod
のポッド (Istio コントロール プレーン) が正常に実行されていることを確認します。
kubectl get pods -n aks-istio-system
istiod
ポッドの状態が Running
であることを確認します。 次に例を示します。
NAME READY STATUS RESTARTS AGE
istiod-asm-1-24-74f7f7c46c-xfdtl 1/1 Running 0 2m
istiod-asm-1-24-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.io/rev=asm-1-24
) が必要です。
既定の istio-injection=enabled
ラベルは機能せず、 サイドカーインジェクションによってアドオンの名前空間がスキップ されます。
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>
すべてのコンテナーの準備ができていることを確認し、istio-proxy
出力で kubectl describe
コンテナーを探すことで、サイドカー インジェクションが成功したことを確認します。次に例を示します。
kubectl describe pod -n namespace <pod name>
istio-proxy
コンテナーは、Envoy サイドカーです。 これでアプリケーションがデータ プレーンの一部になりました。
サンプル アプリケーションをデプロイする
kubectl apply
を使用して、サンプル アプリケーションをクラスターにデプロイします。
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.24/samples/bookinfo/platform/kube/bookinfo.yaml
注意
送信インターネット アクセスに 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 つはアプリケーション コンテナーです。
このサンプル アプリケーションをイングレスに対してテストするには、次の手順を確認します。
次のステップ
Azure Kubernetes Service