Azure Kubernetes Service (AKS) で Azure CNI オーバーレイ ネットワークを構成する

この記事では、Azure Kubernetes Service (AKS) クラスターでの Azure CNI オーバーレイのセットアップ プロセス、デュアルスタック ネットワーク構成、およびワークロードデプロイの例について説明します。 Azure CNI オーバーレイ ネットワークの概要については、Azure Kubernetes Service (AKS) での Azure CNI オーバーレイ ネットワークの概要に関するページを参照してください。

重要

2025 年 11 月 30 日から、Azure Kubernetes Service (AKS) は、Azure Linux 2.0 のセキュリティ更新プログラムをサポートまたは提供しなくなりました。 Azure Linux 2.0 ノード イメージは、 202512.06.0 リリースでフリーズします。 2026 年 3 月 31 日以降、ノード イメージは削除され、ノード プールをスケーリングできなくなります。 ノード プールをサポートされている Kubernetes バージョンにアップグレードするか、osSku AzureLinux3 に移行して、サポートされている Azure Linux バージョンに移行します。 詳細については、 廃止に関する GitHub の問題Azure 更新プログラムの提供終了に関するお知らせを参照してください。 お知らせや更新情報を常に把握するには、 AKS のリリース ノートに従ってください。

前提条件

デュアルスタック ネットワークの場合は、お使いのリージョンで使用できる AKS でサポートされている Kubernetes バージョン を使用します。

Azure CNI オーバーレイ AKS クラスターの主要なパラメーター

次の表では、AKS クラスターで Azure CNI オーバーレイ ネットワークを構成するための主要なパラメーターについて説明します。

パラメーター Description
--network-plugin Azure Container Networking Interface (CNI) ネットワークを使用するように azure に設定します。
--network-plugin-mode Azure CNI オーバーレイ ネットワークを有効にするには、 overlay に設定します。 この設定は、 --network-plugin=azure場合にのみ適用されます。
--pod-cidr クラスターのカスタム ポッド クラスレス Inter-Domain ルーティング (CIDR) ブロックを指定します。 既定値は 10.244.0.0/16です。

ネットワーク プラグインの既定の動作は、 --network-pluginを明示的に設定するかどうかによって異なります。

  • --network-pluginを指定しない場合、AKS は既定で Azure CNI オーバーレイに設定されます。
  • --network-plugin=azureを指定し、--network-plugin-modeを省略した場合、AKS は下位互換性のために仮想ネットワーク (ノード サブネット) モードを意図的に使用します。

Azure CNI オーバーレイ AKS クラスターを作成する

az aks create--network-plugin=azure--network-plugin-mode=overlay コマンドを使用して、Azure CNI オーバーレイ AKS クラスターを作成します。 --pod-cidrの値を指定しない場合、AKS は既定値の 10.244.0.0/16 を割り当てます。

az aks create \
  --name $CLUSTER_NAME \
  --resource-group $RESOURCE_GROUP \
  --location $REGION \
  --network-plugin azure \
  --network-plugin-mode overlay \
  --pod-cidr 192.168.0.0/16 \
  --generate-ssh-keys

新しいノード プールを専用サブネットに追加する

同じ仮想ネットワーク内の別のサブネットにノード プールを追加して、仮想ネットワークまたはピアリングされた仮想ネットワーク リソースへのネットワーク トラフィックの仮想マシン (VM) ノード IP アドレスを制御します。

az aks nodepool add コマンドを使用してクラスターに新しいノード プールを追加し、--vnet-subnet-id パラメーターでサブネット リソース ID を指定します。 例えば次が挙げられます。

az aks nodepool add \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NODE_POOL_NAME \
  --node-count 1 \
  --mode system \
  --vnet-subnet-id $SUBNET_RESOURCE_ID

デュアルスタック ネットワークを使用した Azure CNI オーバーレイ AKS クラスターについて

