前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >K8s配置用户身份认证

K8s配置用户身份认证

作者头像
谢公子
发布2022-11-29 16:14:46
1.2K0
发布2022-11-29 16:14:46
举报
文章被收录于专栏:谢公子学安全谢公子学安全

配置用户身份认证

在开启了 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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-11-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 谢公子学安全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档