Azure Kubernetes集群如何限制Pod通信:仅允许app-a访问app-b?
解决方案:用Azure网络策略实现Pod间流量控制
首先纠正你现有配置里的一个小错误:ubuntu-app-a-deployment的容器名称写错成了ubuntu-app-b,建议修改为ubuntu-app-a避免混淆:
# 修正后的ubuntu-app-a Deployment容器部分 containers: - name: ubuntu-app-a # 此处原配置为ubuntu-app-b,需修正 image: ubuntu command: ["/bin/sh"] args: ["-c", "sleep infinity"]
针对你的需求(仅允许app-a ping app-b,禁止反向通信),不需要修改子网NSG(正如微软文档提示,手动修改子网NSG可能破坏集群内部通信),直接通过Kubernetes NetworkPolicy(由Azure网络策略插件实现)控制Pod级别的流量即可,具体配置如下:
1. 允许app-a访问app-b(含ICMP)
保留并修正你现有的NetworkPolicy,明确允许来自app-a的所有流量(包括ping使用的ICMP协议):
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-app-a-to-app-b spec: podSelector: matchLabels: app: ubuntu-app-b policyTypes: - Ingress ingress: - from: - podSelector: matchLabels: app: ubuntu-app-a ports: - protocol: TCP port: 80 - protocol: UDP port: 80 - protocol: ICMP # 明确允许ICMP协议,支持ping操作
2. 禁止app-b访问app-a
添加一个针对app-a的NetworkPolicy,拒绝来自app-b的所有入站流量:
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: deny-app-b-to-app-a spec: podSelector: matchLabels: app: ubuntu-app-a policyTypes: - Ingress ingress: # 仅允许非app-b来源的流量,等同于拒绝app-b的访问 - from: - podSelector: matchExpressions: - key: app operator: NotIn values: - ubuntu-app-b
3. 验证配置
- 进入app-a Pod执行
ping <app-b-pod-ip>,应能正常通信 - 进入app-b Pod执行
ping <app-a-pod-ip>,应无法通信(超时或被拒绝)
关键说明
- Azure网络策略插件支持过滤TCP、UDP和ICMP流量,可直接通过NetworkPolicy控制ping这类ICMP流量
- 禁止修改AKS集群子网的NSG:AKS会自动维护子网NSG的规则,保障节点与控制平面、节点间的必要通信,手动修改可能导致集群不可用
- NetworkPolicy是Pod级别的流量控制,仅影响匹配标签的Pod,不会干扰集群其他组件的通信
内容的提问来源于stack exchange,提问作者Nayden Van
相关产品推荐
相关产品推荐

