首页 > 其他分享 >如何快速在 Kubernetes 集群中新建用户

如何快速在 Kubernetes 集群中新建用户

时间:2023-08-20 15:13:01浏览次数:41  
标签:kubernetes Kubernetes 新建 用户 集群 User key tom K8S

如何快速在 Kubernetes 集群中新建用户

Se7en 奇妙的Linux世界 2023-08-19 11:59 发表于重庆 收录于合集 #Kubernetes274个 #云原生261个 #Docker197个 #程序员421个 公众号关注 「奇妙的 Linux 世界」
设为「星标」,每天带你玩转 Linux !
图片

 

Kubernetes中的用户

K8S中有两种用户(User)——服务账号(ServiceAccount)和普通意义上的用户(User) ServiceAccount是由K8S管理的,而User通常是在外部管理,K8S不存储用户列表——也就是说,添加/编辑/删除用户都是在外部进行,无需与K8S API交互,虽然K8S并不管理用户,但是在K8S接收API请求时,是可以认知到发出请求的用户的,实际上,所有对K8S的API请求都需要绑定身份信息(User或者ServiceAccount),这意味着,可以为User配置K8S集群中的请求权限。

奇妙的Linux世界 Linux 爱好者聚集地,各种硬核干货文章和新奇内容推荐,定期发放福利红包。快加入我们,一起愉快玩耍! 222篇原创内容 公众号

ServiceAccount是K8S内部资源,而User是独立于K8S之外的。从它们的本质可以看出:

  • User通常是人来使用,而ServiceAccount是某个服务/资源/程序使用的。
  • User独立在K8S之外,也就是说User是可以作用于全局的,在任何命名空间都可被认知,并且需要在全局唯一。
  • ServiceAccount作为K8S内部的某种资源,是存在于某个命名空间之中的,在不同命名空间中的同名ServiceAccount被认为是不同的资源。
  • K8S不会管理User,所以User的创建/编辑/注销等,需要依赖外部的管理机制。
  • 这里说的添加用户指的是普通意义上的用户,即存在于集群外的用户,为k8s的使用者。
  • 实际上叫做添加用户也不准确,用户早已存在,这里所做的只是使K8S能够认知此用户,并且控制此用户在集群内的权限。

用户验证

尽管K8S认知用户靠的只是用户的名字,但是只需要一个名字就能请求K8S的API显然是不合理的,所以依然需要验证此用户的身份,在K8S中,有以下几种验证方式:

  • X509客户端证书 客户端证书验证通过为API Server指定--client-ca-file=xxx选项启用,API Server通过此ca文件来验证API请求携带的客户端证书的有效性,一旦验证成功,API Server就会将客户端证书Subject里的CN属性作为此次请求的用户名。
  • 静态token文件 通过指定--token-auth-file=SOMEFILE选项来启用bearer token验证方式,引用的文件是一个包含了token,用户名,用户ID 的csv文件 请求时,带上Authorization: Bearer 31ada4fd-adec-460c-809a-9e56ceb75269头信息即可通过bearer token验证
  • 静态密码文件 通过指定--basic-auth-file=SOMEFILE选项启用密码验证,类似的,引用的文件时一个包含 密码,用户名,用户ID 的csv文件 请求时需要将Authorization头设置为Basic BASE64ENCODED(USER:PASSWORD)

这里只介绍客户端验证。

为用户生成证书

首先需要为此用户创建一个私钥:

openssl genrsa -out tom.key 2048

接着用此私钥创建一个csr(证书签名请求)文件,其中我们需要在subject里带上用户信息(CN为用户名,O为用户组),其中/O参数可以出现多次,即可以有多个用户组:

openssl req -new -key tom.key -out tom.csr -subj "/CN=tom/O=MGM"

找到K8S集群(API Server)的CA证书文件,其位置取决于安装集群的方式,通常会在/etc/kubernetes/pki/路径下,会有两个文件,一个是CA证书(ca.crt),一个是CA私钥(ca.key)。通过集群的CA证书和之前创建的csr文件,来为用户颁发证书:

openssl x509 -req -in tom.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out tom.crt -days 365

-CA和-CAkey参数需要指定集群CA证书所在位置,-days参数指定此证书的过期时间,这里为365天。

最后将证书(tom.crt)和私钥(tom.key)保存起来,这两个文件将被用来验证API请求。

为用户添加基于角色的访问控制(RBAC)

首先创造一个角色,该角色在acp命名空间下拥有所有权限:

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: acp
  name: acp-admin
