Kubernetes 防火墙配置
概述
本文档提供了在 Ubuntu 系统上为 Kubernetes 集群配置 ufw 防火墙的完整指南,包括快速配置脚本和详细的分步说明。Kubernetes 版本、CNI 和 Service 网段不同,开放端口前应按实际拓扑收紧来源地址。
快速配置脚本
注意
以下内容是模板,不是可直接复制的生产策略。先把 CIDR 替换为真实网段,并保留 SSH/带外管理入口;远程执行
ufw enable可能立即断开当前连接。
#!/bin/bash
ADMIN_CIDR="192.0.2.0/24"
NODE_CIDR="192.0.2.1.0/24"
CONTROL_PLANE_CIDR="192.0.2.1.0/28"
# 先允许管理入口,再配置默认策略
ufw allow from "$ADMIN_CIDR" to any port 22 proto tcp
ufw default deny incoming
ufw default allow outgoing
# 控制平面和节点通信
ufw allow from "$NODE_CIDR" to any port 6443 proto tcp
ufw allow from "$CONTROL_PLANE_CIDR" to any port 6443 proto tcp
ufw allow from "$ADMIN_CIDR" to any port 6443 proto tcp
ufw allow from "$CONTROL_PLANE_CIDR" to any port 2379:2380 proto tcp
ufw allow from "$CONTROL_PLANE_CIDR" to any port 10250 proto tcp
# 仅在使用 Flannel VXLAN 时开放节点间 UDP 8472
ufw allow from "$NODE_CIDR" to any port 8472 proto udp
# NodePort 仅在确实使用时按客户端来源开放
# ufw allow from "$ADMIN_CIDR" to any port 30000:32767 proto tcp
# 确认规则后再启用
ufw show added
ufw --force enable
# 显示防火墙状态和规则
ufw status verbose安装 Kubernetes(以 1.29 为例)
前置条件
在配置防火墙之前,确保已正确安装 Kubernetes。
# 更新包列表
apt-get update
# 安装必要的工具
apt-get install -y apt-transport-https ca-certificates curl gnupg
install -m 0755 -d /etc/apt/keyrings
# 添加 Kubernetes 社区维护的 apt 仓库(旧的 apt.kubernetes.io 已下线)
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key |
gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /' |
tee /etc/apt/sources.list.d/kubernetes.list
# 更新包列表并安装 kubelet、kubeadm 和 kubectl
apt-get update
apt-get install -y kubelet kubeadm kubectl
# 锁定版本
apt-mark hold kubelet kubeadm kubectl
# 启动并启用 kubelet
systemctl enable kubelet && systemctl start kubelet详细配置步骤
UFW 与 Pod 转发
Kubernetes 依赖节点转发和 CNI 写入的 iptables/nftables 规则。仅开放端口并不能保证 Pod 通信;启用 UFW 前确认
/etc/default/ufw的DEFAULT_FORWARD_POLICY、CNI 文档要求和现有转发规则,先在测试节点验证kubectl exec、Service 和跨节点 Pod 通信,再推广到整个集群。
1. 安装和启用 ufw
apt-get install -y ufw
ufw enable2. 允许 Kubernetes 核心端口
Kubernetes 必需端口
以下端口是 Kubernetes 集群正常运行所必需的:
| 端口 | 协议 | 用途 |
|---|---|---|
| 6443 | TCP | API 服务器 |
| 2379-2380 | TCP | etcd 服务器 |
| 10257、10259 | TCP | controller-manager、scheduler HTTPS;kubeadm 默认仅本机绑定,通常不开放 |
| 10250 | TCP | kubelet |
| 53 | TCP/UDP | 仅在节点实际运行 DNS/NodeLocal DNS 监听时开放 |
| 8472 | UDP | 仅 Flannel VXLAN 节点间通信 |
NODE_CIDR="192.0.2.1.0/24"
CONTROL_PLANE_CIDR="192.0.2.1.0/28"
ufw allow from "$NODE_CIDR" to any port 6443 proto tcp
ufw allow from "$CONTROL_PLANE_CIDR" to any port 6443 proto tcp
ufw allow from "$ADMIN_CIDR" to any port 6443 proto tcp
ufw allow from "$CONTROL_PLANE_CIDR" to any port 2379:2380 proto tcp
ufw allow from "$CONTROL_PLANE_CIDR" to any port 10250 proto tcp
ufw allow from "$NODE_CIDR" to any port 8472 proto udp3. 允许 NodePort 端口范围
NodePort 配置
Kubernetes 的 NodePort 服务默认使用 30000-32767 范围的端口。
按客户端网段允许 NodePort:
ufw allow from 192.0.2.8/24 to any port 30000:32767 proto tcp如 Service 使用 UDP,另加对应 UDP 规则;没有 NodePort Service 时不要开放整个范围。
4. 允许本地和内部网络流量
内网通信
不要笼统允许全部 RFC1918 网段。根据 Node CIDR、Pod CIDR、Service 实现和 CNI 文档精确配置;Pod 转发通常还涉及
FORWARD链,而不只是主机INPUT。
NODE_CIDR="192.0.2.1.0/24"
ufw allow from "$NODE_CIDR"
# 是否需要允许 Pod CIDR 取决于 CNI 和实际数据路径5. 重载配置并验证
# 重载 ufw 使规则生效
ufw reload
# 查看防火墙状态和规则
ufw status verbose总结
配置完成
通过以上步骤,可以为 Ubuntu 上的 Kubernetes 节点建立防火墙基线:
- 只有授权的流量可以访问必要的端口
- 提高集群的安全性
- 减少潜在的攻击面
相关文档
返回: Kubernetes