Istio with Pod Security Policy (в GKE) - контейнер не запускается
Я использую Google Cloud, управляемый istio. Он предлагает 1.0.3 прямо сейчас, и 1.1.1 будет там примерно через месяц. Моя проблема не зависит от версии.
В моем кластере с поддержкой istio включена следующая PSP:
apiVersion: v1
items:
- apiVersion: extensions/v1beta1
kind: PodSecurityPolicy
metadata:
annotations:
apparmor.security.beta.kubernetes.io/allowedProfileNames: runtime/default
apparmor.security.beta.kubernetes.io/defaultProfileName: runtime/default
seccomp.security.alpha.kubernetes.io/allowedProfileNames: docker/default
seccomp.security.alpha.kubernetes.io/defaultProfileName: docker/default
name: restrictive-psp
namespace: ""
spec:
allowPrivilegeEscalation: true
allowedCapabilities:
- '*'
fsGroup:
rule: RunAsAny
hostPorts:
- max: 8000
min: 0
privileged: true
runAsUser:
rule: RunAsAny
seLinux:
rule: RunAsAny
supplementalGroups:
rule: RunAsAny
volumes:
- configMap
- secret
- emptyDir
- nfs
- persistentVolumeClaim
- hostPath
kind: List
metadata:
resourceVersion: ""
selfLink: ""
Соответствующее clusterRole:
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: restrictive-role
rules:
- apiGroups:
- extensions
resources:
- podsecuritypolicies
resourceNames:
- restrictive-psp
verbs:
- use
clusterRoleBinding:
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: restrict-rolebind
subjects:
- kind: Group
name: system:serviceaccounts
namespace: kube-system
roleRef:
kind: ClusterRole
name: restrictive-role
apiGroup: rbac.authorization.k8s.io
Тем не менее я получаю следующую ошибку:
Ошибка создания: блоки "encryption-9-87649bf5d-q8dbk" запрещены: невозможно выполнить проверку на соответствие любой политике безопасности модуля:
Стручки без коляски подходят хорошо.
Я проверил необходимые шаги на странице " https://preliminary.istio.io/help/ops/setup/required-pod-capabilities ":
[sourabh.w@K9-MAC-035 istio-cni]$ for psp in $(kubectl get psp -o jsonpath="{range .items[*]}{@.metadata.name}{'\n'}{end}"); do if [ $(kubectl auth can-i use psp/$psp --as=system:serviceaccount:r19-3-encryption-qa:default) = yes ]; then kubectl get psp/$psp --no-headers -o=custom-columns=NAME:.metadata.name,CAPS:.spec.allowedCapabilities; fi; done
restrictive-psp [*]
[sourabh.w@K9-MAC-035 istio-cni]$ for psp in $(kubectl get psp -o jsonpath="{range .items[*]}{@.metadata.name}{'\n'}{end}"); do if [ $(kubectl auth can-i use psp/$psp --as=system:serviceaccount:default:default) = yes ]; then kubectl get psp/$psp --no-headers -o=custom-columns=NAME:.metadata.name,CAPS:.spec.allowedCapabilities; fi; done
restrictive-psp [*]
[sourabh.w@K9-MAC-035 istio-cni]$