rules:
- apiGroups: ["*"]
  resources: ["*"]
  verbs: ["*"]

将角色和用户tom绑定:

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: acp-admin-binding
  namespace: acp
subjects:
- kind: User
  name: tom
  apiGroup: ""
roleRef:
  kind: Role
  name: acp-admin
  apiGroup: ""

如yaml中所示,RoleBinding资源创建了一个 Role-User 之间的关系,roleRef节点指定此RoleBinding所引用的角色,subjects节点指定了此RoleBinding的受体,可以是User,也可以是前面说过的ServiceAccount,在这里只包含了名为 tom 的用户。参考:https://kubernetes.io/zh/docs/reference/access-authn-authz/rbac/#rolebinding-and-clusterrolebinding

为kubectl配置用户

现在我们想要通过kubectl以tom的身份来操作集群,需要将tom的认证信息添加进kubectl的配置,即~/.kube/config中,通过以下命令将用户tom的验证信息添加进kubectl的配置:

kubectl config set-credentials tom --client-certificate=tom.crt --client-key=tom.key 

添加完成后在~/.kube/config可以看到新增了:

users:
- name: tom
  user:
    client-certificate: /root/k8s/tom.crt
    client-key: /root/k8s/tom.key

用下面命令添加一个context配置:

  kubectl config set-context tom --cluster=kubernetes --namespace=acp --user=tom

添加完成后在~/.kube/config可以看到新增了:

contexts:
- context:
    cluster: kubernetes
    namespace: acp
    user: tom
  name: tom

通过kubectl config get-contexts命令也可以查到当前kubectl所配置的context信息:

[root@master1 k8s]# kubectl config get-contexts 
CURRENT   NAME                          CLUSTER      AUTHINFO           NAMESPACE
*         kubernetes-admin@kubernetes   kubernetes   kubernetes-admin   
          tom                           kubernetes   tom                acp

使用刚刚新创建的context:

#方式一:切换context
kubectl config use-context tom
#方式二:使用该context
kubectl --context=tom <命令>

在集群外部使用

将tom.crt/tom.key的内容用BASE64编码:

cat tom.crt | base64 --wrap=0
cat tom.key | base64 --wrap=0

将获取的编码后的文本复制进~/.kube/config文件中:

contexts:
- context:
    cluster: kubernetes
    namespace: acp
    user: tom
  name: tom
  
users:
- name: tom
  user:
    client-certificate-data: ...
    client-key-data: ...

 

本文转载自:「Se7en的架构笔记」,原文:https://url.hi-linux.com/9Nhgm,版权归原作者所有。欢迎投稿,投稿邮箱: [email protected]

图片

最近,我们建立了一个技术交流微信群。目前群里已加入了不少行业内的大神,有兴趣的同学可以加入和我们一起交流技术,在 「奇妙的 Linux 世界」 公众号直接回复 「加群」 邀请你入群。

图片

你可能还喜欢

点击下方图片即可阅读

图片

万字长文,带你搞懂 Kubernetes 网络模型

图片
点击上方图片,『美团|饿了么』外卖红包天天免费领

图片

更多有趣的互联网新鲜事,关注「奇妙的互联网」视频号全了解!

收录于合集 #Kubernetes  274个 上一篇玩转 Kubernetes 网络:16 张图带你从小白到专家 阅读 620 奇妙的Linux世界 ​ 喜欢此内容的人还喜欢   Dify: 轻松助你创建基于 GPT-4 的 AI 原生应用     奇妙的Linux世界 不看的原因   Kubernetes 在多云混合云环境的演进: 从单集群到多集群     奇妙的Linux世界 不看的原因   推荐一款高颜值键盘演示工具,助你优雅展示键盘操作     奇妙的Linux世界 不看的原因   精选留言 写留言
  • 奇妙的 Linux 世界   来自重庆置顶 回复   各位亲爱的读者,现在公众号更改了推送规则,如果您需要第一时间看到我们推送的好内容。 一定要记得给公众号星标,经常点赞、在看、转发、分享和留下您的评论[爱心][爱心][爱心] 如果你不会将公众号星标,可参考这里的方法:https://mp.weixin.qq.com/s/U17KxMIREF8S3IGPcgxc-w 真心感谢您一直以来的支持[玫瑰][玫瑰][玫瑰]    
已无更多数据      

