我有一个安装了 KUBEADM 的 3 节点裸机集群(使用运行 CentOS 7 的英特尔 NUC 构建)。
主节点提供2个不同的网络接口,一个用于外部访问,第二个配置为集群本地网络的DHCP服务器。通过以下 iptables 规则启用两个网络之间的 IP 转发和伪装
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i {{lan_interface_name}} -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o {{wan_interface_name}} -j MASQUERADE
iptables -A FORWARD -i {{wan_interface_name}} -o {{lan_interface_name}} -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD -i {{lan_interface_name}} -o {{wan_interface_name}} -j ACCEPT
此外,我还为集群中的每个节点启用了 docker 接口和 lan 接口之间的转发
iptables -I INPUT -i docker0 -j ACCEPT
iptables -t nat -A POSTROUTING -o {{lan_interface_name}} -j MASQUERADE
iptables -I FORWARD -i {{lan_interface_name}} -o docker0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD -i docker0 -o {{lan_interface_name}} -j ACCEPT
为了确保没有 iptables 问题,我默认启用了所有流量
iptables -P OUTPUT ACCEPT
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
虽然这是 /etc/sysctl.conf 文件
net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-iptables=1
我按照 kubeadm 的说明使用 CALICO ( https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/ ) 启动了一个集群,并且除了每个 POD 都可以访问 kube-dns 之外,一切似乎都正常工作在每个节点中)用于公开的服务。
只是为了测试,我创建了一个 nginx 部署并通过 nodeport 公开它:
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 30m
nginx NodePort 10.96.227.49 <none> 80:31242/TCP 22m
如果我尝试在 POD 的同一节点内卷曲集群 IP,一切都很好,而如果我尝试在另一个节点卷曲请求超时时卷曲它。
任何帮助将非常感激。