1、k8s-node1上无法访问k8s-node2的应用
部署模式:
k8s-master 192.168.137.201
k8s-node1 192.168.137.202
k8s-node2 192.168.137.203
问题描述:
创建一个nginx资源对象,只能在nginx资源运行的node上通过CLUSTER-IP访问,在其他node节点上无法访问。
#创建一个nginx资源对象 kubectl create deployment nginx --image=nginx #将服务暴露出去(创建Service) kubectl expose deployment nginx --port=80 --type=NodePort # 查看pod信息 kubectl get pod,sv
在k8s-master服务器上访问(无法访问)
在k8s-node1服务器上访问(正常访问)
在k8s-node2服务器上访问(无法访问)
解决办法:
经过长时间的百度(各种方案都试过),最后看到这么一篇文档(https://www.haomeiwen.com/subject/gwfchctx.html),解决了这个问题,具体如下。
因为是用VirtualBox虚拟化出了三台Linux主机搭建的 k8s。在组网的过程中,采用了双网卡方案,网卡1使用NAT地址转换用来访问互联网,网卡2使用Host-only来实现虚拟机互相访问。flannel默认使用了网卡1的 ip 地址,而网卡1的NAT地址转换是无法访问其他虚拟机的,从而导致的问题的产生。
flannel使用的默认网卡1导致了这个问题的产生,所以我们需要使用--iface参数手动指定它使用网卡2来进行通信,这就需要修改flannel的配置文件,执行如下命令即可进行修改:
# 查看网络插件的pod名称 kubectl get pod -o wide -n kube-flannel # 根据网络插件的pod名称,查看网络插件的配置文件名称 kubectl get po -n kube-flannel kube-flannel-ds-5dm4d -o yaml
# 编辑网络插件的配置文件 kubectl edit daemonset kube-flannel-ds -n kube-flannel
网卡请根据实际修改(可用ifconfig命令查看网卡)。修改完成之后输入:wq保存退出。
# 查看网络插件的pod名称 kubectl get pod -n kube-flannel # 删除网络插件的pod kubectl delete pod -n kube-flannel kube-flannel-ds-cpsn4 kube-flannel-ds-qbhv6 kube-flannel-ds-snj2x
验证问题已解决,k8s-master已经能通过CLUSTER-IP访问访问nginx
标签:总结,kubectl,k8s,部署,网卡,pod,K8s,kube,flannel From: https://www.cnblogs.com/xiaoxietongxue/p/17012851.html