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

Kubernetes网络策略问题:Service访问Pod的Egress配置异常排查

问题排查:AKS+Calico环境下Network Policy导致Service DNS解析失败及Pod通信异常

我在Azure Kubernetes Service(AKS)环境使用Calico网络策略,有两个ns命名空间的Pod:

  • 客户端Pod:sleeper
  • 服务端Pod:frontend,由frontend-svc Service代理(该Service将8080端口转发至Pod的80端口)

原本通过wget -qO- http://frontend-svc.ns:8080/api/Ping可正常通信,配置Network Policy后出现访问异常。

初始Egress策略配置

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: allow-to-frontend-egress
  namespace: ns
spec:
  podSelector:
    matchLabels:
      app: sleeper
  policyTypes:
  - Egress
  egress:
  - to:
    - podSelector:
        matchLabels:
          app: frontend

问题现象

配置后出现Service地址解析失败,提示wget: bad address 'frontend-svc.ns:8080',但直接通过Pod IP(wget -qO- 10.x.x.x:80/api/Ping)访问可正常响应。

错误的DNS访问允许策略

为解决DNS解析问题,我添加了以下Egress策略,允许ns命名空间所有Pod访问kube-system命名空间的所有Pod:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-egress-kube-system
  namespace: ns
spec:
  podSelector: {}
  egress:
  - to:
    - namespaceSelector:
        matchLabels:
          kubernetes.io/metadata.name: "kube-system"
      podSelector: {}
  policyTypes:
  - Egress

问题恶化

配置后不仅DNS解析问题未解决,连原本正常的Pod IP通信也失效了。

最终可用的严格DNS Egress策略

以下配置可以解决问题,仅允许ns命名空间所有Pod访问kube-system中的kube-dns服务的53端口(UDP/TCP):

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: allow-all-pods-dns-egress
  namespace: ns
spec:
  policyTypes:
  - Egress
  podSelector: {} 
  egress:
  - to:
    - namespaceSelector:
        matchLabels:
          # 该标签在K8s 1.19版本引入,若版本更低需手动为kube-dns Pod添加标签
          kubernetes.io/metadata.name: "kube-system"  
      podSelector:
        matchLabels:
          k8s-app: kube-dns
    ports:
    - port: 53
      protocol: UDP
    - port: 53
      protocol: TCP

内容的提问来源于stack exchange,提问作者Jurgy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 01:20:35