网络使用了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,则跨网段通信时需要上述封装,同子网则不需要。为简单起见,通常建议直接放行。

验证网络连通性

配置完防火墙后,请进行验证:

  1. 验证 Pod 网络:在不同的节点上创建 Pod,并互相 ping 对方的 Pod IP。

  2. 验证服务网络:创建一个简单的 Web 应用并通过 NodePort 或 ClusterIP 访问。

  3. 验证 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 端口。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