K8S容器无法访问外网

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值