确定kubernetes 的网络 Calico 使用了哪些端口
有一个存在的kubernetes 1.31集群,使用了Calico网络,我如何获得在这个集群中,Calico使用的端口
好的,这是一个非常具体且重要的运维问题。在 Kubernetes 1.31 集群中使用 Calico CNI,要获得其使用的端口,需要根据您的 Calico 配置模式来确定。
Calico 主要使用两种通信模式,它们使用的端口不同:
-
BGP 模式:使用边界网关协议在节点间交换路由信息。这是性能最高的模式。
-
IP-in-IP 隧道模式:将数据包封装在 IP 层中,用于穿越不支持 BGP 的网络(例如,云提供商的网络)。
以下是获取您集群中 Calico 所用端口的详细方法。
方法一:最直接的方法 - 检查 Calico DaemonSet 配置
Calico 的 calico-node DaemonSet 定义了它需要打开的端口。这是最准确的来源。
-
查看 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 的运行模式决定了它使用哪些端口。您可以通过检查其配置文件来确定。
-
查看 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 节点,检查实际监听的端口。
-
查看 BGP 端口(如果启用):
Calico 的calico-node组件中的BIRD进程会监听 BGP 端口。bash
sudo netstat -tulnp | grep 179 # 或使用 ss 命令 sudo ss -tulnp | grep 179
如果输出显示
calico-node或bird进程正在监听 179 端口,则说明 BGP 正在使用。 -
查看 Typha 端口(如果部署用于扩展):
在大规模集群中,Calico 会部署typha组件来减少kube-apiserver的负载。它默认监听端口 5473。bash
kubectl get service -n kube-system | grep typha # 在节点上检查 sudo netstat -tulnp | grep 5473
-
查看 Calico CNI 调试端口:
calico-nodePod 通常会开放一个用于指标和健康检查的端口(默认 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 流量,则需要此端口。 | 可选(加密) |
给您的最终行动建议
-
确定模式:执行 方法二,运行
kubectl get ippool -o yaml,查看是ipipMode还是vxlanMode被设置。-
如果都是
Never,您主要需要 TCP 179。 -
如果是
Always或CrossSubnet,您需要 协议 4 (IPIP) 或 UDP 4789 (VXLAN),外加 TCP 179(因为 BGP 通常仍用于交换路由信息,即使数据隧道使用 IPIP/VXLAN)。
-
-
检查实际监听:在节点上执行 方法三,运行
sudo netstat -tulnp | grep -E '(179|5473|9099)'来确认哪些端口实际上正在被监听。 -
配置防火墙:根据您的发现,确保您的节点主机防火墙(如
firewalld、ufw)、云安全组或物理网络设备允许相应端口/协议在所有节点之间的通信。-
关键规则:通常必须允许 所有节点之间 的 TCP 179 端口通信。
-
隧道规则:同样允许所有节点之间协议号 4 (IPIP) 或 UDP 4789 (VXLAN) 的通信。
-
通过以上步骤,您就可以准确地确定并验证您的 Calico 安装所使用的端口了。
更多推荐


所有评论(0)