You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 17:55:21