Kubernetes 系统强化 Pod安全策略 PSP
Pod安全策略限制維度
Pod安全策略限制維度:?
?在之前的行為在yaml里面寫一些安全配置都是有意識的去選擇,如果k8s集群是別人使用的較多,但是又想約束某些行為,這時候可以使用psp,強制約束在Pod里面某些行為,要不然不允許pod運行。
Pod安全策略實現為一個準入控制器,默認沒有啟用,當啟用后會強制實施Pod安全策略,沒有滿足的Pod將無法創建。因此,建議在啟用PSP之前先添加策略并對其授權。
[root@master ~]# vim /etc/kubernetes/manifests/kube-apiserver.yaml- --enable-admission-plugins=NodeRestriction,PodSecurityPolicy[root@master ~]# systemctl restart kubelet?用戶使用SA (ServiceAccount)創建了一個Pod,K8s會先驗證這個SA是否可以訪問PSP資源權限,如果可以進一步驗證Pod配置是否滿足PSP規則,任意一步不滿足都會拒絕部署。(第一步就是讓pod可以有PSP的訪問權限)
因此,需要實施需要有這幾點:(注意PSP是一個準入控制插件) ? 創建SA服務賬號 ? 該SA需要具備創建對應資源權限,例如創建Pod、Deployment ? SA使用PSP資源權限:創建Role,使用PSP資源權限,再將SA綁定Role(多了一步)?在啟用了準入控制器PSP,那么以后所有的Pod就需要經過PSP,但是現在PSP里面任何策略,那么所有的行為都是拒絕的。只有添加策略,符合策略的Pod才可以創建。所以在啟用PSP之前可以先寫好PSP的策略,應用上,以免PSP啟用之后不能創建Pod。
[root@master ~]# kubectl run nginx1 --image=nginx Error from server (Forbidden): pods "nginx1" is forbidden: no providers available to validate pod request現在我這個策略是一個比較寬泛的范圍,所以pod滿足這些規則可以正常創建
[root@master ~]# cat psp.yaml apiVersion: policy/v1beta1 kind: PodSecurityPolicy metadata:name: example spec:seLinux:rule: RunAsAnysupplementalGroups:rule: RunAsAnyrunAsUser:rule: RunAsAnyfsGroup:rule: RunAsAnyvolumes:- '*'[root@master ~]# kubectl apply -f psp.yaml podsecuritypolicy.policy/example created [root@master ~]# kubectl get psp NAME PRIV CAPS SELINUX RUNASUSER FSGROUP SUPGROUP READONLYROOTFS VOLUMES example false RunAsAny RunAsAny RunAsAny RunAsAny false * [root@master ~]# kubectl run nginx1 --image=nginx pod/nginx1 created默認情況下容器都不是以特權模式運行
[root@master ~]# vim psp.yaml spec:privileged: falseseLinux:rule: RunAsAny ........................................................[root@master ~]# kubectl apply -f psp.yaml podsecuritypolicy.policy/example configured [root@master ~]# kubectl get psp NAME PRIV CAPS SELINUX RUNASUSER FSGROUP SUPGROUP READONLYROOTFS VOLUMES example false RunAsAny RunAsAny RunAsAny RunAsAny false * [root@master ~]# kubectl run nginx2 --image=nginx pod/nginx2 created拒絕帶有特權模式的Pod去創建,注意特權是針對容器的,需要在容器下面配置。
默認我們使用kubelete操作的時候是特權賬號,使用普通賬號,還涉及到授權。(特權賬號是具有訪問psp的能力,所以說不需要授權了,普通賬號需要格外的授權)
[root@master ~]# vim sidecar.yaml [root@master ~]# kubectl apply -f sidecar.yaml Error from server (Forbidden): error when creating "sidecar.yaml": pods "web-server" is forbidden: unable to validate against any pod security policy: [spec.containers[0].securityContext.privileged: Invalid value: true: Privileged containers are not allowed] [root@master ~]# cat sidecar.yaml apiVersion: v1 kind: Pod metadata:name: web-servernamespace: default spec:containers:- name: nginximage: nginxsecurityContext:privileged: true普通賬號測試,可以看到內置的權限組的權限比較大,但是你會看到我啟動的pod是不具有特權模式的pod,為什么還會提示錯誤
[root@master ~]# kubectl create rolebinding psp --clusterrole=edit --serviceaccount=default:psp rolebinding.rbac.authorization.k8s.io/psp created#--as=system:serviceaccount這個是固定的格式,后面是來判斷sa是否具有相關的權限 [root@master ~]# kubectl --as=system:serviceaccount:default:psp get pod NAME READY STATUS RESTARTS AGE front-end-7899dbb4cf-kkbg4 1/1 Running 0 3d20h front-end-7899dbb4cf-np6kv 1/1 Running 0 3d20h front-end-7899dbb4cf-qns4b 1/1 Running 0 3d20h front-end-7899dbb4cf-sslgc 1/1 Running 0 3d20h front-end-7899dbb4cf-tb9gr 1/1 Running 0 3d20h nfs-client-provisioner-cb667d665-zh6b4 1/1 Running 10 9d nginx1 1/1 Running 0 21h nginx2 1/1 Running 0 21h tst 1/1 Running 0 4d13h[root@master ~]# kubectl --as=system:serviceaccount:default:psp get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE front-end NodePort 10.233.53.49 <none> 80:32012/TCP 3d13h kubernetes ClusterIP 10.233.0.1 <none> 443/TCP 51d[root@master ~]# kubectl --as=system:serviceaccount:default:psp run nginx3 --image=nginx Error from server (Forbidden): pods "nginx3" is forbidden: unable to validate against any pod security policy: []可以看到psp也不能訪問,所以需要授權讓其有訪問psp的權限
[root@master ~]# kubectl --as=system:serviceaccount:default:psp get psp Error from server (Forbidden): podsecuritypolicies.policy is forbidden: User "system:serviceaccount:default:psp" cannot list resource "podsecuritypolicies" in API group "policy" at the cluster scope [root@master ~]# kubectl create role psp --verb=use --resource=podsecuritypolicies --resource-name=psp -n default role.rbac.authorization.k8s.io/psp created[root@master ~]# kubectl create rolebinding psp --role=psp --serviceaccount=default:psp -n default rolebinding.rbac.authorization.k8s.io/psp created?
總結
以上是生活随笔為你收集整理的Kubernetes 系统强化 Pod安全策略 PSP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机考研自主命题表,都有那些学校考研数
- 下一篇: 水粉中的这两种绘画方法?你经常用哪种?