首页/云/Kubernetes 速查/egress 策略下的 DNS 放行
网络与服务55 条

egress 策略下的 DNS 放行

出向默认拒绝后必须显式放行到 kube-dns/CoreDNS 的 53 端口(UDP/TCP),否则域名解析失败会被误判成「网络全挂」。

Kubernetes 速查云更新于 2026-10-12

放行 DNS 示例

放行 DNS 示例
egress:
  - to:
      - namespaceSelector:
          matchLabels:
            kubernetes.io/metadata.name: kube-system
        podSelector:
          matchLabels:
            k8s-app: kube-dns
    ports:
      - protocol: UDP
        port: 53
      - protocol: TCP
        port: 53

验证解析

验证解析
kubectl exec -it web-x -n prod -- nslookup kubernetes.default
kubectl -n kube-system logs -l k8s-app=kube-dns --tail=30 | grep -i -E 'deny|refused'
kube-system 命名空间通常带有 kubernetes.io/metadata.name 标签,可直接用于 namespaceSelector。

易错点

  • 大响应经 UDP 截断会重试 TCP 53,只放行 UDP 时偶发解析失败
  • DNS 放行目标用 k8s-app 标签比写死 IP 稳,CoreDNS 重建后 IP 会变

数据来源与参考

  • Kubernetes 官方文档 · NetworkPolicy / DNS 说明(DNS for Services and Pods)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