在進階容器網路服務中設定容器網路安全性的 FQDN 篩選功能
本文說明如何在 AKS 叢集中設定具有容器網路安全性功能的進階容器網路服務。
必要條件
- 具有有效訂用帳戶的 Azure 帳戶。 如果您沒有 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-preview 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 叢集。 這些功能包括:
注意
具有 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 叢集,其中包括容器網路可檢視性和容器網路安全性功能。
注意
只有具有 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
建立示範 Pod
建立執行 Bash 的 client
Pod:
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#
在不同的視窗中,執行下列命令以取得執行中 Pod 的節點。
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>
Pod 正在名為 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) 進階容器網路服務?。