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

启用Azure CNI的AKS集群中DNS未移除未就绪Pod问题咨询

AKS 未就绪Pod流量控制及CNI差异问题解答

核心机制说明

首先明确:AKS 控制未就绪Pod不接收外部请求的逻辑分为两层,并非仅配置Service时才生效:

  • Service转发层:只要Pod关联了Service,kube-proxy会自动同步EndpointSlice中的Pod就绪状态,过滤所有未就绪Pod的后端地址,所以不管用哪种CNI,走Service IP/域名访问时流量都不会打到未就绪Pod,和你观测到的现象一致。
  • Pod DNS解析层:你观测到的两类集群差异,本质是不同CNI下CoreDNS的默认配置差异,和AKS基础逻辑无关。

两类CNI解析表现差异的原因

  • 未启用Azure CNI的集群默认使用kubenet网络插件,CoreDNS的Kubernetes解析插件默认开启了就绪状态过滤,仅会为Ready状态的Pod生成<pod-name>.<service-name>.<namespace>.svc.cluster.local格式的解析记录,所以未就绪Pod的域名会解析失败。
  • 启用Azure CNI的集群中,Pod被分配了VNet层面的可路由IP,CoreDNS默认未开启Pod就绪状态过滤,所有已创建的Pod(无论是否就绪)都会生成对应的解析记录,所以你可以正常解析到未就绪Pod的IP,直接访问Pod时请求可以到达。

对齐两类集群表现的配置方法

有两种常用方案可以实现你要的效果:

  1. 修改CoreDNS配置,过滤未就绪Pod的解析记录
    编辑kube-system命名空间下的coredns ConfigMap,找到Corefile配置段中kubernetes插件的配置行,在末尾添加ignore not_ready参数:
    kubernetes cluster.local in-addr.arpa ip6.arpa {
        pods insecure
        fallthrough in-addr.arpa ip6.arpa
        ttl 30
        ignore not_ready # 新增这一行
    }
    
    保存配置后重启CoreDNS Pod,之后未就绪Pod的域名就会无法解析,和kubenet集群表现一致。
  2. 配置网络策略拒绝未就绪Pod的入站流量
    如果你不想修改DNS配置,可以为对应工作负载配置网络策略,仅允许kubelet的健康检查流量访问未就绪Pod,其他端口的入站流量全部拒绝,此时就算能解析到Pod IP,请求也会被直接拒绝。

注意:Kubernetes官方推荐的服务访问方式是通过Service转发,默认就会自动过滤未就绪Pod,无需额外修改全局配置,上述修改仅适用于必须直接访问Pod域名的特殊场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:12:02