如何在使用EKS eksctl和vpc-cni插件创建集群后修复kubernetes pods中错误的/etc/resolv.conf

40次阅读
没有评论

问题描述

在使用EKS eksctl和vpc-cni插件创建集群后,发现kubernetes pods中的/etc/resolv.conf文件内容错误。在从另一个开发集群中恢复所有内容后,DNS解析不起作用。当检查任何pod的/etc/resolv.conf文件内容时,发现内容如下:

nameserver 10.10.0.2
search ec2.internal
options timeout:2 attempts:5

当检查dns-service的endpoints时,发现如下内容:

NAME             TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
kube-dns         ClusterIP   172.20.0.10      <none>        53/UDP,53/TCP   21h

解决方案

请注意以下操作注意版本差异及修改前做好备份。

解决方案1

根据相关问题的讨论,可以通过不指定--dns-cluster-ip--b64-cluster-ca--apiserver-endpoint来解决DNS问题。以下是最终的引导命令:

/etc/eks/bootstrap.sh exchange-develop --kubelet-extra-args '--node-labels=eks.amazonaws.com/sourceLaunchTemplateVersion=1,alpha.eksctl.io/cluster-name=exchange-develop,alpha.eksctl.io/nodegroup-name=custom-ami-bootstrap-ssh,eks.amazonaws.com/nodegroup-image=ami-0082fe83ca6d7cf7d,eks.amazonaws.com/capacityType=ON_DEMAND,eks.amazonaws.com/nodegroup=custom-bootstrap,worker=default --max-pods=110' --use-max-pods false

解决方案2

如果解决方案1无法解决问题,可以尝试以下步骤:
1. 登录到EKS集群的控制节点。
2. 找到kube-dns的Pod名称,例如kube-dns-xxxxx。
3. 运行以下命令进入kube-dns的容器:

kubectl exec -it kube-dns-xxxxx -n kube-system -- sh
  1. 在kube-dns容器中,编辑/etc/resolv.conf文件:
vi /etc/resolv.conf
  1. 将文件中的nameserver和search行修改为正确的值,保存并退出编辑器。
  2. 重启kube-dns Pod:
kubectl delete pod kube-dns-xxxxx -n kube-system
  1. 等待Pod重新启动并验证问题是否解决。

以上是修复错误的/etc/resolv.conf文件的两种解决方案。如果问题仍然存在,请参考相关问题的讨论或查阅官方文档以获取更多帮助。

正文完