AWS EKS集群Pod内nameserver与预设Service网段不匹配问题求助
解决方案
根因说明
Pod内的/etc/resolv.conf是kubelet在创建Pod时自动注入的,其中nameserver的取值来自kubelet启动参数中的--cluster-dns配置。你遇到的问题是集群调整Service网段和kube-dns的ClusterIP后,节点上的kubelet配置没有同步更新,仍然使用了旧的172.20.0.10作为DNS地址。
具体调整步骤
步骤1:确认kubelet配置
登录任意一个EKS工作节点,执行命令查看kubelet的启动参数,确认当前cluster-dns的取值:
ps aux | grep kubelet
返回结果中可以看到--cluster-dns=172.20.0.10的配置,确认是旧地址。
步骤2:更新节点启动配置
EKS节点的kubelet配置统一在EC2启动模板/启动配置的用户数据中定义,统一修改即可避免逐个节点调整:
- 打开AWS EC2控制台,找到你的EKS节点组使用的启动模板/启动配置
- 找到**用户数据(User Data)**配置段,修改
KubeletConfiguration中的clusterDNS值为10.10.0.10,参考配置如下:
kind: KubeletConfiguration apiVersion: kubelet.config.k8s.io/v1beta1 clusterDNS: - 10.10.0.10 clusterDomain: cluster.local
- 保存为新的启动模板版本。
步骤3:滚动更新节点组
进入EKS控制台,找到对应集群的节点组,将节点组关联的启动模板切换为刚才保存的新版本,选择滚动更新模式替换所有旧节点。
步骤4:验证配置生效
新节点加入集群后,新建测试Pod验证配置:
kubectl run -it --rm test-dns --image=alpine -- cat /etc/resolv.conf
返回结果中nameserver为10.10.0.10即配置生效,已经运行的旧Pod需要重建后才会加载新的DNS配置。
临时生效方案(无需重启节点)
如果暂时不需要全量更新节点,可以逐个登录现有工作节点修改配置:
- 编辑kubelet配置文件,默认路径为
/etc/kubernetes/kubelet/kubelet-config.json,将clusterDNS字段的值改为10.10.0.10 - 重启kubelet服务生效:
systemctl daemon-reload systemctl restart kubelet
内容的提问来源于stack exchange,提问作者Unity
相关产品推荐
相关产品推荐

