在 CentOS 上配置 Kubernetes 的安全策略
一 基础系统与安全加固
- 关闭 Swap:执行swapoff -a并注释**/etc/fstab**中的 swap 行,Kubelet 检测到 Swap 将拒绝启动。
- 内核与网络:启用br_netfilter并开启桥接流量进入 iptables/ip6tables;开启ip_forward;按需加载 IPVS 模块(Service 高并发时性能更好)。
- 时间同步:安装并启用NTP/chrony,保证节点间时间一致,避免证书校验与审计异常。
- 防火墙:生产环境建议启用firewalld/iptables并仅放行必要端口,而非直接关闭;最小化暴露可减少攻击面。
- SELinux:如与组件冲突可在测试环境设为permissive,生产环境建议保持enforcing并配合安全上下文/准入控制使用。
- 容器运行时:以Containerd为例,启用SystemdCgroup = true以与 kubelet 一致。
以上为常见且必要的前置与安全基线配置。
二 身份与访问控制
- API Server 认证与加密:启用TLS,结合客户端证书、ServiceAccount Token、OIDC、Webhook等机制;对外暴露仅保留6443/HTTPS。
- RBAC 最小权限:按“最小权限原则”使用Role/ClusterRole与RoleBinding/ClusterRoleBinding授予权限,定期审计。
- 准入控制:启用准入控制器(如PodSecurity、ImagePolicyWebhook等),在对象创建更新阶段强制安全基线。
- 镜像与私有仓库:优先使用私有镜像仓库,并定期执行镜像扫描(如 Trivy、Clair 等)降低漏洞风险。
这些机制共同确保“谁能访问、能访问什么、以何方式访问”受控且可审计。
三 运行时与 Pod 安全
- 安全上下文 SecurityContext:在 Pod/容器级设置runAsNonRoot、readOnlyRootFilesystem、runAsUser/runAsGroup、fsGroup、capabilities.drop等,缩小攻击面。
- 运行时权限:避免使用privileged容器;按需仅添加最小Linux capabilities;禁止共享主机命名空间(hostNetwork/hostPID/hostIPC)。
- 资源与 QoS:为容器设置requests/limits(CPU/内存),防止资源耗尽型攻击与“吵闹邻居”。
- Pod Security(准入):在 v1.21 之前可用PodSecurityPolicy;v1.22+ 使用内置的Pod Security Admission(或替代方案如 Kyverno、OPA Gatekeeper)强制基线(如restricted)。
- 数据面加密:为etcd 数据静态加密,并为敏感流量启用mTLS(服务网格或手动注入 Sidecar)。
以上措施覆盖容器运行时的身份、权限、能力与资源边界。
四 网络策略与最小暴露面
- 选择支持 NetworkPolicy 的 CNI:如Calico、Cilium、Antrea、Kube-router、Weave;注意Flannel 不支持NetworkPolicy。
- 默认行为:未匹配任何策略时,Pod 的入口/出口默认放行;一旦某方向被策略选中,则仅允许策略中显式放行的流量(策略是“加法”生效)。
- 典型场景示例:仅允许带有access=true标签的 Pod 访问default命名空间中app=nginx的 80/TCP。
示例清单:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: access-nginx
namespace: default
spec:
podSelector:
matchLabels:
app: nginx
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
access: "true"
ports:
- protocol: TCP
port: 80
- 服务暴露:仅暴露必要服务,优先通过Service类型(如ClusterIP)在集群内部访问,对外通过Ingress Controller集中暴露并启用鉴权/限流/WAF。
- 端口与防火墙:仅放行6443(API)、10250(kubelet)、2379/2380(etcd)、53(DNS)等关键端口,并依据所用 CNI 开放其控制端口(如Calico BGP 179)。
通过 NetworkPolicy 实现命名空间与 Pod 级别的L3/L4细粒度隔离,是减小横向移动风险的关键。
五 审计日志与持续运营
- 审计日志:启用Kubernetes 审计日志,记录对 API 的关键操作与来源,配合集中化存储与分析平台进行告警与取证。
- 监控与告警:使用Prometheus + Grafana监控API Server、kubelet、etcd、CoreDNS、网络等关键指标,设置异常阈值与通知。
- 版本与补丁:保持Kubernetes 与节点组件为稳定版并及时打补丁;定期轮换证书与凭据。
- 合规与基线:结合CIS/K8s Benchmark与内部规范,定期扫描与加固(镜像、配置、权限、网络)。
持续化的可观测、审计与加固闭环,能显著降低风险暴露时间并提升响应效率。