我有一个3节点裸机群集与KUBEADM一起安装(内置运行CentOS 7的intel NUC)。
主节点具有2个不同的网络接口,一个用于外部访问,第二个配置为集群本地网络的DHCP服务器。通过以下iptables规则启用两个netowrk之间的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/)的集群,除了(甚至kube-dns可以从每个节点中的每个POD到达)外,一切似乎都能正常工作。
仅仅为了测试我创建了一个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一切都很好,而如果我尝试在另一个节点curl请求超时卷曲它。
任何帮助将非常感激。
Kubernetes和Calico用iptables
做了令人费解的事情,所以我相信你在某个地方有冲突或封锁规则。我建议禁用所有规则,然后安装docker,然后使用kubeadm
安装你的k8s。