有一个存在的kubernetes 1.31集群,使用了Calico网络,我如何获得在这个集群中,Calico使用的端口

好的,这是一个非常具体且重要的运维问题。在 Kubernetes 1.31 集群中使用 Calico CNI,要获得其使用的端口,需要根据您的 Calico 配置模式来确定。

Calico 主要使用两种通信模式,它们使用的端口不同:

  1. BGP 模式:使用边界网关协议在节点间交换路由信息。这是性能最高的模式。

  2. IP-in-IP 隧道模式:将数据包封装在 IP 层中,用于穿越不支持 BGP 的网络(例如,云提供商的网络)。

以下是获取您集群中 Calico 所用端口的详细方法。

方法一:最直接的方法 - 检查 Calico DaemonSet 配置

Calico 的 calico-node DaemonSet 定义了它需要打开的端口。这是最准确的来源。

  1. 查看 Calico DaemonSet

    bash

    kubectl get daemonset calico-node -n kube-system -o yaml | grep -i "containerPort"

    或者更详细地查看:

    bash

    kubectl describe daemonset calico-node -n kube-system | grep -A 10 -B 10 "Port"

    输出会显示容器规范中明确定义的端口。

方法二:检查 Calico 的配置(确定运行模式)

Calico 的运行模式决定了它使用哪些端口。您可以通过检查其配置文件来确定。

  1. 查看 Calico 的 IP 池配置

    bash

    kubectl get ippool default-ipv4-ippool -o yaml

    关注 spec.ipipMode 和 spec.vxlanMode 字段。

    • 如果 ipipMode: Always 或 ipipMode: CrossSubnet,则使用 IP-in-IP(协议号 4)

    • 如果 vxlanMode: Always 或 vxlanMode: CrossSubnet,则使用 VXLAN(UDP 端口 4789)

    • 如果两者都是 Never 或未启用,则很可能使用 纯 BGP 模式

方法三:在节点上使用网络命令查看

登录到任何一个 Kubernetes 工作节点或 Master 节点,检查实际监听的端口。

  1. 查看 BGP 端口(如果启用)
    Calico 的 calico-node 组件中的 BIRD 进程会监听 BGP 端口。

    bash

    sudo netstat -tulnp | grep 179
    # 或使用 ss 命令
    sudo ss -tulnp | grep 179

    如果输出显示 calico-node 或 bird 进程正在监听 179 端口,则说明 BGP 正在使用。

  2. 查看 Typha 端口(如果部署用于扩展)
    在大规模集群中,Calico 会部署 typha 组件来减少 kube-apiserver 的负载。它默认监听端口 5473。

    bash

    kubectl get service -n kube-system | grep typha
    # 在节点上检查
    sudo netstat -tulnp | grep 5473
  3. 查看 Calico CNI 调试端口
    calico-node Pod 通常会开放一个用于指标和健康检查的端口(默认 9099)。

    bash

    sudo netstat -tulnp | grep 9099

总结:Calico 可能使用的端口列表

根据您的配置,您需要关注的端口如下表所示:

协议 端口号 方向 说明 常见模式
BGP TCP 179 节点之间双向 用于节点间交换路由信息。这是 BGP 模式的核心端口。 BGP
IP-in-IP Protocol 4 节点之间双向 这不是一个端口号,而是一个 IP 协议号。在防火墙规则中,您需要允许 协议号 4 的流量,而不是某个端口。 IPIP
VXLAN UDP 4789 节点之间双向 用于 VXLAN 隧道封装。如果使用 VXLAN 模式,则需要开放此端口。 VXLAN
Typha TCP 5473 Node -> Typha Pod 用于节点上的 calico-node 代理连接到 typha 服务(如果启用)。 可选(大规模集群)
Metrics TCP 9099 本地/集群内 calico-node Pod 的指标导出端口,通常用于监控。 默认启用
WireGuard UDP 51820 节点之间双向 如果启用了 WireGuard 加密所有 Pod 流量,则需要此端口。 可选(加密)

给您的最终行动建议

  1. 确定模式:执行 方法二,运行 kubectl get ippool -o yaml,查看是 ipipMode 还是 vxlanMode 被设置。

    • 如果都是 Never,您主要需要 TCP 179

    • 如果是 Always 或 CrossSubnet,您需要 协议 4 (IPIP) 或 UDP 4789 (VXLAN)外加 TCP 179(因为 BGP 通常仍用于交换路由信息,即使数据隧道使用 IPIP/VXLAN)。

  2. 检查实际监听:在节点上执行 方法三,运行 sudo netstat -tulnp | grep -E '(179|5473|9099)' 来确认哪些端口实际上正在被监听。

  3. 配置防火墙:根据您的发现,确保您的节点主机防火墙(如 firewalldufw)、云安全组或物理网络设备允许相应端口/协议在所有节点之间的通信。

    • 关键规则:通常必须允许 所有节点之间 的 TCP 179 端口通信。

    • 隧道规则:同样允许所有节点之间协议号 4 (IPIP) 或 UDP 4789 (VXLAN) 的通信。

通过以上步骤,您就可以准确地确定并验证您的 Calico 安装所使用的端口了。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