次の方法で共有


Advanced Container Networking Services を使用してレイヤー 7 (L7) ポリシーを設定する (プレビュー)

この記事では、AKS クラスターで Advanced Container Networking Services を使用して L7 ポリシーを設定する方法について説明します。 [レイヤー 7 ポリシーの概要] ページに一覧表示されている制限事項と考慮事項を確認した後にのみ続行します。

[前提条件]

  • アクティブなサブスクリプションを持つ Azure アカウント。 アカウントをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
  • Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の概要」を参照してください。

  • CLI 参照コマンドをローカルで実行する場合は、Azure CLI を インストール します。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。

    • ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、「 Azure CLI を使用した Azure への認証」を参照してください。

    • メッセージが表示されたら、最初に使用するときに Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、「Azure CLI で拡張機能を使用および管理する」を参照してください。

    • az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。

この記事の手順に必要な Azure CLI の最小バージョンは 2.71.0 です。 バージョンを確認するには、az --version を実行します。 インストールまたはアップグレードが必要な場合は、Azure CLI のインストールを参照してください。

aks-preview Azure CLI 拡張機能をインストールする

az extension add または az extension update コマンドを使用して、Azure CLI プレビュー拡張機能をインストールまたは更新します。

aks-preview Azure CLI 拡張機能の最小バージョンは次のとおりです。 14.0.0b6

# Install the aks-preview extension
az extension add --name aks-preview
# Update the extension to make sure you have the latest version installed
az extension update --name aks-preview

AdvancedNetworkingL7PolicyPreview フィーチャーフラグを登録する

AdvancedNetworkingL7PolicyPreview コマンドを使用して、az feature register 機能フラグを登録します。

az feature register --namespace "Microsoft.ContainerService" --name "AdvancedNetworkingL7PolicyPreview"

az feature show コマンドを使用して、登録が成功したことを確認します。 登録が完了するまでに数分かかります。

az feature show --namespace "Microsoft.ContainerService" --name "AdvancedNetworkingL7PolicyPreview"

機能にRegisteredが表示されたら、Microsoft.ContainerService コマンドを使用して、az provider register リソース プロバイダーの登録を更新します。

アドバンスト コンテナー ネットワークサービスを有効にする

これ以降の作業では、アドバンスト コンテナー ネットワークサービスが有効になっている AKS クラスターが必要となります。

az aks create コマンドにアドバンスト コンテナー ネットワークサービスのフラグ --enable-acns を指定すると、アドバンスト コンテナー ネットワークサービスのすべての機能を備えた新しい AKS クラスターが作成されます。 これらの機能には以下が含まれます。

  • コンテナー ネットワークの監視: トラフィックに関する分析情報を提供します。 詳細については、コンテナー ネットワークの監視に関するページを参照してください。

  • Container Network Security: 完全修飾ドメイン名 (FQDN) フィルター処理などのセキュリティ機能を提供します。 詳細については、コンテナー ネットワークのセキュリティに関するページを参照してください。

Cilium データ プレーンを備えたクラスターでは、Kubernetes バージョン 1.29 から、コンテナー ネットワークの監視とコンテナー ネットワークのセキュリティがサポートされます。

このデモでは、L7 ポリシーを有効にするには、 --acns-advanced-networkpolicies パラメーターを "L7" に設定する必要があります。 このパラメーターを "L7" に設定すると、FQDN フィルター処理も有効になります。 FQDN フィルタリングのみを有効にする場合は、パラメーターを "FQDN" に設定します。 両方の機能を無効にするには、「 コンテナー ネットワーク セキュリティの無効化」に記載されている手順に従います。


export CLUSTER_NAME="<aks-cluster-name>"

# Create an AKS cluster
az aks create \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --generate-ssh-keys \
    --network-plugin azure \
    --network-dataplane cilium \
    --enable-acns \
    --acns-advanced-networkpolicies L7

アドバンスト コンテナー ネットワークサービスを既存のクラスターに対して有効にする

az aks update コマンドにアドバンスト コンテナー ネットワークサービスのフラグ --enable-acns を指定すると、コンテナー ネットワークの監視コンテナー ネットワークのセキュリティの機能を含むすべてのアドバンスト コンテナー ネットワークサービス機能で既存の AKS クラスターが更新されます。

