共用方式為


在進階容器網路服務中設定容器網路安全性的 FQDN 篩選功能

本文說明如何在 AKS 叢集中設定具有容器網路安全性功能的進階容器網路服務。

必要條件

  • 具有有效訂用帳戶的 Azure 帳戶。 如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶

本文步驟所需的 Azure CLI 最低版本為 2.56.0。 執行 az --version 以尋找版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI

安裝 aks-preview Azure CLI 延伸模組

使用 az extension addaz 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 篩選等安全性功能。 若要深入瞭解,請造訪 容器網路安全性

注意

具有 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 叢集的進階容器網路服務來安裝和啟用安全性功能。