Azure 仮想ネットワークを使用して、Azure CNI オーバーレイ AKS クラスターをデュアルスタック モードでデプロイできます。 この構成では、ノードで、Azure 仮想ネットワーク サブネットから IPv4 と IPv6 の両方のアドレスを受け取ります。 ポッドは、異なるアドレス空間からノードの Azure 仮想ネットワーク サブネットに IPv4 および IPv6 アドレスを受信します。 その後、ポッドで Azure 仮想ネットワークのリソースに到達できるように、ネットワーク アドレス変換 (NAT) が構成されます。 トラフィックの送信元 IP アドレスは、同じファミリの VM ノードのプライマリ IP アドレス (IPv4 から IPv4、IPv6 から IPv6 ) への NAT です。

Note

Cilium を利用した Azure CNI を使用して、デュアルスタック ネットワーク クラスターをデプロイすることもできます。 詳細については、「 Cilium を使用した Azure CNI を使用したデュアルスタック ネットワーク」を参照してください。

デュアルスタック ネットワークの制限事項

次の機能は、デュアルスタック ネットワークではサポートされていません。

デュアルスタック ネットワークの主要なパラメーター

次の表では、Azure CNI オーバーレイ AKS クラスターでデュアルスタック ネットワークを構成するための主要なパラメーターについて説明します。

パラメーター Description
--ip-families クラスターで有効にする IP ファミリのコンマ区切りの一覧を取得します。 ipv4ipv4,ipv6 のみがサポートされています。
--pod-cidrs ポッド IP を割り当てるためのクラスレス Inter-Domain Routing (CIDR) 表記のIP範囲を示す、コンマで区切られた一覧を使います。 このリスト内の範囲の数と順序は、--ip-families に指定されている値と一致する必要があります。 値を指定しない場合、パラメーターは既定値の 10.244.0.0/16,fd12:3456:789a::/64 を使用します。
--service-cidrs サービス IP を割り当てる CIDR 表記 IP 範囲のコンマ区切りの一覧を取得します。 このリスト内の範囲の数と順序は、--ip-families に指定されている値と一致する必要があります。 値を指定しない場合、パラメーターは既定値の 10.0.0.0/16,fd12:3456:789a:1::/108 を使用します。 --service-cidrsに割り当てられた IPv6 サブネットは、/108以下にすることができます。

CNI オーバーレイ AKS クラスター Azureデュアル スタックを作成する (Linux)

  1. az group create コマンドを使用して、クラスターの Azure リソース グループを作成します。

    az group create --location $REGION --name $RESOURCE_GROUP
    
  2. az aks create パラメーターを --ip-families に設定した ipv4,ipv6 コマンドを使用して、デュアルスタック AKS クラスターを作成します。

    az aks create \
      --location $REGION \
      --resource-group $RESOURCE_GROUP \
      --name $CLUSTER_NAME \
      --network-plugin azure \
      --network-plugin-mode overlay \
      --ip-families ipv4,ipv6 \
      --generate-ssh-keys
    

CNI オーバーレイ AKS クラスター Azureデュアル スタックを作成する (Windows)

  1. az aks create コマンドを使用して、Azure CNI オーバーレイを使用してクラスターを作成します。

    az aks create \
      --name $CLUSTER_NAME \
      --resource-group $RESOURCE_GROUP \
      --location $REGION \
      --network-plugin azure \
      --network-plugin-mode overlay \
      --ip-families ipv4,ipv6 \
      --generate-ssh-keys
    
  2. az aks nodepool add コマンドを使用して、Windows ノード プールをクラスターに追加します。

    az aks nodepool add \
      --resource-group $RESOURCE_GROUP \
      --cluster-name $CLUSTER_NAME \
      --os-type Windows \
      --name $WINDOWS_NODE_POOL_NAME \
      --node-count 2
    

サンプル ワークロードを Azure CNI オーバーレイ AKS クラスターにデプロイする

仮想マシン ノードに IPv4/IPv6 アドレスを持つデュアルスタック AKS CNI オーバーレイ クラスターをデプロイします。 この例では、NGINX Web サーバーをデプロイし、IPv4 と IPv6 の両方のアドレスを持つ LoadBalancer サービスを使用して公開します。