アドバンスト コンテナー ネットワークサービスのコンテナー ネットワークのセキュリティ機能をサポートしているのは、Cilium データ プレーンを備えたクラスターだけです。

このデモでは、L7 ポリシーを有効にするには、 --acns-advanced-networkpolicies パラメーターを "L7" に設定する必要があります。 このパラメーターを "L7" に設定すると、FQDN フィルター処理も有効になります。 FQDN フィルタリングのみを有効にする場合は、パラメーターを "FQDN" に設定します。 両方の機能を無効にするには、「 コンテナー ネットワーク セキュリティの無効化」に記載されている手順に従います。

az aks update \
    --resource-group $RESOURCE_GROUP \
    --name $CLUSTER_NAME \
    --enable-acns \
    --acns-advanced-networkpolicies L7

クラスターの資格情報を取得する

az aks get-credentials コマンドを使用してクラスターの資格情報を取得します。

az aks get-credentials --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP

AKS クラスターで http-server アプリケーションを設定する

次の YAML を AKS クラスターに適用して、 http-server アプリケーションを設定します。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: http-server
  labels:
    app: http-server
spec:
  replicas: 1
  selector:
    matchLabels:
      app: http-server
  template:
    metadata:
      labels:
        app: http-server
    spec:
      containers:
      - name: http-server
        image: nginx:latest
        ports:
        - containerPort: 8080
        volumeMounts:
        - name: config-volume
          mountPath: /etc/nginx/conf.d
      volumes:
      - name: config-volume
        configMap:
          name: nginx-config

---
apiVersion: v1
kind: Service
metadata:
  name: http-server
spec:
  selector:
    app: http-server
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-config
data:
  default.conf: |
    server {
        listen 8080;

        ___location / {
            return 200 "Hello from the server root!\n";
        }

        ___location /products {
            return 200 "Listing products...\n";
        }
    }

AKS クラスターで http-client アプリケーションを設定する

次の YAML を AKS クラスターに適用して、 http-client アプリケーションを設定します。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: http-client
  labels:
    app: http-client
spec:
  replicas: 1
  selector:
    matchLabels:
      app: http-client
  template:
    metadata:
      labels:
        app: http-client
    spec:
      containers:
      - name: http-client
        image: curlimages/curl:latest
        command: ["sleep", "infinity"]

ポリシーを使用して接続をテストする

次に、次のレイヤー 7 ポリシーを適用して、GET アプリケーションからhttp-client/products エンドポイントへのhttp-server要求のみを許可します。

apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
  name: allow-get-products
spec:
  description: "Allow only GET requests to /products from http-client to http-server"
  endpointSelector:
    matchLabels:
      app: http-server
  ingress:
  - fromEndpoints:
    - matchLabels:
        app: http-client
    toPorts:
    - ports:
      - port: "8080"
        protocol: TCP
      rules:
        http:
        - method: "GET"
          path: "/products"

ポリシーを検証する

ポリシーの適用を確認するには、 http-client ポッドから次のコマンドを実行します。

kubectl exec -it <your-http-client-pod-name> -n default -- curl -v http://http-server:80/products

上記のコマンドを実行すると、 Listing products... のような出力が期待されます

kubectl exec -it <your-http-client-pod-name> -n default -- curl -v -XPOST http://http-server:80/products -d "test=data"

上記のコマンドを実行すると、 Access Denied のような出力が期待されます

L7 メトリックの監視

Advanced Container Network Service のコンテナー ネットワーク監視機能が有効になっている場合は、Grafana でトラフィックを視覚化できます。

これらの L7 メトリックの分析を簡略化するために、構成済みの Azure Managed Grafana ダッシュボードが用意されています。 "> などのファイル名を含む、Azure Managed Prometheus フォルダーダッシュボードの下にあります

次のようなメトリックが表示されます。

L7 トラフィックの Grafana ダッシュボードを示すスクリーンショット。

リソースをクリーンアップする

このアプリケーションの使用を計画していない場合は、az group delete コマンドを使用して、この記事で作成したその他のリソースを削除します。

  az group delete --name $RESOURCE_GROUP

次のステップ

このハウツー記事では、AKS クラスターに対して Advanced Container Networking Services で L7 ポリシーを有効にして適用する方法について説明しました。