kubernetes - 如何在 k8s 上为服务帐户创建客户端证书和客户端密钥
问题描述
我正在试验服务帐户和用户帐户。
我可以为用户帐户创建 CA / 密钥,以便能够通过 Server-API 验证用户,但我无法为服务帐户做同样的事情。
我创建了一个 kubeconfig 文件:
apiVersion: v1
clusters:
- cluster:
certificate-authority: ca.crt
server: https://ip:6443
name: kubernetes
contexts:
- context:
cluster: kubernetes
namespace: namespace-test
user: test
name: test-kubernetes
current-context: "test-kubernetes"
kind: Config
preferences: {}
users:
- name: test
user:
client-certificate: test.crt
client-key: test.key
当我使用这个 kubeconfig 文件并基于 RBAC 规则时,我可以访问 Server-Api:
$ kubectl --kubeconfig /tmp/rbac-test/test.kubeconfig get pods
No resources found in namespace-test namespace.
我创建名称空间、服务帐户等的文件示例。
apiVersion: v1
kind: Namespace
metadata:
name: namespace-test
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
user: test
name: test
namespace: namespace-test
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
labels:
user: test
name: role-test
namespace: namespace-test
rules:
- apiGroups: [""]
resources: ["*"]
verbs: ["*"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
labels:
user: test
name: rolebinding-test
namespace: namespace-test
subjects:
- kind: User
name: test
roleRef:
kind: Role
name: role-test
apiGroup: rbac.authorization.k8s.io
当我将用户修改为服务帐户用户时,我失去了对命名空间的控制:
subjects:
- kind: ServiceAccount
然后我试着拿到豆荚,但我被禁止了:
$ kubectl --kubeconfig /tmp/rbac-test/test.kubeconfig get pods
Error from server (Forbidden): pods is forbidden: User "test" cannot list resource "pods" in API group "" in the namespace "namespace-test"
但是当我检查服务帐户是否可以获取 pod 时,它是有效的:
$ kubectl auth can-i get pods --as system:serviceaccount:namespace-test:test -n namespace-test
yes
有没有办法为服务帐户用户检索或创建 CA?我希望能够通过 Server-Api 连接到集群外部,同时使用服务帐户而不是普通用户。
我想使用服务帐户而不是用户的原因是能够通过具有令牌验证的不同用户使用仪表板。
解决方案
推荐阅读
- c++ - C++ 错误:在抛出 'std::bad_alloc' 的实例后终止调用
- python-3.x - 正在访问已删除的 css 文件并且 Web 应用程序正在运行这些文件
- java - 无法使用 Firebase 中的 Glide 库加载个人资料图片
- c# - 使用 DirectLine 访问机器人框架的本地实例
- bash - 使用 Bash 脚本和 mosquitto_sub 将使用什么代码来执行基于 MQTT 消息真假的脚本?
- amazon-ecs - 将 bitbucket 管道中的数据作为卷推送到 ECS
- xamarin - 在 Xamarin Forms 中播放视频
- php - 内存耗尽,需要上传大视频文件
- swift - 向 SCNSphere 添加文本
- javascript - 承诺捕获问题