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
    

環境変数を設定する

export CLUSTER=<cluster-name>
export RESOURCE_GROUP=<resource-group-name>
export LOCATION=<location>

Istio アドオンをインストールする

このセクションでは、クラスターの作成時に Istio アドオンをインストールする手順、または Azure CLI を使用して既存のクラスターに対して有効にする手順について説明します。 Bicep を使用してアドオンをインストールする場合は、「Bicep を使用して Istio サービス メッシュ アドオンを使用して AKS クラスターをインストールする」を参照してください。 AKS クラスターの Bicep リソース定義の詳細については、「Bicep managedCluster リファレンス」を参照してください。

リビジョンの選択

リビジョンを指定せずにアドオンを有効にすると、既定でサポートされているリビジョンが自動的にインストールされます。

リビジョンを指定するには、次の手順を実行します。

  1. az aks mesh get-revisions コマンドを使用し、リージョンのさまざまな AKS クラスター バージョンにどのリビジョンが利用できるか確認します。
  2. 使用可能なリビジョンに基づいて、メッシュ インストールに使用する 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

既存のクラスターのメッシュをインストールする

次の例では、既存の 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

サイドカー インジェクションを有効にする

新しいポッドにサイドカーを自動インストールするには、現在インストールされているコントロール プレーン リビジョンに対応するリビジョン ラベルで名前空間に注釈を付ける必要があります。

インストールされているリビジョンがわからない場合、次を使用します。

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

クラスターに複数のデプロイとサービスが作成されていることを確認します。 次に例を示します。

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

次のステップ