Kubernetes 1.21版本以后,Pod 安全标准已经从 Pod 安全策略 (PodSecurityPolicy,PSP) 迁移到了内置的 Pod 安全准入控制器(PodSecurity Admission Controller)。下面是使用内置准入控制器实施 Pod 安全标准的一般步骤:

1. 检查 Kubernetes 版本:
   确保你的 Kubernetes 版本是 1.21 或更新版本,因为 Pod 安全准入控制器从这个版本开始变为 GA(General Availability)。

2. 启用 Pod 安全准入控制器:
   在 kube-apiserver 的启动参数中确保启用了 Pod 安全准入控制器。可以在 kube-apiserver 的启动参数中添加以下选项:
   --enable-admission-plugins=PodSecurity,PodSecurityDefault

   这将启用 Pod 安全准入控制器及其默认策略。

3. 定义 Pod 安全标准:
   Pod 安全标准是通过定义 PodSecurityPolicy 资源来实现的。你需要根据你的安全需求创建 PodSecurityPolicy,并确保它符合你的安全标准。以下是一个简单的示例:
   apiVersion: policy/v1
   kind: PodSecurityPolicy
   metadata:
     name: restricted-psp
   spec:
     privileged: false
     # 其他安全规则...

4. 创建 ClusterRole 和 ClusterRoleBinding:
   Pod 安全准入控制器需要访问 PodSecurityPolicy 资源,因此需要定义 ClusterRole 和 ClusterRoleBinding:
   apiVersion: rbac.authorization.k8s.io/v1
   kind: ClusterRole
   metadata:
     name: psp:restricted
   rules:
   - apiGroups: ['policy']
     resources: ['podsecuritypolicies']
     verbs: ['use']
     resourceNames: ['restricted-psp']
   apiVersion: rbac.authorization.k8s.io/v1
   kind: ClusterRoleBinding
   metadata:
     name: psp:restricted
   roleRef:
     apiGroup: rbac.authorization.k8s.io
     kind: ClusterRole
     name: psp:restricted
   subjects:
   - kind: ServiceAccount
     name: default
     namespace: default

5. 使用 Pod 安全标准:
   在 Pod 的 securityContext 字段中引用定义的 Pod 安全标准:
   apiVersion: v1
   kind: Pod
   metadata:
     name: mypod
   spec:
     securityContext:
       seLinuxOptions:
         user: "s0:c123,c456"
     containers:
     - name: mycontainer
       image: myimage

   在这个例子中,seLinuxOptions 是 Pod 安全标准的一部分,它指定了 SELinux 用户。

请注意,这只是一个简化的示例。根据你的实际安全需求,你可能需要在 Pod 安全标准中定义更多规则。确保在使用 Pod 安全准入控制器之前详细了解安全标准和策略。


转载请注明出处:http://www.zyzy.cn/article/detail/9896/Kubernetes