Pod安全策略(Pod Security Policy) 是集群級別的資源,它能夠控制Pod規約中與安全性相關的各個方面。 PodSecurityPolicy對象定義了一組Pod運行時必須遵循的條件及相關字段的默認值,只有Pod滿足這些條件才會被系統接受。
v1.17.17版本的集群默認啟用Pod安全策略準入控制組件,并創建名為psp-global的全局默認安全策略,您可根據自身業務需要修改全局策略(請勿直接刪除默認策略),也可新建自己的Pod安全策略并綁定RBAC配置。
說明
除全局默認安全策略外,系統為kube-system命名空間下的系統組件配置了獨立的Pod安全策略,修改psp-global配置不影響kube-system下Pod創建。
在Kubernetes 1.25版本中, PodSecurityPolicy已被移除,并提供Pod安全性準入控制器(Pod Security Admission)作為PodSecurityPolicy的替代,詳情請參見Pod Security Admission配置。
修改全局默認Pod安全策略
修改全局默認Pod安全策略前,請確保已創建CCE集群,并且通過kubectl連接集群成功。
步驟 1 執行如下命令:
kubectl edit psp psp-global
步驟 2 修改所需的參數,請參考PodSecurityPolicy。
Pod安全策略開放非安全系統配置示例
節點池管理中可以為相應的節點池配置allowed-unsafe-sysctls,CCE從1.17.17集群版本開始,需要在pod安全策略的allowedUnsafeSysctls中增加相應的配置才能生效,詳情請參見PodSecurityPolicy。
除修改全局Pod安全策略外,也可增加新的Pod安全策略,如開放net.core.somaxconn非安全系統配置,新增Pod安全策略示例參考如下:
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
annotations:
seccomp.security.alpha.kubernetes.io/allowedProfileNames: '*'
name: sysctl-psp
spec:
allowedUnsafeSysctls:
- net.core.somaxconn
allowPrivilegeEscalation: true
allowedCapabilities:
- '*'
fsGroup:
rule: RunAsAny
hostIPC: true
hostNetwork: true
hostPID: true
hostPorts:
- max: 65535
min: 0
privileged: true
runAsGroup:
rule: RunAsAny
runAsUser:
rule: RunAsAny
seLinux:
rule: RunAsAny
supplementalGroups:
rule: RunAsAny
volumes:
- '*'
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: sysctl-psp
rules:
- apiGroups:
- "*"
resources:
- podsecuritypolicies
resourceNames:
- sysctl-psp
verbs:
- use
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: sysctl-psp
roleRef:
kind: ClusterRole
name: sysctl-psp
apiGroup: rbac.authorization.k8s.io
subjects:
- kind: Group
name: system:authenticated
apiGroup: rbac.authorization.k8s.io
恢復原始Pod安全策略
如果您已經修改默認Pod安全策略后,想恢復原始Pod安全策略,請執行以下操作。
步驟 1 創建一個名為policy.yaml的描述文件。其中,policy.yaml為自定義名稱,您可以隨意命名。
vi policy.yaml
描述文件內容如下。
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: psp-global
annotations:
seccomp.security.alpha.kubernetes.io/allowedProfileNames: '*'
spec:
privileged: true
allowPrivilegeEscalation: true
allowedCapabilities:
- '*'
volumes:
- '*'
hostNetwork: true
hostPorts:
- min: 0
max: 65535
hostIPC: true
hostPID: true
runAsUser:
rule: 'RunAsAny'
seLinux:
rule: 'RunAsAny'
supplementalGroups:
rule: 'RunAsAny'
fsGroup:
rule: 'RunAsAny'
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: psp-global
rules:
- apiGroups:
- "*"
resources:
- podsecuritypolicies
resourceNames:
- psp-global
verbs:
- use
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: psp-global
roleRef:
kind: ClusterRole
name: psp-global
apiGroup: rbac.authorization.k8s.io
subjects:
- kind: Group
name: system:authenticated
apiGroup: rbac.authorization.k8s.io
步驟 2 執行如下命令:
kubectl apply -f policy.yaml