首页 > 解决方案 > RBAC 与 Kubernetes API Server 基于 URL 的访问

问题描述

我正在通过 HTTP 客户端访问 Kubernetes API。我希望能够访问一些资源。例如,我应该能够列出作业,但不能列出 pod。

apiVersion: v1
kind: ServiceAccount
metadata:
  name: job-runner    
---    
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: job-runner
rules:
- apiGroups: ["batch", "extensions"]
  resources: ["jobs"]
  verbs: ["get", "list", "watch"]    
---    
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: job-runner
  namespace: default
subjects:
- kind: ServiceAccount
  name: job-runner # Name of the ServiceAccount
  namespace: default
roleRef:
  kind: Role # This must be Role or ClusterRole
  name: job-runner # This must match the name of the Role or ClusterRole you wish to bind to
  apiGroup: rbac.authorization.k8s.io

我通过执行以下操作获取此服务帐户的令牌:

kubectl get secret `kubectl get sa job-runner -o json | jq -r '.secrets[0].name'` -o json | jq -r '.data.token' | base64 -D

使用这个令牌,我运行这些:

curl https://<k8s master ip>/api/v1/namespaces/default/pods --header "Authorization: Bearer <token>" --insecure
curl https://<k8s master ip>/apis/batch/v1/namespace/default/jobs --header "Authorization: Bearer <token>" --insecure

我希望第一个请求的访问被拒绝,而第二个请求的结果有效。但是,我在这两种情况下都得到了结果。

我在这里错过了什么吗?提前致谢。

标签: kubernetesrbackubernetes-apiserver

解决方案


推荐阅读