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

Law*_*ing 4 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
Run Code Online (Sandbox Code Playgroud)

我得到了

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

command terminated with exit code 1
Run Code Online (Sandbox Code Playgroud)

但是,如果我停止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
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,我应该将任何端口添加到 firewalld 中吗?如果有任何信息,请告诉我。我应该在这里补充。谢谢你。

Law*_*ing 8

由@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
Run Code Online (Sandbox Code Playgroud)


Mr.*_*ler 3

您应用的规则仅适用于 Flannel 通信,您需要允许所有 Kubernetes 端口才能使其工作。

\n\n

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

\n\n
Control-plane node(s)\nProtocol        Direction       Port Range      Purpose Used By\nTCP     Inbound 6443*   Kubernetes API server   All\nTCP     Inbound 2379-2380       etcd server client API  kube-apiserver, etcd\nTCP     Inbound 10250   Kubelet API     Self, Control plane\nTCP     Inbound 10251   kube-scheduler  Self\nTCP     Inbound 10252   kube-controller-manager Self\n\nWorker node(s)\nProtocol        Direction       Port Range      Purpose Used By\nTCP     Inbound 10250   Kubelet API     Self, Control plane\nTCP     Inbound 30000-32767     NodePort Services\xe2\x80\xa0      All\n\xe2\x80\xa0 Default port range for NodePort Services.\n~                                          \n
Run Code Online (Sandbox Code Playgroud)\n\n

在这里您可以看到控制平面和工作节点的所有必需端口。

\n\n

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

\n\n
\n

确保您的防火墙规则允许参与覆盖网络的所有主机使用 UDP 端口 8285 和 8472 流量。Flannel\xe2\x80\x99s 故障排除指南的防火墙部分对此进行了更详细的解释。

\n
\n