Размещение ответа на свой вопрос.Надеюсь, это поможет кому-то
Все мои конфигурации PodSecurityPolicy верны.Проблема заключалась в том, что я пытался развернуть модуль самостоятельно, а не с помощью какого-либо диспетчера контроллеров, такого как Deployment / Replicaset / Daemonset и т. Д. Большинство модулей Kubernetes не создаются непосредственно пользователями.Вместо этого они обычно создаются косвенно как часть Deployment, ReplicaSet или другого шаблонного контроллера с помощью диспетчера контроллеров.
В случае модуля, развернутого своим собственным модулем, модуль создается kubectl, а не диспетчером контроллера.
В Kubernetes есть одна роль суперпользователя с именем «cluster-admin».В моем случае kubectl работает с ролью суперпользователя «cluster-admin».Эта роль «cluster-admin» имеет доступ ко всем политикам безопасности модуля.Потому что, чтобы связать политику безопасности pod с ролью, нам нужно использовать глаголы 'use' и установить для 'resources' значение 'podsecuritypolicy' в 'apiGroups'
В роли администратора кластера 'resources' * include«podsecuritypolicies» и «глаголы» * включают «use».Таким образом, все политики также будут применяться к роли администратора кластера.
[root@master01 vagrant]# kubectl get clusterrole cluster-admin -o yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
annotations:
rbac.authorization.kubernetes.io/autoupdate: "true"
labels:
kubernetes.io/bootstrapping: rbac-defaults
name: cluster-admin
rules:
- apiGroups:
- '*'
resources:
- '*'
verbs:
- '*'
- nonResourceURLs:
- '*'
verbs:
- '*'
pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: psp-test-pod
namespace: default
spec:
serviceAccountName: default
containers:
- name: pause
image: k8s.gcr.io/pause
securityContext:
privileged: true
Я развернул вышеупомянутый pod.yaml с помощью команды kubectl create -f pod.yaml
Поскольку я создал две политики безопасности pod для ограничения и одну для привилегий,Роль кластера-администратора имеет доступ к обеим политикам.Таким образом, вышеприведенный модуль будет нормально запускаться с kubectl, потому что роль кластера-администратора имеет доступ к привилегированной политике (привилегированный: ложь также работает, потому что роль администратора также имеет доступ к политике ограничения).Эта ситуация возникает, только если модуль, созданный непосредственно kubectl, а не менеджерами управления кубом, или модуль имеет доступ к роли «cluster-admin» через serviceaccount
В случае модуля, созданного с помощью Deployment / Replicaset и т. Д...first kubectl передает управление диспетчеру контроллеров, затем контроллер попытается развернуть модуль после проверки прав доступа (serviceaccount, podsecuritypolicies)
В приведенном ниже файле развертывания модуль пытается запустить модуль в привилегированном режиме.,В моем случае это развертывание не удастся, потому что я уже установил «ограниченную» политику в качестве политики по умолчанию для всех учетных записей служб в кластере.Таким образом, ни один модуль не сможет работать в привилегированном режиме.Если модуль должен работать в привилегированном режиме, разрешите служебной учетной записи этого модуля использовать «привилегированную» политику
apiVersion: apps/v1
kind: Deployment
metadata:
name: pause-deploy-privileged
namespace: kube-system
labels:
app: pause
spec:
replicas: 1
selector:
matchLabels:
app: pause
template:
metadata:
labels:
app: pause
spec:
serviceAccountName: default
containers:
- name: pause
image: k8s.gcr.io/pause
securityContext:
privileged: true