この記事では、Azure Kubernetes Service (AKS) クラスター用の Istio ベースのサービス メッシュ アドオンをインストールする方法について説明します。
Istio とサービス メッシュ アドオンの詳細については、「Azure Kubernetes Service 用の Istio ベースのサービス メッシュ アドオン」を参照してください。
Tip
Azure Copilot を使用すると、Azure portal で Istio を AKS クラスターにデプロイできます。 詳細については、「 Azure Copilot を使用して AKS クラスターを効率的に操作する」を参照してください。
開始する前に
アドオンには、Azure CLI バージョン 2.57.0 以降がインストールされている必要があります。
az --versionを実行してバージョンを確認できます。 インストールまたはアップグレードする必要には、「Azure CLI のインストール」をご覧ください。リージョンで使用できる Istio アドオン リビジョンと、AKS Standard および LTS クラスター バージョンとの互換性に関する情報を確認するには、コマンド
az aks mesh get-revisionsを使用します。az aks mesh get-revisions --location <location> -o tableIstio アドオンと AKS の互換性の詳細については、 互換性サポート ポリシーを参照してください。
場合によっては、以前のインストールの Istio CRD がアンインストール時に自動的にクリーンアップされないことがあります。 既存の Istio CRD が削除されていることを確認します。
kubectl delete crd $(kubectl get crd -A | grep "istio.io" | awk '{print $1}')また、ClusterRoles、MutatingWebhookConfigurations、ValidatingWebhookConfigurations など、Istio のセルフマネージド インストールから他のリソースをクリーンアップすることをお勧めします。
istioctlCLI コマンドを使用する場合は、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 リファレンス」を参照してください。
Note
特定のノードにスケジュールされた 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 アドオンを有効にします。
Important
クラスターに 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 が表示されていることを確認します。
az aks get-credentialsを使用して、AKS クラスターの資格情報を取得します。
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
Important
コントロール プレーンのリビジョンに一致する明示的なバージョン管理 (例: 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
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 つはアプリケーション コンテナーです。
このサンプル アプリケーションをイングレスに対してテストするには、 次の手順を確認してください。