Kubernetes 集群开启防火墙
概述
在 Kubernetes 集群中启用防火墙是提高安全性的重要措施。本文档详细说明了 K8S 集群所需开放的端口,以及使用 ufw 和 iptables 配置防火墙的方法。
端口开放说明
重要提示
在启用防火墙前,必须确保所有 Kubernetes 组件所需的端口已正确开放,否则会导致集群通信失败。
控制平面节点 (Master Nodes)
| 端口 | 协议 | 用途 |
|---|---|---|
| 6443 | TCP | Kubernetes API Server |
| 2379-2380 | TCP | etcd 服务器客户端 API |
| 10250 | TCP | Kubelet API |
| 10257 | TCP | kube-controller-manager HTTPS(kubeadm 默认仅本机) |
| 10259 | TCP | kube-scheduler HTTPS(kubeadm 默认仅本机) |
10257 和 10259 在 kubeadm 默认配置下监听回环地址,仅供本机健康检查;不要因为它们出现在端口表中就对节点网卡放行。
# API Server
sudo iptables -A INPUT -p tcp --dport 6443 -j ACCEPT
# etcd
sudo iptables -A INPUT -p tcp --dport 2379 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 2380 -j ACCEPT
# Kubelet
sudo iptables -A INPUT -p tcp --dport 10250 -j ACCEPT
# kubeadm 默认将 10257/10259 绑定到 127.0.0.1,无需对网络开放工作节点 (Worker Nodes)
| 端口 | 协议 | 用途 |
|---|---|---|
| 10250 | TCP | Kubelet API |
| 30000-32767 | TCP | NodePort 服务端口范围 |
# Kubelet
sudo iptables -A INPUT -p tcp --dport 10250 -j ACCEPT
# NodePort Services
sudo iptables -A INPUT -p tcp --dport 30000:32767 -j ACCEPTNodePort 也可能使用 UDP;只有存在对应 UDP Service 时才按实际来源开放 UDP 范围。生产环境应限制来源网段,而不是对任意地址开放整个范围。
网络插件 (CNI)
说明
不同的 CNI 插件需要开放不同的端口,请根据实际使用的插件进行配置。
Calico
# BGP 端口
sudo iptables -A INPUT -p tcp --dport 179 -j ACCEPTFlannel
# VXLAN 端口
sudo iptables -A INPUT -p udp --dport 8472 -j ACCEPTWeave
# Weave Net 端口
sudo iptables -A INPUT -p tcp --dport 6783 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 6783 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 6784 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 6784 -j ACCEPTIngress 控制器
提示
只有 Ingress Controller 通过
hostNetwork、hostPort或节点上的负载均衡入口直接监听时,才需要在相应节点开放 80/443;使用其他 Service 暴露方式时按实际端口处理。
# HTTP
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# HTTPS
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPTUFW 配置示例
使用 ufw 在 Ubuntu 上配置防火墙:
# Kubernetes 核心端口
sudo ufw allow 6443/tcp
sudo ufw allow 2379:2380/tcp
sudo ufw allow 10250/tcp
sudo ufw allow 30000:32767/tcp
# 网络插件端口
sudo ufw allow 8472/udp # Flannel
sudo ufw allow 179/tcp # Calico
sudo ufw allow 6783:6784/tcp # Weave
sudo ufw allow 6783:6784/udp # Weave
# Ingress 端口
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 启用 UFW
sudo ufw enableiptables 完整配置示例
# 控制平面端口
sudo iptables -A INPUT -p tcp --dport 6443 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 2379 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 2380 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 10250 -j ACCEPT
# 工作节点端口
sudo iptables -A INPUT -p tcp --dport 10250 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 30000:32767 -j ACCEPT
# 网络插件端口 (Flannel 示例)
sudo iptables -A INPUT -p udp --dport 8472 -j ACCEPT
# Ingress 端口
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 保存 iptables 规则
sudo sh -c 'iptables-save > /etc/iptables/rules.v4'总结
最佳实践
- 在 Kubernetes 节点上启用防火墙是可行且推荐的安全措施
- 必须确保所有必要端口已开放,以保证 K8S 组件正常通信
- 具体开放的端口取决于你的 Kubernetes 配置和使用的插件
- 建议使用 ufw 简化防火墙管理
示例不是可直接复制的完整策略
上面的规则没有包含实际来源 CIDR、SSH 保活、默认策略、conntrack 和 CNI 转发链。应用前先导出现有规则并确认有控制台或带外管理入口;
iptables -A还可能与 nftables 后端及 CNI 自动规则冲突。
相关文档
返回: Kubernetes