Ubuntu 上 Kubernetes 安全设置要点
一 主机与网络基线
- 禁用 Swap:执行
sudo swapoff -a 并注释 /etc/fstab 中的 swap 行,避免 kubelet 异常与稳定性风险。
- 内核网络参数:在 /etc/sysctl.d/kubernetes.conf 中启用桥接流量进入 iptables,并开启转发:
net.bridge.bridge-nf-call-ip6tables=1、net.bridge.bridge-nf-call-iptables=1、net.ipv4.ip_forward=1;执行 sysctl -p 生效。
- 时间同步:安装并启用 NTP/chrony,保证节点时间一致,避免证书校验与调度异常。
- 防火墙与端口:使用 UFW 实施最小暴露面,仅放通必要端口,例如:
- 22/TCP SSH(限定管理网段)
- 6443/TCP API Server(仅内网/跳板机)
- 10250/TCP Kubelet API(节点间)
- 2379–2380/TCP etcd(主节点间)
- 53/TCP/UDP DNS
- 如不使用 NodePort(30000–32767),建议关闭或严格限制来源。
- 容器运行时:优先使用 containerd(或 Docker),并配置镜像仓库凭据与拉取策略,减少供应链风险。
二 集群通信与认证
- 全组件 TLS:确保 API Server、etcd、kubelet、kube-proxy、controller-manager、scheduler 之间通信均启用 TLS;使用 kubeadm 初始化时配置证书与 SAN(如
--apiserver-cert-extra-sans=外网IP/域名),避免明文端口与不安全端口。
- 禁用不安全端口:确保 kube-apiserver 未启用
--insecure-port 与 --insecure-bind-address=0.0.0.0,仅使用 6443 安全端口。
- 证书与凭据治理:集中管理 CA/etcd/cert 生命周期,定期轮换;为 kubeconfig 设置最小权限与过期策略,避免长期有效凭据。
三 身份与访问控制
- RBAC 最小权限:以 Role/ClusterRole + RoleBinding/ClusterRoleBinding 精确授权;避免将 cluster-admin 直接绑定到用户或应用 ServiceAccount;定期审计并清理不再使用的绑定。
- 命名空间隔离:按 dev/staging/prod 划分命名空间,配合 ResourceQuota 与 LimitRange 控制资源与权限边界。
- 外部身份集成:对接 OIDC/LDAP,在 API Server 启用相关启动参数,实现统一身份与单点登录。
- 权限自检:使用
kubectl auth can-i --list --as=system:serviceaccount:<ns>:<sa> 验证最小权限是否满足。
四 网络与 Pod 安全
- NetworkPolicy:启用网络策略插件(如 Calico/Cilium),默认拒绝入站/出站,按需放行:
- 命名空间默认拒绝示例:
- apiVersion: networking.k8s.io/v1
- kind: NetworkPolicy
- metadata: name: default-deny; namespace: staging
- spec: podSelector: {}; policyTypes: [Ingress]
- 按需仅允许必要流量(如仅允许来自 frontend 命名空间的 80/443)。
- 注意:开启网络策略可能对性能有轻微影响,需在启用前评估与验证。
- 运行时安全:为工作负载设置 SecurityContext(如 runAsNonRoot、readOnlyRootFilesystem、dropCapabilities、seccompProfile),避免使用特权容器。
五 镜像与供应链、审计与运维
- 可信镜像与私有仓库:仅从可信源拉取,使用 Harbor/Quay 等私有仓库,启用镜像签名与漏洞扫描,定期更新镜像以修复 CVE。
- 数据与凭据:使用 Secrets(优先 KMS/外部密钥管理)管理敏感信息,避免明文;对 PV/PVC 启用加密与最小权限挂载。
- 审计与监控:开启 Kubernetes 审计日志,结合 Prometheus/Grafana 与告警规则,持续监测异常 API 调用、资源异常与节点状态。
- 持续加固:保持 Ubuntu 与 Kubernetes 组件及时更新,遵循 最小权限原则 与 零信任 思路,定期复盘安全基线。