アドバンスト コンテナー ネットワークサービスのコンテナー ネットワーク セキュリティのための 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 クラスターのためにアドバンスト コンテナー ネットワークサービスのセキュリティ機能をインストールして有効にする方法を学習しました。
- Azure Kubernetes Service (AKS) 用のアドバンスト コンテナー ネットワークサービスの詳細については、Azure Kubernetes Service (AKS) 用のアドバンスト コンテナー ネットワークサービスとは何かに関するページを参照してください。
Azure Kubernetes Service