【发布时间】:2020-05-19 11:35:24
【问题描述】:
我正在尝试部署一个受限 psp,它应该禁止在 pod 中使用 root 用户:
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: unprivilegedpolicy
spec:
privileged: false
allowPrivilegeEscalation: false
requiredDropCapabilities:
- ALL
volumes:
- 'configMap'
- 'emptyDir'
- 'projected'
- 'secret'
- 'downwardAPI'
- 'persistentVolumeClaim'
hostNetwork: false
hostIPC: false
hostPID: false
runAsUser:
rule: 'MustRunAsNonRoot'
seLinux:
rule: 'RunAsAny'
supplementalGroups:
rule: 'MustRunAs'
ranges:
- min: 1
max: 65535
fsGroup:
rule: 'MustRunAs'
ranges:
- min: 1
max: 65535
readOnlyRootFilesystem: false
我已将此 psp 添加到 ClusterRole 并将其绑定到命名空间 hello-world:
Name: UnPrivilegedClusterRole
Labels: <none>
Annotations: <none>
PolicyRule:
Resources Non-Resource URLs Resource Names Verbs
--------- ----------------- -------------- -----
podsecuritypolicies.policy [] [unprivilegedpolicy] [use]
[root@master01 ~]# kubectl describe clusterrolebindings.rbac.authorization.k8s.io HelloWorldRoleBinding
Name: HelloWorldRoleBinding
Labels: <none>
Annotations: <none>
Role:
Kind: ClusterRole
Name: UnPrivilegedClusterRole
Subjects:
Kind Name Namespace
---- ---- ---------
Group system:serviceaccounts hello-world
但是,如果我尝试使用 kubectl run --name=nginx hello-world 运行 ngnix 容器,该容器会以 root 用户身份成功运行。部署通过 ServiceAccount 进行部署。
PodSecurityPolicy 准入控制器已启用。
有人对此有解决方案吗?
【问题讨论】:
-
您是否在 PSP 中尝试过
runAsUser: XXX指令? pod 是否在正确的命名空间中创建? -
是的,Pod 位于正确的命名空间中,不,我没有尝试过。我认为它应该像这样工作(这个例子来自 k8 文档)
-
请以K8S docs 为例。我设法以 nginx pod 无法生成
Error: container has runAsNonRoot and image will run as root告终。你是如何在准入控制器中启用podsecuritypolicy的?即使没有任何配置 pod 也不应该生成。
标签: kubernetes