跳转至

7. 安全加固

安全不是可选项,而是必选项。本章将指导您如何通过 RBAC 控制权限,以及如何扫描镜像漏洞。

7.1 RBAC 权限控制

RBAC (Role-Based Access Control) 是 Kubernetes 授权的核心。切勿让所有人都使用 admin 权限。

7.1.1 创建只读用户 (ReadOnly)

假设我们需要给开发人员创建一个只能查看 Pod,不能修改任何资源的用户。

  1. 创建 ServiceAccount: manifests/07-security/readonly-user.yaml:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: dev-reader
      namespace: default
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: pod-reader
      namespace: default
    rules:
    - apiGroups: [""]
      resources: ["pods", "pods/log"]
      verbs: ["get", "watch", "list"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: read-pods
      namespace: default
    subjects:
    - kind: ServiceAccount
      name: dev-reader
      namespace: default
    roleRef:
      kind: Role
      name: pod-reader
      apiGroup: rbac.authorization.k8s.io
    

  2. 生成 Kubeconfig: K3s 默认启用了 TokenRequest API。

    # 创建长期有效的 Token (1年)
    kubectl create token dev-reader --duration=8760h
    
    将获取的 Token 填入 kubeconfig 的 user 字段即可。

7.2 Pod 安全标准 (PSS)

Kubernetes v1.25+ 引入了 Pod Security Standards。K3s 默认宽松,我们可以强制实施。

7.2.1 启用 Baseline 策略

在 Namespace 级别打标签:

kubectl label namespace default \
  pod-security.kubernetes.io/enforce=baseline \
  pod-security.kubernetes.io/warn=restricted
  • Baseline: 禁止特权容器、限制 HostPath 等。
  • Restricted: 最严格标准,要求非 root 运行等。

7.3 镜像安全扫描

推荐使用 Trivy 扫描镜像漏洞。

7.3.1 安装 Trivy

curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin

7.3.2 扫描集群

trivy k8s --report summary cluster
输出示例:
Summary Report
==============
Total: 15 (UNKNOWN: 0, LOW: 2, MEDIUM: 8, HIGH: 5, CRITICAL: 0)

7.4 K3s CIS 基线扫描

K3s 集成了 kube-bench 的功能。

# 针对 CIS Kubernetes Benchmark 进行自检
k3s check-config