我正在测试非kube系统命名空间资源上的PodSecurityPolicy资源。
首先,我确保了通过检查kube过程来启用PodSecurityPolicy:
kube-apiserver --advertise-address=192.168.56.4 --allow-privileged=true --authorization-mode=Node,RBAC --client-ca-file=/etc/kubernetes/pki/ca.crt --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --enable-bootstrap-token-auth=true --etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt --etcd-certfile=/etc/kubernetes/pki/apiserver-etcd-client.crt --etcd-keyfile=/etc/kubernetes/pki/apiserver-etcd-client.key --etcd-servers=https://127.0.0.1:2379 --insecure-port=0 --kubelet-client-certificate=/etc/kubernetes/pki/apiserver-kubelet-client.crt --kubelet-client-key=/etc/kubernetes/pki/apiserver-kubelet-client.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt --proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key --requestheader-allowed-names=front-proxy-client --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-key-file=/etc/kubernetes/pki/sa.pub --service-cluster-ip-range=10.96.0.0/12 --tls-cert-file=/etc/kubernetes/pki/apiserver.crt --tls-private-key-file=/etc/kubernetes/pki/apiserver.key使用以下策略创建了PodSecurityPolicy资源:
[root@master manifests]# kubectl get psp -o wide
NAME PRIV CAPS SELINUX RUNASUSER FSGROUP SUPGROUP READONLYROOTFS VOLUMES
podsecplcy false RunAsAny RunAsAny RunAsAny RunAsAny true 创建集群角色和集群绑定如下:
[root@master manifests]# kubectl describe clusterrole non-priv-role
Name: non-priv-role
Labels: <none>
Annotations: <none>
PolicyRule:
Resources Non-Resource URLs Resource Names Verbs
--------- ----------------- -------------- -----
podsecuritypolicies.policy [] [podsecplcy] [list get watch][root@master ~]# kubectl describe clusterrolebinding psprb
Name: psprb
Labels: <none>
Annotations: <none>
Role:
Kind: ClusterRole
Name: non-priv-role
Subjects:
Kind Name Namespace
---- ---- ---------
ServiceAccount default default
[root@master ~]#下面是我用来创建pod的吊舱清单:
apiVersion: v1
kind: Pod
metadata:
name: pod-privileged
spec:
containers:
- name: main
image: alpine
command: ["/bin/sleep", "999999"]
securityContext:
privileged: true我希望它不应该允许在默认名称空间上创建特权荚。
实际上,pod创建并运行良好:
[root@master ~]# kubectl get po
NAME READY STATUS RESTARTS AGE
pod-privileged 1/1 Running 0 17s我是否需要创建用户或组,并将此集群绑定分配给check,还是因为我们已经将这个集群绑定分配到默认名称空间和默认服务帐户,否则它会工作吗?
另外,如何检查当前的角色和特权是什么?
请查找kubernetes版本和podsecplcy yaml文件的详细信息。
[root@master ~]# kubectl get no
NAME STATUS ROLES AGE VERSION
master.k8s Ready master 5d1h v1.16.2
node1.k8s Ready <none> 5d v1.16.3
node2.k8s Ready <none> 4d22h v1.16.3
[root@master ~]#
[root@master ~]# kubectl cluster-info
Kubernetes master is running at https://192.168.56.4:6443
KubeDNS is running at https://192.168.56.4:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
[root@master ~]#
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"policy/v1beta1","kind":"PodSecurityPolicy","metadata":{"annotations":{},"name":"podsecplcy"},"spec":{"allowPrivilegeEscalation":false,"fsGroup":{"rule":"RunAsAny"},"hostIPC":false,"hostNetwork":false,"hostPID":false,"hostPorts":[{"max":30000,"min":10000}],"privileged":false,"readOnlyRootFilesystem":true,"runAsUser":{"rule":"RunAsAny"},"seLinux":{"rule":"RunAsAny"},"supplementalGroups":{"rule":"RunAsAny"},"volumes":["*"]}}
creationTimestamp: "2019-11-23T21:31:36Z"
name: podsecplcy
resourceVersion: "626637"
selfLink: /apis/policy/v1beta1/podsecuritypolicies/podsecplcy
uid: f3316992-0dc7-4c19-852b-57e5babc451f
spec:
allowPrivilegeEscalation: false
fsGroup:
rule: RunAsAny
hostPorts:
- max: 30000
min: 10000
readOnlyRootFilesystem: true
runAsUser:
rule: RunAsAny
seLinux:
rule: RunAsAny
supplementalGroups:
rule: RunAsAny
volumes:
- '*'发布于 2019-11-29 12:28:56
这里我是如何验证podSecurityPolicy podsecplcy的
[root@master ~]# kubectl get psp
NAME PRIV CAPS SELINUX RUNASUSER FSGROUP SUPGROUP READONLYROOTFS VOLUMES
podsecplcy false RunAsAny RunAsAny RunAsAny RunAsAny true *问题:尽管我们创建了podsecuritypolicy podsecplcy,并将其添加到集群角色非priv-角色,并将其分配给集群绑定psprb,但我们仍然能够创建特权荚,而不需要error.but期望它会抛出错误。
解决方案:每当我们试图提交特权荚清单yaml时,我们并没有提到要创建pod.Since的用户、组或服务帐户,我使用kubeadm作为根用户安装了k8s集群,每当我以root身份登录主节点时,我的角色是集群-admin,并且我能够提交权限pod清单yaml文件,因为我的角色集群-admin具有完全的权限。
那么,现在如何测试它作为其他用户、组或服务帐户,我们将限制其创建特权荚?
如果我们是主节点作为集群管理,那么我们必须提交kubectl命令,如下所示,以测试podsecuritypolicy。
检查我们在哪里可以创建特殊的服务帐户。
[root@master ~]# kubectl create -f kubia-priv-pod.yml --as=system:serviceaccount:foo:default -n foo
Error from server (Forbidden): error when creating "kubia-priv-pod.yml": pods "pod-privileged" 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 ~]#
[root@master ~]# kubectl create -f kubia-priv-pod.yml --as=system:serviceaccount:default:default
Error from server (Forbidden): error when creating "kubia-priv-pod.yml": pods "pod-privileged" 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 ~]#检查我们可以在哪里创建特权荚作为服务帐户和组的组合。
[root@master ~]# kubectl create -f kubia-priv-pod.yml --as-group=system:authenticated --as=system:serviceaccount:default:default
Error from server (Forbidden): error when creating "kubia-priv-pod.yml": pods "pod-privileged" 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 ~]#以确保我们是否能够将priv创建为集群管理组。
[root@master ~]# kubectl get clusterrolebindings -o go-template='{{range .items}}{{range .subjects}}{{.kind}}-{{.name}} {{end}} {{" - "}} {{.metadata.name}} {{"\n"}}{{end}}' | grep "^Group-system:masters"
Group-system:masters - cluster-admin
[root@master ~]#
[root@master ~]# kubectl create -f kubia-priv-pod.yml --as-group=system:masters --as=system:serviceaccount:default:default
pod/pod-privileged created
[root@master ~]#附加注释:如果我们只想将这个受限的集群绑定应用于特定的组、用户或服务帐户,那么我们必须创建如下所示
kubectl create clusterrolebinding psprb --clusterrole=non-priv-role --user=jaya_vkl@yahoo.co.in
kubectl create clusterrolebinding psprbgrp --clusterrole=non-priv-role --group=system:authenticated
kubectl create clusterrolebinding psprbsa --clusterrole=non-priv-role --serviceaccount=default:default发布于 2019-11-28 16:13:45
您没有阻止权限提升,因此我建议您设置下面的指令。allowPrivilegeEscalation: false
https://stackoverflow.com/questions/59090175
复制相似问题