微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python/Pod 无法访问互联网

如何解决Python/Pod 无法访问互联网

我正在使用 python3 和 microk8s 来开发一个简单的网络服务。

服务工作正常(在我的本地开发机器上使用 docker),但是一旦 pod 启动(所有内部服务正在运行)。

问题

Pod 无法 ping 主机名,只能 ping IP 地址。经过调查,除了外部资源外,该 pod 均按预期工作。执行nslookup的时候,好像没问题。但是 ping 不起作用。

b'\x00\x0e\x19#.8BLVq\x8e\x80`\x9a\xfe\x17.\xb7F\xd2\xea\xfd\xfe`\xfe\xdf\x9d\x86\xd1\xc0\xd9|\xbe\xa6\xa4\xfdt\xc2\x8a'

环境/设置

bash-5.1# ping www.google.com
ping: bad address 'www.google.com'
bash-5.1# nslookup www.google.com
Server:         10.152.183.10
Address:        10.152.183.10:53

Non-authoritative answer:
Name:   www.google.com
Address: 74.125.68.103
Name:   www.google.com
Address: 74.125.68.106
Name:   www.google.com
Address: 74.125.68.99
Name:   www.google.com
Address: 74.125.68.104
Name:   www.google.com
Address: 74.125.68.105
Name:   www.google.com
Address: 74.125.68.147

Non-authoritative answer:
Name:   www.google.com
Address: 2404:6800:4003:c02::93
Name:   www.google.com
Address: 2404:6800:4003:c02::63
Name:   www.google.com
Address: 2404:6800:4003:c02::67
Name:   www.google.com
Address: 2404:6800:4003:c02::69


bash-5.1# ping 74.125.68.103
PING 74.125.68.103 (74.125.68.103): 56 data bytes
64 bytes from 74.125.68.103: seq=0 ttl=55 time=1.448 ms
64 bytes from 74.125.68.103: seq=1 ttl=55 time=1.482 ms
^C
--- 74.125.68.103 ping statistics ---
2 packets transmitted,2 packets received,0% packet loss
round-trip min/avg/max = 1.448/1.465/1.482 ms

bash-5.1# python3
>>> import socket
>>> socket.gethostname()
'projects-dep-65d7b8685f-jzmxx'
>>> socket.gethostbyname('www.google.com')
Traceback (most recent call last):
  File "<stdin>",line 1,in <module>
socket.gaierror: [Errno -3] Try again

解决方法

您可以通过以下命令确认您的 pod 网络命名空间是否可以连接到外部和内部 vnet ips:-

kubectl --namespace=kube-system exec -it ${KUBE-DNS-POD-NAME} -c kubedns -- sh

#run ping/或 nslookup 使用元数据端点

如果您重新启动 pod 或容器,它可以解决主机名无法解析外部 IP 地址的问题,否则,您可以将 pod 移动到其他节点。另外,编辑 Kubernetes dns add on master(对每个 master 重复)如下:-

vi /etc/kubernetes/addons/kube-dns-deployment.yaml

并更改健康容器的参数如下:-

  • "--cmd=nslookup bing.com 127.0.0.1 >/dev/null"
  • "--url=/healthz-dnsmasq"
  • "--cmd=nslookup bing.com 127.0.0.1:10053 >/dev/null"
  • "--url=/healthz-kubedns"
  • "--port=8080"
  • "--安静"

您也可以尝试通过以下命令重启kube coredns:-

kubectl -n kube-system 发布

如果出现上述情况,这将强制 kubedns 容器重新启动。

谢谢,

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。