次の方法で共有


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
    
  • 場合によっては、以前のインストールの 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) と、azureservicemesh/istio.replica.preferred: trueラベルが付けられたノードの50の重み付け設定があります。

リビジョンの選択

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

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

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

このサンプル アプリケーションをイングレスに対してテストするには、次の手順を確認します。

次のステップ