AKS网络策略失效:无法限制Pod仅允许特定IP地址访问
AKS网络策略不生效的原因及解决办法
核心问题:LoadBalancer流量的SNAT转换
你配置的网络策略针对的是Pod的直接入站流量,但通过LoadBalancer类型的服务访问时,AKS的Azure CNI会对流量做源地址转换(SNAT):外部客户端的IP会被替换成AKS节点的IP,导致Pod接收到的源IP不是你PC的真实IP,所以你的ipBlock规则根本匹配不到。
解决方法:保留客户端源IP
修改你的LoadBalancer服务,启用externalTrafficPolicy: Local,让负载均衡器直接将流量转发到Pod所在节点,同时保留客户端的真实IP。
修改服务配置
编辑你的LoadBalancer服务yaml,添加externalTrafficPolicy: Local字段:
apiVersion: v1 kind: Service metadata: name: [你的服务名称] spec: type: LoadBalancer externalTrafficPolicy: Local # 关键配置 selector: # 替换为你的Pod标签 ports: - port: [服务端口] targetPort: [Pod端口]
应用修改:
kubectl apply -f [服务yaml文件路径]
注意事项
- 启用该配置后,负载均衡器只会将流量转发到运行目标Pod的节点;如果你的Pod只在一个节点上运行,只有该节点会接收外部流量。
- 若后续扩容Pod到多个节点,负载均衡器会自动更新后端节点列表。
额外排查点
验证网络策略状态:
kubectl get networkpolicy allow-from-my-pc确认策略已存在且无异常。
验证Pod标签:
kubectl get pods --show-labels | grep [你的Pod名称]确认
access=restricted标签已正确绑定。确认集群网络策略配置:
az aks show --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME --query networkProfile.networkPolicy返回值应为
"azure",确保集群确实启用了Azure网络策略。
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

