• kubernetes pod podsecurityPolicies(PSP)


    kubernetes pod podsecurityPolicies

    tags: 资源对象,pod


    在这里插入图片描述

    美剧《开发者》(Devs)颠覆感藏在最后。

    1. 简介

    Pod Security Policies(PSP)是集群级的 Pod 安全策略,自动为集群内的 Pod 和 Volume 设置 Security Context。

    使用 PSP 需要 API Server 开启 extensions/v1beta1/podsecuritypolicy,并且配置 PodSecurityPolicy admission 控制器。

    注意: PodSecurityPolicy 自 Kubernetes v1.21 起已弃用,并将在 v1.25 中删除。我们建议迁移到Pod Security Admission或 3rd party admission 插件。有关迁移指南,请参阅从 PodSecurityPolicy 迁移到内置 PodSecurity 准入控制器。有关弃用的更多信息,请参阅PodSecurityPolicy 弃用:过去、现在和未来

    2. API 版本对照表

    Kubernetes 版本Extension 版本
    v1.5-v1.15extensions/v1beta1
    v1.10+policy/v1beta1

    3. 支持的控制项

    控制项说明
    privileged运行特权容器
    defaultAddCapabilities可添加到容器的 Capabilities
    requiredDropCapabilities会从容器中删除的 Capabilities
    allowedCapabilities允许使用的 Capabilities 列表
    volumes控制容器可以使用哪些 volume
    hostNetwork允许使用 host 网络
    hostPorts允许的 host 端口列表
    hostPID使用 host PID namespace
    hostIPC使用 host IPC namespace
    seLinuxSELinux Context
    runAsUseruser ID
    supplementalGroups允许的补充用户组
    fsGroupvolume FSGroup
    readOnlyRootFilesystem只读根文件系统
    allowedHostPaths允许 hostPath 插件使用的路径列表
    allowedFlexVolumes允许使用的 flexVolume 插件列表
    allowPrivilegeEscalation允许容器进程设置 no_new_privs
    defaultAllowPrivilegeEscalation默认是否允许特权升级

    4. 实例

    4.1 控制是否允许超出父进程特权

    allowPrivilegeEscalation:控制进程是否可以获得超出其父进程的特权。 此布尔值直接控制是否为容器进程设置 no_new_privs标志。 当容器满足一下条件之一时,allowPrivilegeEscalation 总是为 true: 以特权模式运行,或者 具有 CAP_SYS_ADMIN 权能 readOnlyRootFilesystem:以只读方式加载容器的根文件系统。
    在这里插入图片描述

    root@master:~/cks/securitytext# vim /etc/kubernetes/manifests/kube-apiserver.yaml
    ---
        - --enable-admission-plugins=NodeRestriction,PodSecurityPolicy
    ---
    
    
    root@master:~/cks/securitytext# cat psp.yaml 
    apiVersion: policy/v1beta1
    kind: PodSecurityPolicy
    metadata:
      name: default
    spec:
      allowPrivilegeEscalation: false
      privileged: false  # Don't allow privileged pods!
      # The rest fills in some required fields.
      seLinux:
        rule: RunAsAny
      supplementalGroups:
        rule: RunAsAny
      runAsUser:
        rule: RunAsAny
      fsGroup:
        rule: RunAsAny
      volumes:
      - '*'
    
    
    root@master:~/cks/securitytext# k create -f psp.yaml 
    podsecuritypolicy.policy/default created
    
    
    root@master:~/cks/securitytext# k create deploy nginx --image=nginx
    deployment.apps/nginx created
    root@master:~/cks/securitytext# k get deploy nginx -w
    NAME    READY   UP-TO-DATE   AVAILABLE   AGE
    nginx   0/1     0            0           22s
    ^Croot@master:~/cks/securitytext#  k run nginx --image=nginx
    pod/nginx created
    root@master:~/cks/securitytext# k get pod nginx
    NAME    READY   STATUS              RESTARTS   AGE
    nginx   1/1     Running             0          44s
    
    root@master:~/cks/securitytext#  k create role psp-access --verb=use --resource=podsecuritypolicies
    role.rbac.authorization.k8s.io/psp-access created
    root@master:~/cks/securitytext# k create rolebinding psp-access --role=psp-access --serviceaccount=default:default
    rolebinding.rbac.authorization.k8s.io/psp-access created
    root@master:~/cks/securitytext# k get deploy nginx
    NAME    READY   UP-TO-DATE   AVAILABLE   AGE
    nginx   0/1     0            0           3m26s
    root@master:~/cks/securitytext# k delete deploy nginx
    deployment.apps "nginx" deleted
    root@master:~/cks/securitytext# k create deploy nginx --image=nginx
    deployment.apps/nginx created
    ^Croot@master:~/cks/securitytext# k get deploy nginx
    NAME    READY   UP-TO-DATE   AVAILABLE   AGE
    nginx   1/1     1            1           20s
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57

    allowPrivilegeEscalation设置为rue

    root@master:~/cks/securitytext# vim pod.yaml 
    apiVersion: v1
    kind: Pod
    metadata:
      creationTimestamp: null
      labels:
        run: pod
      name: pod
    spec:
    #  securityContext:
    #    runAsUser: 1000
    #    runAsGroup: 3000
      containers:
      - command:
        - sh
        - -c
        - sleep 1d
        image: busybox
        name: pod
        resources: {}
        securityContext:
          allowPrivilegeEscalation: true
      dnsPolicy: ClusterFirst
      restartPolicy: Always
    status: {}
    
    root@master:~/cks/securitytext# k -f pod.yaml create
    Error from server (Forbidden): error when creating "pod.yaml": pods "pod" is forbidden: PodSecurityPolicy: unable to admit pod: [spec.containers[0].securityContext.allowPrivilegeEscalation: Invalid value: true: Allowing privilege escalation for containers is not allowed]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    4.2 限制端口

    限制容器的 host 端口范围为 8000-8080

    apiVersion: extensions/v1beta1
    kind: PodSecurityPolicy
    metadata:
      name: permissive
    spec:
      seLinux:
        rule: RunAsAny
      supplementalGroups:
        rule: RunAsAny
      runAsUser:
        rule: RunAsAny
      fsGroup:
        rule: RunAsAny
      hostPorts:
      - min: 8000
        max: 8080
      volumes:
      - '*'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    4.3 限制只允许使用 lvm 和 cifs 等 flexVolume 插件

    apiVersion: extensions/v1beta1
    kind: PodSecurityPolicy
    metadata:
      name: allow-flex-volumes
    spec:
      fsGroup:
        rule: RunAsAny
      runAsUser:
        rule: RunAsAny
      seLinux:
        rule: RunAsAny
      supplementalGroups:
        rule: RunAsAny
      volumes:
        - flexVolume
      allowedFlexVolumes:
        - driver: example/lvm
        - driver: example/cifs
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    参考:

  • 相关阅读:
    26 行为型模式-命令模式
    【C++初阶】前言——C++的发展简述及学习方法分享
    计算机网络第2章-HTTP和Web协议(2)
    使用sqlmap获取数据步骤
    基于springboot+vue水务报修处理系统
    usb与 hid, 串口 趣谈
    Selenium自动化测试框架常见异常分析及解决方法
    kafka 通过 jdbc 从oracle抓取数据
    程序员对外合作保密协议
    ubuntu安装nps客户端
  • 原文地址:https://blog.csdn.net/xixihahalelehehe/article/details/126125551