Kubernetes中的Pod无法访问外网-Ubuntu16.04 LTS
Kubernetes中的Pod无法访问外网-Ubuntu16.04 LTS
安装完Kubernetes后,在Pod中使用wget无法访问外网URL地址,但是使用IP地址是可以 访问,应该是
Pod内无法解析DNS导致的。
1、解决方法
尝试了将DNS换为CoreDNS,问题仍然存在。经过多次测试,发现下面的方法是可行的:
编辑主机的/etc/resolv.conf文件:
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN #nameserver 127.0.1.1 nameserver 192.168.199.1 nameserver 8.8.8.8 nameserver 9.9.9.9 search lan
如果/etc/resolv.conf为链接,则需要修改/etc/resolvconf/resolv.conf.d/base或head文件,然后运行resolvconf -u进行更新/etc/resolv.conf里的内容。
2、原因分析
Ubuntu16.04 LTS安装的resolvconf有一些问题,/etc/resolv.conf并非链接(有的安装同一个版本是链接,很奇怪的),resolvconf -u等方法都会执行失败。原则上,是链接的到/etc/resolvconf/resolv.conf.d里面去改,不是链接的,直接修改/etc/resolv.conf文件。
可能Kubernetes启动Pod时,要把/etc/resolv.conf里的dns信息带到pod中,而resolv.conf解析不到外面的地址。联想到之前kube-dns经常出错,估计也是这个原因。配置完后,kube-dns就很少出错了。
3、其它
下面是从网上看到的方法,做过尝试的一些方法。
经过测试,加入外部DNS后可以访问外部网址,/etc/resolv.conf里的nameserver的IP地址无法ping通,肯定也无法做域名解析了。因此,主要原因在于service的clusterip可以传递外部请求到pod,但是pod却无法访问service的ip,在多个技术网站搜索,基本上都出现此问题。
解决方法包括:
- 修改iptables的配置,在sysctl.conf。查看iptable配置,iptable -L -v。
- 使用Service Mesh,不知道是否有助于该问题。
- 使用weavenet的网络驱动,有人说可以。有人说flannel可以,calico不行,但我用的flannel也是不行,可能跟操作系统也有关系,我的是ubuntu 16.04。
- sudo gedit sysctl.conf,插入:
###################################### # For K8s pod access service # by openthings,2018.06.30. #====================================== net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-arptables = 1 #######################################
按照这些方法搞过,还是不行。 ping 10.96.0.10不通。
变通的方法:
- 设一个代理,使用IP地址去访问。如https_proxy=192.168.199.99:9999 wget example.org,经测试,可行。也证明了网络是通的,主要是DNS服务地址访问不到。
- 尝试通过修改/etc/resolvconf/resolv.conf.d/base,然后运行resolvconf不成功。
- 在POD里添加新的DNS服务器,如在/etc/resolv.conf加上 nameserver=8.8.8.8,没效果。进到pod里,检查/etc/resolv.conf,并没有将主机的nameserver配置参数带进来。
但是,这两个方法虽然可以访问外部地址了,但仍然不能访问Kubernetes的Service产生的ClusterIP。不过,集群内部访问其它服务(包括POD自己的服务),可以通过服务名进行。
尝试设置Kubernetes的Kube-dns的外部dns,将下面内容保存为extdns.yaml。
apiVersion: v1 kind: ConfigMap metadata: name: kube-dns namespace: kube-system labels: addonmanager.kubernetes.io/mode: EnsureExists data: upstreamNameservers: / ["8.8.8.8", "9.9.9.9"]
- 然后运行kubectl create -f extdns.yaml,部署该设置到kubernetes集群。不过,该方法貌似没啥用。
- 更多参考:https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/
其它:
- docker inspect查看DNS设置。
- 以下内容来自于:https://juejin.im/entry/5aa9cc1af265da2384404c06
如果 Node 上安装的 Docker 版本大于 1.12,那么 Docker 会把默认的 iptables FORWARD 策略改为 DROP。这会引发 Pod 网络访问的问题。解决方法则在每个 Node 上面运行 iptables -P FORWARD ACCEPT,比如
如果使用了 flannel/weave 网络插件,更新为最新版本也可以解决这个问题。
DNS 无法解析也有可能是 kube-dns 服务异常导致的,可以通过下面的命令来检查 kube-dns 是否处于正常运行状态
如果 kube-dns 处于 CrashLoopBackOff 状态,那么需要查看 kube-dns Pod 的日志,根据日志来修复 DNS 服务。
如果 kube-dns Pod 处于正常 Running 状态,则需要进一步检查是否正确配置了 kube-dns 服务:
如果 kube-dns service 不存在,或者 endpoints 列表为空,则说明 kube-dns service 配置错误,可以重新部署 kube-dns service。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Rook-Ceph 分布式存储系统快速部署
Rook-Ceph 分布式存储系统快速 部署 This guide will walk you through the basic setup of a Ceph cluster and enable you to consume block, object, and file storage from other pods running in your cluster. 官方文档,https://rook.io/docs/rook/v0.8/ceph-quickstart.html Rook 0.8 安装及Dashboard的问题和解决 版本要求 Rook支持的Kubernetes 要求版本高于 v1.7。 预先检查 确保 Kubernetes 集群可以用于 Rook, 跟着这个检查 follow these instructions. 如果使用 dataDirHostPath 来持久化 rook 到 kubernetes 的宿主机,确保 host 至少有 5GB 以上空间可用,而且是指定的目录下。 开始 如果幸运的话,Rook cluster 可以通过下面的kubectl com...
- 下一篇
Ubuntu16.04上通过kubeadm安装指定版本Kubernetes1.9.0
环境约束:kubeadm支持的Ubuntu 16.04+, CentOS 7 or HypriotOS v1.0.1+三种操作 系统。 环境约束:Kubernetes1.9.0最大支持docker版本为17.03.X。 一、采用kubeadm 1. 安装docker 可以直接通过apt-get udpate && apt-get install -y docker.io docker version 得出版本为:Client/Server 1.13.1 这里也可以指定docker版本下载,因为目前docker分为docker ce和docker ee两个版本,我们只能安装免费的docker ce。需要先安装相关工具: apt-get update apt- get install -y \ apt-transport-https \ ca-certificates \ curl \ software-properties-common 添加秘钥 curl -fsSL https: //download.docker.com/linux/ubuntu/gpg | apt-...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Hadoop3单机部署,实现最简伪集群
- CentOS8编译安装MySQL8.0.19
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Mario游戏-低调大师作品
- CentOS6,CentOS7官方镜像安装Oracle11G