问题描述
在使用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
- 在kube-dns容器中,编辑/etc/resolv.conf文件:
vi /etc/resolv.conf
- 将文件中的nameserver和search行修改为正确的值,保存并退出编辑器。
- 重启kube-dns Pod:
kubectl delete pod kube-dns-xxxxx -n kube-system
- 等待Pod重新启动并验证问题是否解决。
以上是修复错误的/etc/resolv.conf文件的两种解决方案。如果问题仍然存在,请参考相关问题的讨论或查阅官方文档以获取更多帮助。
正文完