部署k8s环境flannel显示无法访问api server问题

问题现象

  • 部署完k8s后,node节点出现重启flannel就会出现如下报错 ,导致此node无法访问集群网络
报错截图

原因说明

问:根据上图报错可以看出上因为无法解析slb.xxxx.com的master节点域名导致,那问题就来了,容器为hostnetwork为什么无法解析域名(域名已经写在hosts里面)

答:因为flannel镜像用的alpine镜像构建,alpine镜像默认没有/etc/nssswitch.conf文件,默认会通过/etc/resolv.conf里面的dns解析域名,不会通过hosts解析

参考链接:

解决方法

方法1

  • 修改flannel的daemonset里面的dnsPolicy为ClusterFirst,然后删除有问题的flannel的pod
  • ClusterFirst:任何与配置的群集域后缀不匹配的DNS查询(例如“www.kubernetes.io”)都会转发到从该节点解析
kubectl edit daemonset -n kube-system kube-flannel-ds

[图片上传失败...(image-8edeb4-1564889784098)]

方法2

  • 重新定义flannel镜像,添加echo "hosts: files dns" > /etc/nsswitch.conf (设置hosts的dns的优先级) ,然后使用新镜像部署
mkdir flannel cat >>Dockerfile<< EOF 
FROM jmgao1983/flannel:v0.10.0-amd64 RUN echo "hosts: files dns" > /etc/nsswitch.conf EOF 

docker build -t jmgao1983/flannel:v0.10.1-amd64 ./

推荐方法2

未解之谜

  • 问:为什么一开始部署的时候flannel正常
  • 猜测:flannel比coredns提前部署,所以在启动flannel的时候,coredns的service上还没有创建,当flannel启动网络库访问dns地址因地址不通所以直接返回无法解析,然后网络库解析hosts通过hosts解析成功,最后启动成功
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容