ワークロードを公開する前に、クラスターで NGINX デプロイが実行されていることを確認します。 まだない場合は、デプロイを作成し、次のコマンドを使用して準備が整うのを待ちます。

kubectl create deployment nginx --image=nginx
kubectl rollout status deployment/nginx

Note

AKS クラスターのイングレスには、アプリケーション ルーティング アドオンを使用することをお勧めします。 ただし、デモンストレーションのために、この例では、アプリケーション ルーティング アドオンなしで NGINX Web サーバーをデプロイします。 アドオンの詳細については、「 アプリケーション ルーティング アドオンを使用したマネージド NGINX イングレス」を参照してください。

LoadBalancer サービスを使用してワークロードを公開する

kubectl コマンドまたは YAML マニフェストを使用して、NGINX デプロイを公開します。

このセクションでは、クラスターで nginx という名前の NGINX デプロイが実行されていることを前提としています。 デプロイが存在し、準備ができているかどうかを確認するには、 kubectl get deployment nginx 実行し、 READY 列に必要なすべてのレプリカが準備完了として表示されていることを確認します。

重要

現在、AKS の IPv6 サービスに関連する 2 つの制限があります

  • Azure Load Balancer により、リンクローカル アドレスから IPv6 宛先に正常性プローブが送信されます。 Azure Linux ノード プールでは、このトラフィックをポッドにルーティングできないため、externalTrafficPolicy: Clusterでデプロイされた IPv6 サービスにフローするトラフィックは失敗します。
  • externalTrafficPolicy: Localを使用して IPv6 サービスをデプロイする必要があります。これにより、kube-proxyがノード上のプローブに応答します。
  1. kubectl expose deployment nginx コマンドを使用して NGINX デプロイを公開します。 最初のコマンドは、IPv4 LoadBalancer サービスを作成します。 2 番目のコマンドは、IPv6 LoadBalancer サービスを作成し、 --overrides JSON を使用して ipFamiliesIPv6 に設定し、必要な externalTrafficPolicyLocalに設定します。

    kubectl expose deployment nginx --name=nginx-ipv4 --port=80 --type=LoadBalancer
    kubectl expose deployment nginx --name=nginx-ipv6 --port=80 --type=LoadBalancer --overrides='{"spec":{"externalTrafficPolicy":"Local","ipFamilies":["IPv6"]}}'
    

    出力には、公開されているサービスが表示されます。 例えば次が挙げられます。

    service/nginx-ipv4 exposed
    service/nginx-ipv6 exposed
    
  2. デプロイが公開され、 LoadBalancer サービスが完全にプロビジョニングされたら、 kubectl get services コマンドを使用してサービスの IP アドレスを取得します。

    kubectl get services
    

    出力には、割り当てられた IP アドレスを持つサービスが表示されます。 例えば次が挙げられます。

    NAME         TYPE           CLUSTER-IP               EXTERNAL-IP         PORT(S)        AGE
    nginx-ipv4   LoadBalancer   10.0.88.78               20.46.24.24         80:30652/TCP   97s
    nginx-ipv6   LoadBalancer   fd12:3456:789a:1::981a   2603:1030:8:5::2d   80:32002/TCP   63s
    
  3. kubectl get services コマンドを使用してサービス IP を取得し、環境変数に設定します。

    このコマンドでは、JSONPath 式 {.status.loadBalancer.ingress[0].ip} を使用して、サービスのロード バランサーのイングレス フィールドの最初のエントリから外部 IP アドレスを抽出し、 SERVICE_IP 変数に格納します。

    SERVICE_IP=$(kubectl get services nginx-ipv6 -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
    
  4. IPv6 対応ホストからの curl 要求を使用して機能を確認します。 (Azure Cloud Shell は IPv6 対応ではありません)。

    curl -s "http://[${SERVICE_IP}]" | head -n5
    

    出力には、NGINX ウェルカム ページの HTML が表示されます。 例えば次が挙げられます。

    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    <style>
    

AKS での Azure CNI オーバーレイ ネットワークの詳細については、次の記事を参照してください。