K8s配置用户身份认证

2022-11-29 16:14:46 浏览数 (3)

配置用户身份认证

在开启了 TLS 的集群中,每当与集群交互的时候少不了的是身份认证,使用 kubeconfig(即证书) 和 token 两种认证方式是最简单也最通用的认证方式,在 dashboard 的登录功能就可以使用这两种登录功能。 下文分两块以示例的方式来讲解两种登陆认证方式: · Token认证: - 创建新的namespace,为新的namespace创建用户,并分配新的namespace权限给用户 - 为集群的管理员(拥有所有namespace的管理权限权限)创建 token · kubeconfig认证:为 brand 命名空间下的 brand 用户创建 kubeconfig 文件

PART

01

Token认证

配置指定namespace的权限给指定用户

01

代码语言:javascript复制
#创建test命名空间
kubectl create namespace test
#在test命名空间创建serviceaccount:test-admin
kubectl create serviceaccount test-admin -n test
#查看指定命名空间下的serviceaccount
kubectl get serviceaccount -n test
#进行角色绑定,以下命令在test名称空间下创建一个rolebinding,名字叫做test-admin-rolebinding,将test名称空间下的test-admin账号通过clusterrole绑定集群角色cluster-admin,这样test-admin账号就有了cluster-admin角色的权限。最后--serviceaccount指定test-admin账号的权限只能限制在test名称空间下。
kubectl create rolebinding test-admin-rolebinding -n test --clusterrole=cluster-admin --serviceaccount=test:test-admin
#查看test命名空间下所有的secret
kubectl get secret -n test
#查看指定test-admin-token-7zhrw的token等信息
kubectl describe secret test-admin-token-7zhrw -n test

就可以使用获得的token登录dashboard了,该token只能访问test命名空间。

配置集群管理员的权限给用户

02

代码语言:javascript复制
# 在kube-system命名空间下创建名为dashboard-admin的serviceaccount
kubectl create serviceaccount dashboard-admin -n kube-system
# 创建名为dashboard-admin的clusterrolebinding,通过clusterrole绑定集群角色cluster-admin,这样指定账号就有了cluster-admin角色的权限。最后--serviceaccount指定dashboard-admin账号的权限应用在kube-system命名空间下。
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
# 获取用户Token
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

就可以使用获得的token登录dashboard了,该token能访问所有命名空间。

PART

02

kubeconfig认证

kubeconfig认证

03

kubeconfig文件保存了k8s集群的集群、用户、命名空间、认证的信息。kubectl命令使用kubeconfig文件来获取集群的信息,然后和API server进行通讯。

注意:用于配置对集群的访问的文件称为kubecconfig文件。也就是说,kubeconfig文件中包含的内容是集群的配置。但是,并不是必须有个文件名字叫kubeconfig,而是指定格式的文件。

默认情况下,kubectl命令从$HOME/.kube目录下查找一个名字叫做config的文件。可以通过KUBECONFIG环境变量或者--kubeconfig参数来指定其他的kubeconfig文件。

kubeconfig中主要由如下部分组成:

- clusters (集群)

- users(用户)

- context(上下文)

执行如下命令查看kubeconfig的配置,得到的配置可能是来自一个kubeconfig文件,也可能是来自多个kubeconfig文件合并的结果。

代码语言:javascript复制
kubectl config view

以下开始配置kubeconfig文件,指定--kubeconfig参数后,所有的配置都会写到对应的文件中。如果不指定--kubeconfig参数那么就会将配置文件写到~/.kube/config这个文件中。

设置集群

04

代码语言:javascript复制
#集群有CA认证,并且将证书的输入嵌入到配置文件中,--certificate-authority后面是ca证书的路径,需要确保这个证书是存在的。
kubectl config --kubeconfig=config-demo set-cluster development --server=https://172.16.200.70:6443/ --embed-certs --certificate-authority=ca.crt
#集群没有证书的
kubectl config --kubeconfig=config-demo set-cluster development --server=https://172.16.200.70:6443/
#集群有证书,但是证书验证的
kubectl config --kubeconfig=config-demo set-cluster development --server=https://172.16.200.70:6443/ --insecure-skip-tls-verify
#删除集群
kubectl config --kubeconfig=config-demo unset clusters.development

设置用户

05

代码语言:javascript复制
#设置用户,使用客户端的证书和客户端密钥,并且将证书数据嵌入到配置文件中。注意:客户端证书和key必须要存在。
kubectl config --kubeconfig=config-demo set-credentials developer --client-certificate=fake-cert-file --client-key=fake-key-seefile --embed-certs=true
#设置用户,使用用户名和密码
kubectl config --kubeconfig=config-demo set-credentials developer --username=hack --password=123456
#设置用户,使用Token
kubectl config --kubeconfig=config-demo set-credentials developer --token=Token
#删除用户
kubectl config --kubeconfig=config-demo unset users.developer

设置上下文信息context

06

在kubeconfig中,context中将访问一个集群的参数进行分组。访问这个context名称就是访问这个参数组。context就是一组信息的别名。context将集群、命名空间、用户进行分组。每个context对应一个环境信息。

每个context都有3个参数:

- cluster (集群)

- namespace(命名空间)

- user(用户)

默认情况下,kubectl命令从current context中来获取参数,然后与集群进行通讯。

代码语言:javascript复制
#设置上下文信息context,在dev-fronted这个context以developer1用户的信息访问developement1集群的frontend命名空间。
kubectl config --kubeconfig=config-demo set-context dev-frontend --cluster=development1 --namespace=frontend --user=developer1
#设置上下文信息context,在dev-storage这个context以developer2用户的信息访问developement2集群的storage命名空间。
kubectl config --kubeconfig=config-demo set-context dev-storage --cluster=development2 --namespace=storage --user=developer2
#查看配置中所有的context
kubectl config --kubeconfig=config-demo get-contexts
#设置当前的context
kubectl config --kubeconfig=config-demo use-context dev-frontend
#查看当前的context
kubectl config --kubeconfig=config-demo current-context
#只查看和当前context有关的配置信息
kubectl config --kubeconfig=config-demo view --minify
#删除context
kubectl config --kubeconfig=config-demo delete-context dev-storage

使用kubeconfig文件进行认证

07

使用kubectl命令行进行认证

代码语言:javascript复制
kubectl --kubeconfig=config-demo get pods -A

也可以在dashboard窗口勾选Kubeconfig,然后选择config-demo文件进行认证。

参考:

https://www.kancloud.cn/chriswenwu/g_k8s/1006519

https://www.jb51.net/article/234998.htm

0 人点赞