Kubernetes集群如何添加用户

55次阅读
没有评论

共计 3672 个字符,预计需要花费 10 分钟才能阅读完成。

本篇内容主要讲解“Kubernetes 集群如何添加用户”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让丸趣 TV 小编来带大家学习“Kubernetes 集群如何添加用户”吧!

Kubernetes 中的用户

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

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: ...

到此,相信大家对“Kubernetes 集群如何添加用户”有了更深的了解,不妨来实际操作一番吧!这里是丸趣 TV 网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计3672字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)