次の方法で共有


アドバンスト コンテナー ネットワークサービスのコンテナー ネットワーク セキュリティのための FQDN フィルタリング機能を設定する

この記事では、AKS クラスターでコンテナー ネットワーク セキュリティ機能を使用してアドバンスト コンテナー ネットワークサービスを設定する方法について説明します。

前提条件

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

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

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

    • 初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。

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

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

aksプレビューの Azure CLI 拡張機能をインストールする

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

# 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

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

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

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

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

  • コンテナー ネットワークのセキュリティ: FQDN フィルタリングなどのセキュリティ機能を提供します。 詳細については、コンテナー ネットワークのセキュリティに関するページを参照してください。

Note

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

# Set an environment variable for the AKS cluster name. Make sure to replace the placeholder with your own value.
export CLUSTER_NAME="<aks-cluster-name>"

# Create an AKS cluster
az aks create \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --generate-ssh-keys \
    --location eastus \
    --max-pods 250 \
    --network-plugin azure \
    --network-plugin-mode overlay \
    --network-dataplane cilium \
    --node-count 2 \
    --pod-cidr 192.168.0.0/16 \
    --kubernetes-version 1.29 \
    --enable-acns

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

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

Note

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

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

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

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

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

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

このセクションでは、Cilium エージェントを通じてポリシーが適用されていることを観察する方法について説明します。 DNS 要求を、許可されている FQDN に対してと、それがブロックされているケースに対して実行します。

demo-policy.yaml という名前のファイルを作成し、次の YAML マニフェストを貼り付けます。

apiVersion: "cilium.io/v2"
kind: CiliumNetworkPolicy
metadata:
  name: "allow-bing-fqdn"
spec:
  endpointSelector:
    matchLabels:
      app: demo-container
  egress:
    - toEndpoints:
      - matchLabels:
          "k8s:io.kubernetes.pod.namespace": kube-system
          "k8s:k8s-app": kube-dns
      toPorts:
        - ports:
           - port: "53"
             protocol: ANY
          rules:
            dns:
              - matchPattern: "*.bing.com"
    - toFQDNs:
      - matchPattern: "*.bing.com"

以下のように YAML マニフェストの名前を指定し、[kubectl apply][kubectl-apply] を使用してそれを適用します。

kubectl apply –f demo-policy.yaml -n demo

デモ ポッドを作成する

以下のように Bash を実行する client ポッドを作成します。

kubectl run -it client -n demo --image=k8s.gcr.io/e2e-test-images/agnhost:2.43 --labels="app=demo-container" --command -- bash

FQDN をテストするためのユーティリティが以下の出力と共に開くはずです。

If you don't see a command prompt, try pressing enter.
bash-5.0#

別のウィンドウで、次のコマンドを実行して、実行中のポッドのノードを取得します。

kubectl get po -n demo --sort-by="{spec.nodeName}" -o wide

出力は次の例のようになるはずです。

NAME     READY   STATUS    RESTARTS   AGE     IP              NODE                                NOMINATED NODE   READINESS GATES
client   1/1     Running   0          5m50s   192.168.0.139   aks-nodepool1-22058664-vmss000001   <none>           <none>

このポッドは、aks-nodepool1-22058664-vmss000001 という名前のノードで実行されています。 以下のように、そのノードで実行されている Cilium エージェント インスタンスを取得します。

k get po -n kube-system -o wide --field-selector spec.nodeName="aks-nodepool1-22058664-vmss000001" | grep "cilium"

期待通りに cilium-s4x24 が出力されるはずです。

cilium-s4x24                          1/1     Running   0          47m   10.224.0.4      aks-nodepool1-22058664-vmss000001   <none>           <none>

Cilium エージェントを検査する

cilium CLI を使用して、ブロックされているトラフィックを監視します。

kubectl exec -it -n kube-system cilium-s4x24 -- sh
Defaulted container "cilium-agent" out of: cilium-agent, install-cni-binaries (init), mount-cgroup (init), apply-sysctl-overwrites (init), mount-bpf-fs (init), clean-cilium-state (init), block-wireserver (init)
#

このシェル内で、以下のように cilium monitor -t drop を実行します。

Listening for events on 2 CPUs with 64x4096 of shared memory
Press Ctrl-C to quit
time="2024-10-08T17:48:27Z" level=info msg="Initializing dissection cache..." subsys=monitor

ポリシーを検証する

最初のシェルから、ポリシーで指定されている許可された FQDN である *.bing.com への要求を作成します。 これは成功し、エージェントによって許可されるはずです。

bash-5.0# ./agnhost connect www.bing.com:80

次に、ブロックされるはずの FQDN への別の要求を作成します。

bash-5.0# ./agnhost connect www.example.com:80

Cilium エージェントが要求をブロックし、次の出力が表示されます。

xx drop (Policy denied) flow 0xfddd76f6 to endpoint 0, ifindex 29, file bpf_lxc.c:1274, , identity 48447->world: 192.168.0.149:45830 -> 93.184.215.14:80 tcp SYN

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

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

  az group delete --name $RESOURCE_GROUP

次のステップ

この使い方記事では、AKS クラスターのためにアドバンスト コンテナー ネットワークサービスのセキュリティ機能をインストールして有効にする方法を学習しました。