创建用户认证授权的 kubeconfig 文件
阅读原文时间:2023年07月08日阅读:4

创建用户认证授权的 kubeconfig 文件

当我们安装好集群后,如果想要把 kubectl 命令交给用户使用,就不得不对用户的身份进行认证和对其权限做出限制。

下面以创建一个 cby 用户并将其绑定到 cby 和 chenby 的 namespace 为例说明。

详细见:https://github.com/cby-chen/Kubernetes#23%E5%88%9B%E5%BB%BA%E8%AF%81%E4%B9%A6%E7%9B%B8%E5%85%B3%E6%96%87%E4%BB%B6

cat&nbsp;>&nbsp;ca-config.json&nbsp;<<&nbsp;EOF&nbsp;
{
&nbsp;&nbsp;"signing":&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;"default":&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"expiry":&nbsp;"876000h"
&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;"profiles":&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"kubernetes":&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"usages":&nbsp;[
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"signing",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"key&nbsp;encipherment",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"server&nbsp;auth",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"client&nbsp;auth"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;],
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"expiry":&nbsp;"876000h"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;}
}
EOF

cat&nbsp;>&nbsp;cby-csr.json&nbsp;<<&nbsp;EOF&nbsp;
{
&nbsp;&nbsp;"CN":&nbsp;"cby",
&nbsp;&nbsp;"key":&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;"algo":&nbsp;"rsa",
&nbsp;&nbsp;&nbsp;&nbsp;"size":&nbsp;2048
&nbsp;&nbsp;},
&nbsp;&nbsp;"names":&nbsp;[
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"C":&nbsp;"CN",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"ST":&nbsp;"Beijing",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"L":&nbsp;"Beijing",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"O":&nbsp;"system:masters",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"OU":&nbsp;"Kubernetes-manual"
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;]
}
EOF

cfssl&nbsp;gencert&nbsp;\
&nbsp;&nbsp;&nbsp;-ca=/etc/kubernetes/pki/ca.pem&nbsp;\
&nbsp;&nbsp;&nbsp;-ca-key=/etc/kubernetes/pki/ca-key.pem&nbsp;\
&nbsp;&nbsp;&nbsp;-config=ca-config.json&nbsp;\
&nbsp;&nbsp;&nbsp;-profile=kubernetes&nbsp;\
&nbsp;&nbsp;&nbsp;cby-csr.json&nbsp;|&nbsp;cfssljson&nbsp;-bare&nbsp;/etc/kubernetes/pki/cby

ll&nbsp;/etc/kubernetes/pki/cby*
-rw-r--r--&nbsp;1&nbsp;root&nbsp;root&nbsp;1021&nbsp;May&nbsp;25&nbsp;17:36&nbsp;/etc/kubernetes/pki/cby.csr
-rw-------&nbsp;1&nbsp;root&nbsp;root&nbsp;1679&nbsp;May&nbsp;25&nbsp;17:36&nbsp;/etc/kubernetes/pki/cby-key.pem
-rw-r--r--&nbsp;1&nbsp;root&nbsp;root&nbsp;1440&nbsp;May&nbsp;25&nbsp;17:36&nbsp;/etc/kubernetes/pki/cby.pem

kubectl&nbsp;config&nbsp;set-cluster&nbsp;kubernetes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\
&nbsp;&nbsp;--certificate-authority=/etc/kubernetes/pki/ca.pem&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\
&nbsp;&nbsp;--embed-certs=true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\
&nbsp;&nbsp;--server=https://10.0.0.89:8443&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\
&nbsp;&nbsp;--kubeconfig=/etc/kubernetes/cby.kubeconfig

kubectl&nbsp;config&nbsp;set-credentials&nbsp;cby&nbsp;&nbsp;\
&nbsp;&nbsp;--client-certificate=/etc/kubernetes/pki/cby.pem&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\
&nbsp;&nbsp;--client-key=/etc/kubernetes/pki/cby-key.pem&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\
&nbsp;&nbsp;--embed-certs=true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\
&nbsp;&nbsp;--kubeconfig=/etc/kubernetes/cby.kubeconfig

kubectl&nbsp;config&nbsp;set-context&nbsp;cby@kubernetes&nbsp;&nbsp;&nbsp;&nbsp;\
&nbsp;&nbsp;--cluster=kubernetes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\
&nbsp;&nbsp;--user=cby&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\
&nbsp;&nbsp;--kubeconfig=/etc/kubernetes/cby.kubeconfig

kubectl&nbsp;config&nbsp;use-context&nbsp;cby@kubernetes&nbsp;&nbsp;--kubeconfig=/etc/kubernetes/cby.kubeconfig

useradd&nbsp;cby
su&nbsp;-&nbsp;cby
mkdir&nbsp;.kube/
exit&nbsp;
cp&nbsp;/etc/kubernetes/cby.kubeconfig&nbsp;&nbsp;/home/cby/.kube/config
chown&nbsp;cby.cby&nbsp;/home/cby/.kube/config

