首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kubernetes:我的PodSecurityPolicy不工作或配置错误

Kubernetes:我的PodSecurityPolicy不工作或配置错误
EN

Stack Overflow用户
提问于 2019-09-23 21:09:38
回答 1查看 943关注 0票数 0

我试图限制所有pod在特权模式下运行,除了少数几个。

因此我创建了两个Pod安全策略:一个允许运行特权容器,另一个用于限制特权容器。

代码语言:javascript
复制
[root@master01 vagrant]# kubectl get psp
NAME         PRIV    CAPS   SELINUX    RUNASUSER   FSGROUP    SUPGROUP   READONLYROOTFS   VOLUMES
privileged   true           RunAsAny   RunAsAny    RunAsAny   RunAsAny   false            *
restricted   false          RunAsAny   RunAsAny    RunAsAny   RunAsAny   false            *

已创建可使用pod安全策略“受限”的集群角色,并将该角色绑定到集群中的所有serviceaccount

代码语言:javascript
复制
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: psp-restricted
rules:
- apiGroups: ['policy']
  resources: ['podsecuritypolicies']
  verbs:     ['use']
  resourceNames:
  - restricted
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: psp-restricted
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: psp-restricted
subjects:
- kind: Group
  name: system:serviceaccounts
  apiGroup: rbac.authorization.k8s.io

现在我使用“特权”模式部署一个pod。但它正在被部署。创建的pod注释指示在pod创建期间验证了psp "privileged“。为什么会这样呢?受限制的PSP应该经过验证,对吗?

代码语言:javascript
复制
apiVersion: v1
kind: Pod
metadata:
  name: psp-test-pod
  namespace: default
spec:
  serviceAccountName: default
  containers:
    - name: pause
      image: k8s.gcr.io/pause
      securityContext:
        privileged: true
代码语言:javascript
复制
[root@master01 vagrant]# kubectl create -f pod.yaml
pod/psp-test-pod created
代码语言:javascript
复制
[root@master01 vagrant]# kubectl get pod psp-test-pod -o yaml |grep kubernetes.io/psp
    kubernetes.io/psp: privileged

Kubernetes版本: v1.14.5

我是不是漏掉了什么?任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-25 15:45:45

发布我自己问题的答案。希望它能帮助到某些人

我的所有PodSecurityPolicy配置都正确。问题是,我试图自己部署一个pod,而不是通过任何控制器管理器,如Deployment/Replicaset/Daemonset等。大多数Kubernetes pods不是用户直接创建的。相反,它们通常是通过控制器管理器间接创建为部署、ReplicaSet或其他模板化控制器的一部分。

在pod自己部署的情况下,pod是由kubectl创建的,而不是由控制器管理器创建的。

在Kubernetes中,有一个名为"cluster-admin“的超级用户角色。在我的例子中,kubectl以超级用户角色"cluster-admin“运行。此"cluster-admin“角色有权访问所有pod安全策略。因为,要将pod安全策略与角色相关联,我们需要使用“use”动词,并在“apiGroups”中将“resources”设置为“podsecuritypolicy”。

在cluster-admin角色中,'resources‘*包括'podsecuritypolicies’和'verbs‘*包括'use’。因此,所有策略也将在cluster-admin角色上强制执行。

代码语言:javascript
复制
[root@master01 vagrant]# kubectl get clusterrole cluster-admin -o yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  annotations:
    rbac.authorization.kubernetes.io/autoupdate: "true"
  labels:
    kubernetes.io/bootstrapping: rbac-defaults
  name: cluster-admin
rules:
- apiGroups:
  - '*'
  resources:
  - '*'
  verbs:
  - '*'
- nonResourceURLs:
  - '*'
  verbs:
  - '*'

pod.yaml

代码语言:javascript
复制
apiVersion: v1
kind: Pod
metadata:
  name: psp-test-pod
  namespace: default
spec:
  serviceAccountName: default
  containers:
    - name: pause
      image: k8s.gcr.io/pause
      securityContext:
        privileged: true

我使用命令kubectl create -f pod.yaml部署了上面的集群,因为我已经创建了两个pod安全策略,一个用于限制,一个用于特权,pod.yaml -admin角色可以访问这两个策略。因此,上面的pod可以使用kubectl正常启动,因为cluster-admin角色可以访问特权策略( privileged: false也可以,因为admin角色也可以访问限制策略)。仅当pod由kubectl而不是kube控制管理器直接创建,或者pod具有通过serviceaccount访问"cluster-admin“角色的权限时,才会出现这种情况

在部署/复制集etc..first kubectl创建的pod将控制权传递给控制器管理器的情况下,控制器将在验证权限(服务帐户、pod安全策略)后尝试部署pod

在下面的部署文件中,pod尝试以特权模式运行。在我的例子中,这个部署将会失败,因为我已经将“受限”策略设置为集群中所有serviceaccount的默认策略。因此,任何pod都不能以特权模式运行。如果pod需要在特权模式下运行,允许该pod的serviceaccount使用特权策略

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: pause-deploy-privileged
  namespace: kube-system
  labels:
    app: pause
spec:
  replicas: 1
  selector:
    matchLabels:
      app: pause
  template:
    metadata:
      labels:
        app: pause
    spec:
      serviceAccountName: default
      containers:
      - name: pause
        image: k8s.gcr.io/pause
        securityContext:
          privileged: true
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58063224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档