K8s配置用户身份认证
2022-11-15 09:2:17 Author: 谢公子学安全(查看原文) 阅读量:12 收藏

配置用户身份认证

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

PART
01
Token认证
配置指定namespace的权限给指定用户
01
#创建test命名空间kubectl create namespace test#在test命名空间创建serviceaccount:test-adminkubectl create serviceaccount test-admin -n test#查看指定命名空间下的serviceaccountkubectl 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命名空间下所有的secretkubectl get secret -n test#查看指定test-admin-token-7zhrw的token等信息kubectl describe secret test-admin-token-7zhrw -n test

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

配置集群管理员的权限给用户
02
# 在kube-system命名空间下创建名为dashboard-admin的serviceaccountkubectl 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# 获取用户Tokenkubectl 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文件合并的结果。

kubectl config view

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

设置集群
04
#集群有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
#设置用户,使用客户端的证书和客户端密钥,并且将证书数据嵌入到配置文件中。注意:客户端证书和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#设置用户,使用Tokenkubectl 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中来获取参数,然后与集群进行通讯。

#设置上下文信息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#查看配置中所有的contextkubectl config --kubeconfig=config-demo get-contexts#设置当前的contextkubectl config --kubeconfig=config-demo use-context dev-frontend#查看当前的contextkubectl config --kubeconfig=config-demo current-context#只查看和当前context有关的配置信息kubectl config --kubeconfig=config-demo view --minify#删除contextkubectl config --kubeconfig=config-demo delete-context dev-storage

使用kubeconfig文件进行认证
07

    使用kubectl命令行进行认证

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


文章来源: http://mp.weixin.qq.com/s?__biz=MzI2NDQyNzg1OA==&mid=2247491368&idx=1&sn=c433e7be0e810dc880869fb06427978b&chksm=eaad9f15ddda160382ff1a48f0c6236f9527cdc50cc0c04422c5a58fb6c330389146cab9c1d5#rd
如有侵权请联系:admin#unsafe.sh