需要使用 RBAC创建角色绑定以将该用户的行为限制在某个或某几个 namespace 空间范围内

kubectl&nbsp;create&nbsp;namespace&nbsp;cby
kubectl&nbsp;create&nbsp;namespace&nbsp;chenby
kubectl&nbsp;create&nbsp;rolebinding&nbsp;cby&nbsp;--clusterrole=cluster-admin&nbsp;--user=cby&nbsp;--namespace=cby
kubectl&nbsp;create&nbsp;rolebinding&nbsp;cby&nbsp;--clusterrole=cluster-admin&nbsp;--user=cby&nbsp;--namespace=chenby

kubectl&nbsp;&nbsp;describe&nbsp;-n&nbsp;chenby&nbsp;rolebindings.rbac.authorization.k8s.io&nbsp;cby&nbsp;
Name:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cby
Labels:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<none>
Annotations:&nbsp;&nbsp;<none>
Role:
&nbsp;&nbsp;Kind:&nbsp;&nbsp;ClusterRole
&nbsp;&nbsp;Name:&nbsp;&nbsp;cluster-admin
Subjects:
&nbsp;&nbsp;Kind&nbsp;&nbsp;Name&nbsp;&nbsp;Namespace
&nbsp;&nbsp;----&nbsp;&nbsp;----&nbsp;&nbsp;---------
&nbsp;&nbsp;User&nbsp;&nbsp;cby&nbsp;&nbsp;&nbsp;

kubectl&nbsp;&nbsp;describe&nbsp;-n&nbsp;cby&nbsp;rolebindings.rbac.authorization.k8s.io&nbsp;cby&nbsp;
Name:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cby
Labels:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<none>
Annotations:&nbsp;&nbsp;<none>
Role:
&nbsp;&nbsp;Kind:&nbsp;&nbsp;ClusterRole
&nbsp;&nbsp;Name:&nbsp;&nbsp;cluster-admin
Subjects:
&nbsp;&nbsp;Kind&nbsp;&nbsp;Name&nbsp;&nbsp;Namespace
&nbsp;&nbsp;----&nbsp;&nbsp;----&nbsp;&nbsp;---------
&nbsp;&nbsp;User&nbsp;&nbsp;cby&nbsp;&nbsp;&nbsp;

su&nbsp;-&nbsp;cby

kubectl&nbsp;config&nbsp;get-contexts
CURRENT&nbsp;&nbsp;&nbsp;NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLUSTER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AUTHINFO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NAMESPACE

*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kubernetes-cby@kubernetes&nbsp;&nbsp;&nbsp;kubernetes&nbsp;&nbsp;&nbsp;kubernetes-cby&nbsp;&nbsp;&nbsp;cby

[cby@k8s-master01&nbsp;~]$&nbsp;kubectl&nbsp;get&nbsp;pods&nbsp;--namespace&nbsp;default
Error&nbsp;from&nbsp;server&nbsp;(Forbidden):&nbsp;pods&nbsp;is&nbsp;forbidden:&nbsp;User&nbsp;"cby"&nbsp;cannot&nbsp;list&nbsp;resource&nbsp;"pods"&nbsp;in&nbsp;API&nbsp;group&nbsp;""&nbsp;in&nbsp;the&nbsp;namespace&nbsp;"default"
[cby@k8s-master01&nbsp;~]$

这样 cby 用户对 cby 和 chenby 两个 namespace 具有完全访问权限。

[cby@k8s-master01&nbsp;~]$&nbsp;kubectl&nbsp;get&nbsp;pods&nbsp;--namespace&nbsp;cby
No&nbsp;resources&nbsp;found&nbsp;in&nbsp;cby&nbsp;namespace.
[cby@k8s-master01&nbsp;~]$&nbsp;kubectl&nbsp;get&nbsp;pods&nbsp;--namespace&nbsp;chenby
No&nbsp;resources&nbsp;found&nbsp;in&nbsp;chenby&nbsp;namespace.

https://www.oiox.cn/
https://www.chenby.cn/
https://cby-chen.github.io/
https://blog.csdn.net/qq_33921750
https://my.oschina.net/u/3981543
https://www.zhihu.com/people/chen-bu-yun-2
https://segmentfault.com/u/hppyvyv6/articles
https://juejin.cn/user/3315782802482007
https://cloud.tencent.com/developer/column/93230
https://www.jianshu.com/u/0f894314ae2c
https://www.toutiao.com/c/user/token/MS4wLjABAAAAeqOrhjsoRZSj7iBJbjLJyMwYT5D0mLOgCoo4pEmpr4A/
CSDN、GitHub、知乎、开源中国、思否、掘金、简书、腾讯云、今日头条、个人博客、全网可搜《小陈运维》
文章主要发布于微信公众号:《Linux运维交流社区》

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章