在离线环境中部署 Kubernetes (K8S) 集群时,需要确保各节点(Master 和 Worker)的防火墙(如 firewalld
)开放必要的端口,以确保组件间的正常通信。以下是需要开放的端口分类说明:
一、Master 节点需开放的端口
端口范围 | 协议 | 用途 |
---|---|---|
6443 | TCP | Kubernetes API Server(所有节点和外部访问的核心端口) |
2379-2380 | TCP | etcd 客户端和服务端通信(若使用外部 etcd 需额外配置) |
10250 | TCP | Kubelet API(Master 与 Worker 间的指标、日志、执行命令通信) |
10259 | TCP | kube-scheduler 的 metrics 和健康检查(≥1.23 版本) |
10257 | TCP | kube-controller-manager 的 metrics 和健康检查(≥1.23 版本) |
8472 | UDP | Flannel CNI 的 VXLAN overlay 网络(根据 CNI 插件调整,如 Calico 不同) |
30000-32767 | TCP | NodePort 服务的外部访问端口范围(可自定义) |
二、Worker 节点需开放的端口
端口范围 | 协议 | 用途 |
---|---|---|
10250 | TCP | Kubelet API(Master 访问 Worker 的指标、日志等) |
30000-32767 | TCP | NodePort 服务的外部访问端口 |
8472 | UDP | Flannel CNI 的 VXLAN 通信(其他 CNI 如 Calico 可能用 IPIP 或 TCP) |
9796 | TCP | 部分监控工具(如 Prometheus)的指标采集端口(非必需) |
三、所有节点需开放的端口
端口 | 协议 | 用途 |
---|---|---|
22 | TCP | SSH 管理访问(建议限制来源 IP) |
6783-6784 | TCP | Weave CNI 的通信端口(若使用 Weave) |
53 | TCP/UDP | CoreDNS 或 kube-dns 的 DNS 解析 |
四、防火墙配置示例(firewalld)
1. Master 节点命令
sudo firewall-cmd --permanent --add-port=6443/tcp
sudo firewall-cmd --permanent --add-port=2379-2380/tcp
sudo firewall-cmd --permanent --add-port=10250/tcp
sudo firewall-cmd --permanent --add-port=10257/tcp
sudo firewall-cmd --permanent --add-port=10259/tcp
sudo firewall-cmd --permanent --add-port=8472/udp
sudo firewall-cmd --permanent --add-port=30000-32767/tcp
sudo firewall-cmd --reload
2. Worker 节点命令
sudo firewall-cmd --permanent --add-port=10250/tcp
sudo firewall-cmd --permanent --add-port=30000-32767/tcp
sudo firewall-cmd --permanent --add-port=8472/udp
sudo firewall-cmd --reload
五、关键注意事项
-
CNI 插件差异:
- Flannel:需开放 UDP 8472(VXLAN)。
- Calico:需开放 TCP 179(BGP)、IPIP 协议(默认为 协议号 4)。
- Weave:需开放 TCP 6783-6784 和 UDP 6783-6784。
-
离线环境特殊要求:
- 确保所有节点的防火墙规则在部署前已配置,避免因网络不通导致安装失败。
- 如果使用私有镜像仓库,需开放其端口(如 HTTP 8080 或 HTTPS 443)。
-
安全建议:
- 使用
--zone=trusted
将 Pod 和 Service 网段加入信任区域(替换为实际 CIDR):sudo firewall-cmd --permanent --zone=trusted --add-source=10.244.0.0/16 # Flannel 默认网段 sudo firewall-cmd --permanent --zone=trusted --add-source=10.96.0.0/12 # Service 网段
- 使用
-
验证端口:
sudo firewall-cmd --list-all # 查看已开放端口
通过以上配置,可确保离线 K8S 集群各组件间的通信正常。根据实际使用的 CNI 插件和 Kubernetes 版本调整端口。