Kubernetes集群外无法访问NodePort
https://stackoverflow.com/questions/46667659/kubernetes-cannot-access-nodeport-from-other-machines
本来第一次配置集群的时候,是可以在局域网内访问的,之后关机重启,遇到DiskPressure
这个Taint
“污点(标记)”的时候,重新配置了一次集群(即kubeadm reset
和kubeadm init
),然后以为是服务没跑起来,测试以后发现只能在本机访问了。
nmap
扫了一遍端口,目标端口显示的不是closed
,而是filtered
,然后也隐隐猜测和防火墙有关,万万没想到,原因正是出在iptables
上。而后了解到,firewalld
和iptables
是两个不同的Linux防火墙工具,有着各自独立的规则。因而在配置Kubernetes时禁用了firewalld
之后,iptables
还是在工作的。而NodePort
的访问,需要进行流量转发。
简单粗暴的解决方式(非生产环境):
iptables -A FORWARD -j ACCEPT
不过这个地方我有点没想明白:kube-proxy
可以将Pod内的端口映射到主机端口的监听上,而在Linux中,默认的端口监听是监听在所有可用的interface
网络接口上的,监听特定的网络接口是需要编程显式声明的,理论上不会需要进行不同网络接口间的流量转发。