Kubernetes API : cannot list resource "pods" in API group ""

标签 kubernetes

我正在尝试制作一个 pod 作为其他 pod 的 Controller ,基本上是根据需要创建和停止它们。我最初创建了一个 ServiceAccount、一个角色、一个 RoleBinding 和一个简单的 Alpine 容器,我可以使用 curl 进行测试,都在一个新的命名空间中。这是我所有这些的 YAML 文件:

apiVersion: v1
kind: Namespace
metadata:
    name: nfv
    labels:
        name: nfv
---
apiVersion: v1
kind: ServiceAccount
metadata:
    name: nfv-svc
    namespace: nfv
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
    name: nfv-role
    namespace: nfv
rules:
    - apiGroups:
        - ''
      resources:
        - 'pods'
      verbs:
        - 'create'
        - 'delete'
        - 'get'
        - 'list'
        - 'patch'
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
    name: nfv-rolebind
subjects:
    - kind: ServiceAccount
      name: nfv-svc
      namespace: nfv
roleRef:
    kind: Role
    name: nfv-role
    apiGroup: rbac.authorization.k8s.io
---
apiVersion: v1
kind: Pod
metadata:
    name: sdn-test
    namespace: nfv
spec:
    serviceAccountName: nfv-svc
    containers:
        - image: alpine:3.9
          name: sdn-test-container
          command:
              - sleep
              - "10000"
然后我附加到 alpine 测试容器并执行以下操作:
apk add --update curl
CA_CERT=/run/secrets/kubernetes.io/serviceaccount/ca.crt
NAMESPACE=$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace)
TOKEN=$(cat /run/secrets/kubernetes.io/serviceaccount/token)
curl -H "Authorization: Bearer $TOKEN" --cacert $CA_CERT https://kubernetes.default/api/v1/namespaces/$NAMESPACE/pods
然后我得到以下输出:
{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {
    
  },
  "status": "Failure",
  "message": "pods is forbidden: User \"system:serviceaccount:nfv:nfv-svc\" cannot list resource \"pods\" in API group \"\" in the namespace \"nfv\"",
  "reason": "Forbidden",
  "details": {
    "kind": "pods"
  },
  "code": 403
}
Role应该有足够的权限来列出我的命名空间中的 pod,那么为什么它不起作用?我错过了什么?我在 Ubuntu 16.04 上使用 Kubernetes v1.18.2。

最佳答案

需要有一个命名空间namespace: nfvRoleBinding因为它是一个命名空间范围的资源。

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
    name: nfv-rolebind
    namespace: nfv
subjects:
    - kind: ServiceAccount
      name: nfv-svc
      namespace: nfv
roleRef:
    kind: Role
    name: nfv-role
    apiGroup: rbac.authorization.k8s.io
要验证权限,您可以使用以下命令
kubectl auth can-i list pods --as=system:serviceaccount:nfv:nfv-svc -n nfv
yes

关于Kubernetes API : cannot list resource "pods" in API group "",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62589073/

相关文章:

kubernetes - 如何在 Kubernetes list 中进行变量替换?

java - PostgreSQL JDBC 连接问题

google-chrome - Kubernetes 特权容器和功能

kubernetes - 如何使用kubectl针对特定上下文运行命令?

kubernetes - 如何在 Rancher 中启用挂载传播 - Kubernetes 功能门?

kubernetes - 在 k8s pod 中应用任务

ssl - kubernetes + 入口 Controller + letsencrypt + 阻止的混合内容

kubernetes - 我如何通过基本身份验证访问GCE上的Kubernetes集群的静态API

gitlab - Kubernetes 持久卷调整大小

kubernetes - 如何允许外部进程连接k8s的Pod?