7. 安全加固
安全不是可选项,而是必选项。本章将指导您如何通过 RBAC 控制权限,以及如何扫描镜像漏洞。
7.1 RBAC 权限控制
RBAC (Role-Based Access Control) 是 Kubernetes 授权的核心。切勿让所有人都使用 admin 权限。
7.1.1 创建只读用户 (ReadOnly)
假设我们需要给开发人员创建一个只能查看 Pod,不能修改任何资源的用户。
-
创建 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 -
生成 Kubeconfig: K3s 默认启用了 TokenRequest API。
将获取的 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 扫描集群
输出示例:7.4 K3s CIS 基线扫描
K3s 集成了 kube-bench 的功能。