Kubernetes中的Pod无法访问外网-Ubuntu16.04 LTS

简介: Kubernetes中的Pod无法访问外网-Ubuntu16.04 LTS 安装完Kubernetes后,在Pod中使用wget无法访问外网URL地址,但是使用IP地址是可以访问,应该是 Pod内无法解析DNS导致的。

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"]

其它:

如果 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。

本文转自开源中国-Kubernetes中的Pod无法访问外网-Ubuntu16.04 LTS

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
22天前
|
前端开发 编解码 数据格式
浅谈响应式编程在企业级前端应用 UI 开发中的实践
浅谈响应式编程在企业级前端应用 UI 开发中的实践
20 0
浅谈响应式编程在企业级前端应用 UI 开发中的实践
|
1月前
|
Prometheus Kubernetes 监控
容器服务ACK常见问题之pod设置securityContext调整参数失败如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
2月前
|
Kubernetes Ubuntu 应用服务中间件
在Ubuntu22.04 LTS上搭建Kubernetes集群
在Ubuntu22.04.4上安装Kubernetes v1.28.7,步骤超详细
336 1
在Ubuntu22.04 LTS上搭建Kubernetes集群
|
3月前
|
Kubernetes 监控 调度
Kubernetes Pod调度:从基础到高级实战技巧
Kubernetes Pod调度:从基础到高级实战技巧
188 0
|
3月前
|
Kubernetes 监控 调度
|
13天前
|
存储 Kubernetes 调度
Kubernetes Pod生命周期
Kubernetes Pod生命周期
21 0
Kubernetes Pod生命周期
|
13天前
|
存储 Kubernetes 应用服务中间件
Kubernetes Pod
Kubernetes Pod
44 0
Kubernetes Pod
|
24天前
|
存储 Kubernetes 调度
K8s Pod亲和性、污点、容忍度、生命周期与健康探测详解(下)
本文全面探讨了Kubernetes集群中Pod的四种关键机制——Pod亲和性、污点(Taints)、容忍度(Tolerations)、生命周期以及健康探测,为读者提供了深入理解并有效应用这些特性的指南。
|
24天前
|
Kubernetes 网络协议 Perl
k8s Failed to create pod sandbox: open /run/systemd/resolve/resolv.conf: no such file or directory
k8s Failed to create pod sandbox: open /run/systemd/resolve/resolv.conf: no such file or directory
23 0
|
1月前
|
Kubernetes Nacos 微服务
nacos常见问题之v2.2.3 k8s 微服务注册nacos强制删除 pod不消失如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
24 1
nacos常见问题之v2.2.3 k8s 微服务注册nacos强制删除 pod不消失如何解决