标签:kubernetes,Kubernetes,新建,用户,集群,User,key,tom,K8S
From: https://www.cnblogs.com/cheyunhua/p/17644012.html

相关文章

  • 使用 DcokerCompose 搭建 mongodb 副本集群
    前面我们搭建了mongodb单机环境,但是在实际生产环境中,为了高可用,肯定需要搭建mongodb集群。mongodb集群主要分为两种:副本集群和分片集群。其中副本集群搭建容易,是生产环境中使用最多的集群,因此很有必要掌握。副本集群比较类似于mysql的主从复制,一主多从,每个节点的数据都是......
  • keepalived+LVS实现高可用性集群
    一、keepalived+LVS-DR实现高可用负载均衡当LVS负载均衡的主服务器出现故障时,keepalived会及时切换到备份服务器;同时会检测后端真实服务器是否存在故障无法访问,keepalived检测到该设备不可用时就会在集群的列表中删除该服务器节点,当服务器恢复时会再次自动添加进来。以此来实现集群......
  • Kubernetes 服务发布 Service labels和selector
    上节讲了创建无状态应用统一使用deployment的方式来去创建应用通过rs挂载你响应的pod,但是有一个问题不管是deployment还是replicaSet他们没有一个统一的ip地址,只有在每个pod上有IP,那我们要去访问一个对应的功能的时候,只能通过单个ip地址的方式去访问,这种方式会有问题,他无法实......
  • VS2015项目.net-framework-4.5.2升级或新建项目无法选择framework 4.6.2(解决办法)
    VS2015里面没有.NETFramework4.6.2VS2015默认安装的目标框架最高是.NETFramework4.6.1,但是我的项目里面某些NuGet软件包更新需要依赖.NETFramework4.6.2,项目就需要升级到目标框架.NETFramework4.6.2VS2015项目无法选择framework4.6.2的解决办法:第一步:系统环境安装.NET......
  • 以二进制文件安装K8S之部署etcd高可用集群
    概述前提条件:已经准备好CA根证书(etcd在制作CA证书时需要CA根证书),并且把CA根证书文件ca.key和ca.crt拷贝到3个etcd节点的/etc/kubernetes/pki目录下。3台主机的IP地址分别为192.168.3.135、192.168.3.136、192.168.3.137。要安装的etcd版本:v3.4.13-linux-amd64。安装etcd下载e......
  • 以二进制文件安装K8S之部署Master高可用集群
    如下以二进制文件方式部署安全的KubernetesMaster高可用集群,具体步骤如下:1.下载Kubernetes服务的二进制文件2.部署kube-apiserver服务3.创建客户端CA证书4.创建客户端连接kube-apiserver服务所需的kubeconfig配置文件5.部署kube-controller-manager服务6.部署kube-schedule......
  • 【Oracle Real Application Cluster Database】集群删除节点
    [grid@node01~]$srvctlstoplistener-nnode03[grid@node01~]$srvctlstopinstance-dcore-nnode03[oracle@node01~]$dbca-silent-deleteInstance-nodeListnode03-gdbNamecore-instanceNamecore3-sysDBAUserNamesys-sysDBAPassword1QAZ2wsx......
  • 【Oracle Real Application Cluster Database】集群增加节点
    [grid@node03~]$ssh-keygen[grid@node03~]$ssh-copy-id-i~/.ssh/id_rsa.pubgrid@node03[grid@node03~]$ssh-copy-id-i~/.ssh/id_rsa.pubgrid@node01[grid@node03~]$(sshnode01"date;hostname";sshnode03"date;hostname")SatAug19......
  • 老问题了:idea中使用maven archetype新建项目时卡住
    背景作为一个后端Java打工人,idea就是最重要的打饭工具。创建项目,熟悉吧,但是,这么多年下来,因为idea换了版本,电脑换了等等,我还是时不时遇到根据mavenarchetype新建maven项目卡住。没错,我说的就是下面这样的场景:总之吧,就是停在上面这里,不动了:[INFO]---maven-archetype-plugin:......
  • 谷歌云 | 最大限度地提高可靠性&降低成本:调整 Kubernetes 工作负载的大小
    【本文由CloudAce整理发布。CloudAce是谷歌云全球战略合作伙伴,拥有300多名工程师,也是谷歌最高级别合作伙伴,多次获得GoogleCloud合作伙伴奖。作为谷歌托管服务商,我们提供谷歌云、谷歌地图、谷歌办公套件、谷歌云认证培训服务。】您知道通过调整工作负载请求以更好地代表其实......