kubernetes 1.31 节点之间(1个master ,多个worker)使用了哪些端口及防火墙设置
网络使用了Calico,kubernetes 1.31 节点之间(1个master ,多个worker)使用了哪些端口?
好的,在 Kubernetes 1.31 使用 Calico 作为 CNI 网络插件的环境下,节点之间需要开放的端口会更加具体。Calico 默认使用 BGP 协议来交换路由信息,并根据配置可能使用 IP-in-IP 或 VXLAN 作为封装协议。
以下是针对您 1个 Master + 多个 Worker 架构的详细端口需求清单。
端口需求总结表
下表清晰地列出了所有必要的端口和协议。
协议 | 端口 | 源地址 -> 目标地址 | 使用者 | 说明 |
---|---|---|---|---|
TCP | 6443 | 所有节点 -> Master 节点 | Kubernetes API Server | 必需。所有节点都需要能访问 API Server。 |
TCP | 2379-2380 | Master 节点 -> Master 节点 | etcd | 必需。如果 etcd 以静态 Pod 方式部署在 Master 上。 |
TCP | 10250 | Master 节点 -> 所有节点 | kubelet | 必需。API Server 访问 kubelet 以获取日志、执行命令等。 |
TCP | 179 | 所有节点 -> 所有节点 | Calico (BGP) | 必需。Calico 的 calico-node Pod 使用此端口建立 BGP 连接,交换路由信息。这是 Calico 正常工作的最关键端口。 |
IPIP | 协议 4 | 所有节点 -> 所有节点 | Calico (IPIP 封装) | 条件必需。仅当 Calico 的 IPIPMode 设置为 Always 或 CrossSubnet 时需要。 |
UDP | 4789 | 所有节点 -> 所有节点 | Calico (VXLAN 封装) | 条件必需。仅当 Calico 的 VXLANMode 设置为 Always 或 CrossSubnet 时需要。 |
TCP & UDP | 5473 | 所有节点 -> Master 节点 | Calico (Typha) | 可选。仅在大规模集群中为减轻 API Server 压力而部署 Typha 时才需要。 |
TCP | 30000-32767 | 应用客户端 -> 所有节点 | NodePort Services | 可选。如果您计划使用 NodePort 类型的服务。 |
各节点防火墙规则配置建议
以下是在 Rocky Linux 9.5 上使用 firewalld
的配置示例。请根据您的 Calico 安装模式(IPIP 或 VXLAN)进行调整。
1. 在 Master 节点上执行的命令
bash
# 允许 Kubernetes API Server sudo firewall-cmd --permanent --add-port=6443/tcp # 允许 etcd peer 通信 (如果 etcd 在本机) sudo firewall-cmd --permanent --add-port=2379-2380/tcp # 允许 kubelet API sudo firewall-cmd --permanent --add-port=10250/tcp # 允许 Calico BGP sudo firewall-cmd --permanent --add-port=179/tcp# 如果使用 IPIP 模式,加载 ipip 内核模块并允许协议 sudo modprobe ipip sudo firewall-cmd --permanent --add-rich-rule='rule protocol value="ipip" accept'# 如果使用 VXLAN 模式,允许 VXLAN 端口 # sudo firewall-cmd --permanent --add-port=4789/udp# 如果启用了 Typha,允许 Typha 端口 # sudo firewall-cmd --permanent --add-port=5473/tcp# 重载防火墙使配置生效 sudo firewall-cmd --reload
2. 在所有 Worker 节点上执行的命令
bash
# 允许 kubelet API sudo firewall-cmd --permanent --add-port=10250/tcp # 允许 Calico BGP sudo firewall-cmd --permanent --add-port=179/tcp# 如果使用 IPIP 模式 sudo modprobe ipip sudo firewall-cmd --permanent --add-rich-rule='rule protocol value="ipip" accept'# 如果使用 VXLAN 模式 # sudo firewall-cmd --permanent --add-port=4789/udp# 重载防火墙使配置生效 sudo firewall-cmd --reload
如何确认您的 Calico 模式
您可以通过检查 Calico 的 IP 池配置来确定使用的是 IPIP 还是 VXLAN。
bash
kubectl get ippool -o yaml
在输出中,查找 spec.ipipMode
或 spec.vxlanMode
字段。
如果
ipipMode: Always
,则需要开放 IPIP 协议 (协议 4)。如果
vxlanMode: Always
,则需要开放 UDP 4789 端口。如果模式是
CrossSubnet
,则跨网段通信时需要上述封装,同子网则不需要。为简单起见,通常建议直接放行。
验证网络连通性
配置完防火墙后,请进行验证:
验证 Pod 网络:在不同的节点上创建 Pod,并互相 ping 对方的 Pod IP。
验证服务网络:创建一个简单的 Web 应用并通过 NodePort 或 ClusterIP 访问。
验证 Calico BGP 连接:登录到节点,使用
calicoctl
检查 BGP 状态。bash
# 如果安装了 calicoctl sudo calicoctl node status
输出应显示与其他每个节点的 BGP peer 状态为
Established
。
总结:对于您的环境,最关键的是确保所有节点之间的 TCP 179
(BGP)、TCP 10250
(kubelet) 和 TCP 6443
(API Server) 端口畅通,并根据您的 Calico 配置决定是否开放 IPIP 或 VXLAN 端口。