https://stackoverflow.com/questions/46667659/kubernetes-cannot-access-nodeport-from-other-machines

本来第一次配置集群的时候,是可以在局域网内访问的,之后关机重启,遇到DiskPressure这个Taint“污点(标记)”的时候,重新配置了一次集群(即kubeadm resetkubeadm init),然后以为是服务没跑起来,测试以后发现只能在本机访问了。

nmap扫了一遍端口,目标端口显示的不是closed,而是filtered,然后也隐隐猜测和防火墙有关,万万没想到,原因正是出在iptables上。而后了解到,firewalldiptables是两个不同的Linux防火墙工具,有着各自独立的规则。因而在配置Kubernetes时禁用了firewalld之后,iptables还是在工作的。而NodePort的访问,需要进行流量转发。

简单粗暴的解决方式(非生产环境):

iptables -A FORWARD -j ACCEPT

不过这个地方我有点没想明白:kube-proxy可以将Pod内的端口映射到主机端口的监听上,而在Linux中,默认的端口监听是监听在所有可用的interface网络接口上的,监听特定的网络接口是需要编程显式声明的,理论上不会需要进行不同网络接口间的流量转发。

标签: none

添加新评论