我的应用使用了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

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