kubernetes - Kubernetes API:无法在 API 组“”中列出资源“pod”
问题描述
我正在尝试制作一个 pod 作为其他 pod 的控制器,基本上是根据需要创建和停止它们。我最初创建了一个 ServiceAccount、一个 Role、一个 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: nfv
,RoleBinding
因为它是一个命名空间范围的资源。
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
推荐阅读
- stata - Stata tabout 按组连续和分类
- python - 从列表中的字符串中条带化元素(python)
- c# - 使用 Async(msg) 发送邮件需要很长时间 - 如何在后台运行它?
- mysql - Kubernetes 中待处理的 mysql 服务
- google-earth-engine - Earth Engine:使用字典在特征集合中每年显示
- python - 如何使用 python 仅解析 XML 中的某些信息
- c - 动态分配字符串以包含 C 中的用户输入
- arrays - Python image_dataset_loader 模块实例不一致
- oracle - Oracle 的 V$ 视图定义的其余部分在哪里?
- java - 我应该如何使用 Spring Data MongoDB 计算由另一个分组的字段的总和