【问题标题】:How to check PSP(pod security policy) spec in Kubernetes如何在 Kubernetes 中检查 PSP(pod 安全策略)规范
【发布时间】:2021-07-31 12:45:10
【问题描述】:

部分 PSP(Pod 安全策略)规范不可见 (例如 hostIPC:假,特权:假……等等)

你能告诉我为什么我不能检查吗?

[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

【问题讨论】:

  • 提醒一下:PSP 已被弃用,将来会被移除,您现在可能不应该开始使用它们。
  • 我知道PSP很快就会被移除。但是,我现在需要申请 PSP...@coderanger

标签: kubernetes kubernetes-pod podsecuritypolicy


【解决方案1】:

这与Go和json编码的底层数据表示有关。

bool 数据类型的所有字段在编码为 json 时的行为方式相同:

  • 如果false:提交的出现在生成的json中
  • 如果 true:字段 确实 出现在结果 json 中

有人已经提到这是一个问题:go/issues/13284。我只会提到解释,请阅读整个问题以了解详细信息和上下文:

这是按预期工作的。 false 是布尔值的零值,并且您的 json 结构标记具有 omitempty。从 t2 可以看出,如果不使用 omitempty,则不会省略该值。

您可以看到,如果您将这些字段设置为true,它们就会被显示出来。

你对此无能为力。请记住,如果该字段未显示,则其值为 false。

如果您真的认为这是一个问题并且不应该以这种方式工作,请打开 issue on k8s github repo 并直接向开发人员询问此问题。

【讨论】:

    猜你喜欢
    • 2019-11-26
    • 2019-11-15
    • 2020-12-02
    • 2020-06-16
    • 2019-07-30
    • 2013-10-09
    • 2022-10-15
    • 2013-11-04
    • 2021-08-07
    相关资源
    最近更新 更多