如何在不禁用 firewalld (Kubernetes) 的情况下使用 Flannel

How can I use Flannel without disabing firewalld (Kubernetes)

我是 flannel 和 K8s 的新手。我在我的 1 主节点和 2 节点集群(从 KVM 创建)上玩弄它们。

我用法兰绒网络插件初始化了我的集群。然后我发现我无法到达内部。 原来可能是我的网络或者DNS进程出了问题

https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/ 之后,我将 8285 和 8472 添加到 firewalld

[root@k8smaster ~]# firewall-cmd --list-port
6443/tcp 80/tcp 8285/udp 8472/udp 8472/tcp 8285/tcp

我得到了

[root@k8smaster ~]# kubectl exec -ti dnsutils -- nslookup kubernetes.default
;; connection timed out; no servers could be reached

command terminated with exit code 1

但是,如果我停止 firewalld,一切都很好。

[root@k8smaster ~]# kubectl exec -ti dnsutils -- nslookup kubernetes.default
Server:     10.96.0.10
Address:    10.96.0.10#53

Name:   kubernetes.default.svc.cluster.local
Address: 10.96.0.1

所以我的问题是,我应该将任何端口添加到 firewalld 中吗? 让我知道是否有任何信息。我应该在这里补充。 谢谢。

@KoopaKiller 建议,我确实错过了为 k8s 本身配置端口。 我把我的脚本贴在下面供你参考。

# Master
firewall-cmd --permanent --add-port=6443/tcp # Kubernetes API server
firewall-cmd --permanent --add-port=2379-2380/tcp # etcd server client API
firewall-cmd --permanent --add-port=10250/tcp # Kubelet API
firewall-cmd --permanent --add-port=10251/tcp # kube-scheduler
firewall-cmd --permanent --add-port=10252/tcp # kube-controller-manager
firewall-cmd --permanent --add-port=8285/udp # Flannel
firewall-cmd --permanent --add-port=8472/udp # Flannel
firewall-cmd --add-masquerade --permanent
# only if you want NodePorts exposed on control plane IP as well
firewall-cmd --permanent --add-port=30000-32767/tcp
firewall-cmd --reload
systemctl restart firewalld


# Node
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=8285/udp # Flannel
firewall-cmd --permanent --add-port=8472/udp # Flannel
firewall-cmd --permanent --add-port=30000-32767/tcp
firewall-cmd --add-masquerade --permanent
firewall-cmd --reload
systemctl restart firewalld

您申请的规则仅适用于 Flannel 通信,您需要允许所有 Kubernetes 端口才能正常工作。

在简历中,您需要为这些端口应用规则:

Control-plane node(s)
Protocol        Direction       Port Range      Purpose Used By
TCP     Inbound 6443*   Kubernetes API server   All
TCP     Inbound 2379-2380       etcd server client API  kube-apiserver, etcd
TCP     Inbound 10250   Kubelet API     Self, Control plane
TCP     Inbound 10251   kube-scheduler  Self
TCP     Inbound 10252   kube-controller-manager Self

Worker node(s)
Protocol        Direction       Port Range      Purpose Used By
TCP     Inbound 10250   Kubelet API     Self, Control plane
TCP     Inbound 30000-32767     NodePort Services†      All
† Default port range for NodePort Services.
~                                          

Here 您可以看到控制平面和工作节点的所有必要端口。

然后在应用此规则后,您需要应用更多其他 2 条规则以允许 flannel 网络,如前所述 here

Make sure that your firewall rules allow UDP ports 8285 and 8472 traffic for all hosts participating in the overlay network. The Firewall section of Flannel’s troubleshooting guide explains about this in more detail.