Как проверить спецификацию 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 и спросите об этой проблеме напрямую разработчиков.

Другие вопросы по тегам