预约咨询 提交工单

Kubernetes 安全加固:SRE 的实用指南

学习从 RBAC、网络策略到 Pod 安全准入和审计日志的关键 Kubernetes 集群安全加固步骤,包含真实 SRE 场景和回滚流程。

Kubernetes 安全加固:SRE 的实用指南
Security 6min 47 浏览 2026-07-07
KubernetesSRE

场景

作为 SRE,你发现 Kubernetes 工作节点上的 kubelet 端口(10250)暴露在内部网络中,允许未经认证的访问,可能被用于获取 Pod 和容器信息甚至执行命令。

症状

  • 安全扫描报告显示 kubelet 端口开放。
  • 在系统命名空间下意外创建 Pod。
  • API 服务器日志中出现大量来自未知身份的对 kubelet 的请求。

诊断

  1. 检查 kubelet 启动参数:ps aux | grep kubelet,查看是否缺少 --authentication-token-webhook--authorization-mode 设置。
  2. 使用网络扫描确认端口暴露:nmap -p 10250 <node-ip>
  3. 尝试直接访问 kubelet API:curl -k https://<node-ip>:10250/pods,如果返回 Pod 列表则存在安全隐患。

命令与操作

1. 启用 kubelet 认证与授权

编辑 kubelet 配置文件(通常位于 /var/lib/kubelet/config.yaml),添加或修改:

authentication:
  webhook:
    enabled: true
  anonymous:
    enabled: false
authorization:
  mode: Webhook

重启 kubelet:systemctl restart kubelet

2. 网络层面限制访问

使用 Kubernetes NetworkPolicy 或云平台防火墙规则,仅允许 API 服务器和 Prometheus 等必要组件访问 kubelet 端口。示例 NetworkPolicy:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: restrict-kubelet
  namespace: kube-system
spec:
  podSelector:
    matchLabels:
      component: kubelet
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          component: kube-apiserver
    ports:
    - port: 10250

3. 启用 NodeRestriction 准入控制器

在 kube-apiserver 启动参数中添加 --enable-admission-plugins=NodeRestriction,确保节点只能修改自身相关的资源。

4. 配置 RBAC 以限制 kubelet API 权限

创建 ClusterRole 和 ClusterRoleBinding,仅允许系统节点使用 nodes/proxy 等必要资源。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: system:kubelet-api-admin
rules:
- apiGroups: [""]
  resources: ["nodes/proxy"]
  verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: system:kubelet-api-admin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:kubelet-api-admin
subjects:
- kind: Group
  name: system:nodes
  apiGroup: rbac.authorization.k8s.io

5. 强制 Pod 安全标准

启用 Pod Security Admission(PSA),设置命名空间标签:

kubectl label ns default pod-security.kubernetes.io/enforce=restricted

或使用 OPA/Gatekeeper 实施自定义策略。

风险控制

  • 所有更改先在预发布环境测试。
  • 确保 API 服务器有足够内存处理额外准入 Webhook 调用。
  • 备份 kubelet 配置文件。
  • 对 kubelet 重启采用滚动更新策略,避免同时重启多个节点。

回滚

  1. 还原 kubelet 配置文件,重启服务。
  2. 删除添加的 RBAC 资源:kubectl delete clusterrole system:kubelet-api-admin
  3. 删除 NetworkPolicy。
  4. 移除 Pod Security Admission 标签。

验证

  1. 尝试未认证访问:curl -k https://<node-ip>:10250/pods 应返回 401 或 403。
  2. 使用有效的 ServiceAccount 令牌测试:kubectl get --raw /api/v1/nodes/<node>/proxy/pods 应成功(需 RBAC 授权)。
  3. 检查 API 服务器日志确认无未授权 kubelet 请求。

何时提交 OpsGlobal 工单

  • 实施后出现大规模的 Pod 连接异常或节点不可用。
  • 需要协助配置 Pod Security Admission 的基线或受限模式。
  • 计划集成 OPA/Gatekeeper 但缺乏经验。
  • 需要审计日志配置和告警规则。

OpsGlobal 的资深 SRE 专家可以提供 7x24 远程支持,确保生产集群安全稳定。

适用场景

适合正在处理 Security、Kubernetes, SRE 相关问题的团队,用于快速建立排查路径和交付标准。

问题背景

学习从 RBAC、网络策略到 Pod 安全准入和审计日志的关键 Kubernetes 集群安全加固步骤,包含真实 SRE 场景和回滚流程。

排查步骤

先确认影响范围和最近变更,再收集日志、配置、指标和链路数据,最后按风险从低到高执行修复。

命令示例

示例命令请替换为你的真实资源名,并使用环境变量保存账号、密码、token 等敏感信息。

风险说明

生产环境操作前需要确认备份、权限边界、变更窗口和回滚路径,避免扩大故障影响。

回滚方案

保留原配置和发布版本;如修复后指标异常,立即回退配置、镜像或数据库变更并复核日志。

交付清单

问题定位记录、关键命令、修复步骤、验证结果、后续优化建议。

!

遇到类似技术问题?

如果你的服务器、K8s、Docker、CI/CD、数据库或监控系统出现类似问题,可以提交日志和配置文件,我们帮你远程诊断。

工单 WhatsApp 联系 咨询