K8S容器无法访问外网
K8S DNS
·
我的应用使用了javamail.JavaMailSender,部署后出现下面的错误:
com.sun.mail.util.MailConnectException: Couldn't connect to host, port: smtp.163.com, 465; timeout -1"
怀疑是DNS解析问题,于是启动一个busybox容器验证:
$ kubectl run busybox --rm -ti --image=busybox /bin/sh
/ # nslookup -debug 163.com
;; connection timed out; no servers could be reached
/ #
确定是容器无法解析 DNS,解决思路如下:
1. 关闭防火墙就正常,说明是防火墙拦截了DNS请求
2. 怎么知道CoreDNS使用的端口号?全网都找不到答案,于是我打开防火墙的log,发现执行nslookup后有有三条端口号为8472的UDP被拦截(DNS通常使用UDP)
3. 防火墙放开8472/udp,问题解决
# Debian系使用UFW
sudo ufw allow 8472/udp
sudo ufw reload
# Redhat系使用的firewalld
sudo firewall-cmd --permanent --zone=public --add-port=8472/udp
sudo firewall-cmd --reload
4. 防火墙可能开需要开启转发
# Debian系使用UFW
sudo ufw default allow routed
sudo ufw reload
# Redhat系使用的firewalld
sudo firewall-cmd --permanent --zone=public --add-masquerade
sudo firewall-cmd --reload
更多推荐
已为社区贡献1条内容
所有评论(0)