【发布时间】:2021-07-16 11:36:48
【问题描述】:
在 kubernetes(其中this one 对我来说是最透明的)上观看了有关 RBAC(基于角色的访问控制)的视频后,我已经按照这些步骤进行操作,但是在 k3s 上,而不是在 k8s 上,因为所有消息来源都暗示.据我所知(不工作),问题不在于实际的角色绑定过程,而在于 API 服务未确认的 x509 用户证书
$ kubectl get pods --kubeconfig userkubeconfig
错误:您必须登录到服务器(未经授权)
也没有在Rancher's wiki 上记录关于 K3s 的安全性(虽然记录在他们的 k8s 实现中)?虽然是为 rancher 2.x 本身描述的,但不确定这是我的实现问题,还是 k3s k8s 的问题.
$ kubectl version --short
Client Version: v1.20.5+k3s1
Server Version: v1.20.5+k3s1
重复流程,我的步骤如下:
- 获取 k3s ca 证书
这被描述为在 /etc/kubernetes/pki (k8s) 下,但是基于 this 似乎在 /var/lib/rancher/k3s/server/ tls/ (server-ca.crt & server-ca.key).
- 来自 ca 证书的 Gen 用户证书
#generate user key
$ openssl genrsa -out user.key 2048
#generate signing request from ca
openssl req -new -key user.key -out user.csr -subj "/CN=user/O=rbac"
# generate user.crt from this
openssl x509 -req -in user.csr -CA server-ca.crt -CAkey server-ca.key -CAcreateserial -out user.crt -days 365
- 根据证书为用户创建 kubeConfig 文件:
# Take user.crt and base64 encode to get encoded crt
cat user.crt | base64 -w0
# Take user.key and base64 encode to get encoded key
cat user.key | base64 -w0
- 创建的配置文件:
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: <server-ca.crt base64-encoded>
server: https://<k3s masterIP>:6443
name: home-pi4
contexts:
- context:
cluster: home-pi4
user: user
namespace: rbac
name: user-homepi4
current-context: user-homepi4
kind: Config
preferences: {}
users:
- name: user
user:
client-certificate-data: <user.crt base64-encoded>
client-key-data: <user.key base64-encoded>
- 设置角色和角色绑定(在指定的命名空间“rbac”内)
- 角色
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: user-rbac
namespace: rbac
rules:
- apiGroups:
- "*"
resources:
- pods
verbs:
- get
- list
- 角色绑定
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: user-rb
namespace: rbac
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: user-rbac
subjects:
apiGroup: rbac.authorization.k8s.io
kind: User
name: user
在这一切之后,我得到了快乐的时光……
$ kubectl get pods --kubeconfig userkubeconfig
error: You must be logged in to the server (Unauthorized)
有什么建议吗?
显然,stackOverflow question 提出了解决问题的方法,但是在 github 提要之后,它或多或少地归结为这里遵循的相同方法(除非我遗漏了什么)?
【问题讨论】:
-
您是否可以创建CertificateSigningRequest 而不是手动签署 csr ?
-
非常有趣的@matt_j,到目前为止还没有看到这方面的实现。我使用 serviceAccounts 解决了这个问题(我将详细说明),但也很想给你的建议一个古怪。似乎足够前卫。 (1) 创建密钥+CSR。 (2) 通过 kubectl 添加为 CSR 对象,并批准。 (3) 将 crt 添加到 kubeconfig.... 如果您知道有关此方法的任何好的教程,请您也分享一下吗?。
标签: kubernetes rancher k3s kubernetes-rbac