你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在高级容器网络服务中为容器网络安全设置 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-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 群集。
具有高级容器网络服务标志 --enable-acns
的 az aks create
命令创建一个新的 AKS 群集,它具有所有高级容器网络服务功能。 这些功能包括:
注意
从 Kubernetes 版本 1.29 开始,具有 Cilium 数据平面的群集支持容器网络可观测性和容器网络安全。
# 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
在现有群集上启用高级容器网络服务
具有高级容器网络服务标志 --enable-acns
的 az aks update
命令使用所有高级容器网络服务功能(包括容器网络可观测性和容器网络安全功能)更新现有 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 代理强制实施的策略。 向允许的 FQDN 和另一个请求会被阻止的情况发出 DNS 请求。
创建名为 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 的实用程序的 shell 应该会打开,并显示以下输出:
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)
#
在此 shell 中,运行 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
验证策略
从第一个 shell 中,如策略所指定,创建对允许的 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 服务 (AKS) 的高级容器网络服务的详细信息,请参阅什么是 Azure Kubernetes 服务 (AKS) 的高级容器网络服务。