出现原因:
问题描述:k8s部署服务之后,只能在Pod所在的节点通过node ip+ 对外暴露的端口请求;无法使用CLUSTER-IP+端口访问。也不能在其他Node节点通过Pod所在的节点通过node ip+ 对外暴露的端口请求;
主机名与IP对应情况:
主机名 | IP |
---|---|
192.168.199.201 | k8s-01 |
192.168.199.202 | k8s-02 |
192.168.199.203 | k8s-03 |
服务部署情况:
bash
kubectl get svc
#显示
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-dep1 NodePort 10.10.42.233 <none> 80:30692/TCP 24s
bash
kubectl get pods -o wide
#显示
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-dep1-9bcf54c77-l8wz7 1/1 Running 0 8m38s 10.122.165.234 k8s-03 <none> <none>
通过上述内容,我们不难发现。服务nginx-dep1部署在k8s-03节点,IP为192.168.199.203。
地址请求测试
服务器 | 请求地址 | 是否成功 |
---|---|---|
192.168.199.201、192.168.199.202、192.168.199.203 | 10.10.42.233 | 失败 |
192.168.199.201、192.168.199.202 | 192.168.199.203:30692 | 失败 |
192.168.199.203 | 192.168.199.203:30692 | 成功 |
报错信息:
shell
curl: (7) Failed connect to 192.168.199.203:30692; Connection timed out
排查过程:
- 排查是否关闭防火墙
检查已经关闭 - 查找Kubernetes相关资料发现,node节点有请求转发,我们需要查看是否开启请求转发
bash
iptables --list | grep 'Chain FORWARD'
#显示
Chain FORWARD (policy DROP)
出现Chain FORWARD (policy DROP)表示请求转发被关闭。需要开启。
解决方案:
shell
iptables -P FORWARD ACCEPT
#为了防止重启再次关闭,填写配置
echo net.ipv4.ip_forward=1 >>/etc/sysctl.conf
验证:
bash
iptables --list | grep 'Chain FORWARD'
#显示
Chain FORWARD (policy ACCEPT)