Как проверить спецификацию PSP (pod security policy) в Kubernetes
Часть спецификации PSP(Pod Security Policy) не видна (например, hostIPC: false, Priviledged: false ... и т. Д.)
Подскажите, почему я не могу это проверить?
[psp.yaml]
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: default
spec:
allowPrivilegeEscalation: false
hostIPC: false
hostNetwork: false
hostPID: false
privileged: false
readOnlyRootFilesystem: false
runAsUser:
rule: 'MustRunAsNonRoot'
seLinux:
rule: 'RunAsAny'
supplementalGroups:
rule: 'RunAsAny'
fsGroup:
rule: 'RunAsAny'
requiredDropCapabilities:
- NET_RAW
"default-psp.yaml" 21L
[создание psp]
[root@master01 ~]# kubectl create -f default-psp.yaml
podsecuritypolicy.policy/default created
[root@master01 ~]# kubectl get psp
NAME PRIV CAPS SELINUX RUNASUSER FSGROUP SUPGROUP READONLYROOTFS VOLUMES
default false RunAsAny MustRunAsNonRoot RunAsAny RunAsAny false
[root@master01 ~]#
[проверка psp]
[root@master01 ~]# kubectl get psp default -o json
{
"apiVersion":"v1",
"items":[
{
"apiVersion":"policy/v1beta1",
"kind":"PodSecurityPolicy",
"metadata":{
"creationTimestamp":"2021-05-04T04:12:52Z",
"managedFields":[
{
"apiVersion":"policy/v1beta1",
"fieldsType":"FieldsV1",
"fieldsV1":{
"f:spec":{
"f:allowPrivilegeEscalation":{
},
"f:fsGroup":{
"f:rule":{
}
},
"f:requiredDropCapabilities":{
},
"f:runAsUser":{
"f:rule":{
}
},
"f:seLinux":{
"f:rule":{
}
},
"f:supplementalGroups":{
"f:rule":{
}
}
}
},
"manager":"kubectl",
"operation":"Update",
"time":"2021-05-04T04:12:52Z"
}
],
"name":"default",
"resourceVersion":"163847",
"selfLink":"/apis/policy/v1beta1/podsecuritypolicies/default",
"uid":"b8ed1cf3-7cb8-4f03-a5d4-d1f6d8fb51a0"
},
"**""spec":{
"allowPrivilegeEscalation":false,
"fsGroup":{
"rule":"RunAsAny"
},
"requiredDropCapabilities":[
"NET_RAW"
],
"runAsUser":{
"rule":"MustRunAsNonRoot"
},
"seLinux":{
"rule":"RunAsAny"
},
"supplementalGroups":{
"rule":"RunAsAny""**"
}
}
}
],
"kind":"List",
"metadata":{
"resourceVersion":"",
"selfLink":""
}
}
версия kube: 1.18.6
1 ответ
Это связано с базовым представлением данных в кодировке Go и json.
Все поля
bool
тип данных действует таким же образом при кодировании в json:
- Если false: поле не появляется в результате json
- Если верно : поле действительно появляется в результате JSON
Кто-то уже упоминал об этом как о проблеме: go / issues / 13284. Я упомяну только объяснение, прочтите весь выпуск для получения подробностей и контекста:
Это работает как задумано. false - это нулевое значение логических значений, а ваш тег структуры json имеет значение omitempty. Как видно из t2, если вы не используете omitempty, значение не пропущено.
Вы можете видеть, что если вы установите эти поля на
true
, они показаны.
Вы ничего не можете с этим поделать. Просто помните, что если поле не отображается, его значение ложно.
Если вы действительно думаете, что это проблема и она не должна работать таким образом, откройте проблему в репозитории github k8s и спросите об этой проблеме напрямую разработчиков.