K8s配置用户身份认证

admin 2022年11月15日12:11:04评论77 views字数 4406阅读14分41秒阅读模式
K8s配置用户身份认证
配置用户身份认证
K8s配置用户身份认证

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


K8s配置用户身份认证


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


K8s配置用户身份认证



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

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}')


K8s配置用户身份认证


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


K8s配置用户身份认证



PART
02

kubeconfig认证



kubeconfig认证

03

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

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

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

K8s配置用户身份认证

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

- clusters (集群)

- users(用户)

- context(上下文)


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

kubectl config view

K8s配置用户身份认证

    以下开始配置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


K8s配置用户身份认证




设置用户

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


K8s配置用户身份认证




设置上下文信息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


K8s配置用户身份认证



使用kubeconfig文件进行认证

07

    使用kubectl命令行进行认证

kubectl --kubeconfig=config-demo get pods -A

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

K8s配置用户身份认证


可以在星球里跟我讨论交流。星球里有一千七百多位同样爱好安全技术的小伙伴一起交流!

K8s配置用户身份认证



参考:

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

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

原文始发于微信公众号(谢公子学安全):K8s配置用户身份认证

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年11月15日12:11:04
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   K8s配置用户身份认证http://cn-sec.com/archives/1410335.html

发表评论

匿名网友 填写信息