[Kubernetes] 如何创建集群连接用户
目录
你好!
我是Beyond大阪事务所的拉面大王Hide。
这是我的第 14 篇文章。
上次,我写了有关如何使用 Cloudflare Workers 配置基本身份验证的文章!
设置相对简单,但如果设置错误,可能无法查看该站点。
如果您有兴趣,请查看一下,我们会用通俗易懂的方式介绍设置方法,以免失败。
概述
我想创建一个单独的用户来连接到 kubernetes 集群,但我不知道如何操作。 。 。 。
我想调整赋予用户的权限,但我真的不知道。 。 。
哦?这已经满了吗?
你有没有想过类似上面的事情?
我还知道可以创建一个单独的用户来连接到集群,但我越研究它,它就变得越困难。 。 。
经过一番尝试,我终于能够创建了,所以如果你想创建一个,请参考一下!
我们来试试吧! !
防范措施
此过程不涵盖基本 Kubernetes 概念或资源。
此外,对于每个云中的托管 Kubernetes 集群(例如 EKS 或 GKE),添加用户的方法可能会有所不同。
如果您在云中运行 Kubernetes,请检查每个参考。
程序
1. 创建密钥并对其进行编码
1-1.创建私钥/公钥
*请在{username}中输入您的用户名
cd .kube/ openssl genrsa -out {用户名}.key 2048 openssl req -new -key {用户名}.key -out {用户名}.csr -subj "/CN={用户名}"
示例:如果用户名是 example-test
openssl genrsa -out example-test.key 2048 openssl req -new -key example-test.key -out example-test.csr -subj "/CN=example-test"
1-2.使用base64编码
cat {用户名}.csr | tr -d "\n"
⇒将输出编码值,因此请记下它。
例子:
[example-test@bastion01 ~]$ cat example-test.csr | tr -d "\n" xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
2.应用并配置创建的csr
2-1 创建.yaml文件
将用户名放入
{ UserName
*将编码值放入 {EncodeValue}
vi {UserName}-csr.yaml apiVersion:certificates.k8s.io/v1 kind:CertificateSigningRequest 元数据:名称:{UserName} 规范:请求:{EncodeValue} 签名者名称:kubernetes.io/kube-apiserver-client 用法:- 客户端身份验证
例子:
vi example-test-csr.yaml apiVersion:certificates.k8s.io/v1 kind:CertificateSigningRequest 元数据:名称:example-test 规范:请求:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 签名者名称:kubernetes.io/kube-apiserver-client 用法:- 客户端身份验证
2-2 应用.yaml文件
kubectl apply -f {用户名}-csr.yaml
例子:
[example-test@bastion01 ~]$ kubectl apply -f example-test-csr.yamlcertificatesigningrequest.certificates.k8s.io/example-test 创建
2-3.检查是否已应用
*状态为 Pending,因为 csr 尚未获得批准 *请
注意输出到 NAME 的值
kubectl 获取 CSR
例子:
[example-test@bastion01 ~]$ kubectl get csr NAME AGE SIGNERNAME REQUESTOR REQUESTEDDURATION CONDITION example-test 12s kubernetes.io/kube-apiserver-client xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 〈无〉 待定
2-4.批准CSR
*请输入您之前在 {CsrName} 中记录的 NAME 值
kubectl 证书批准 {CsrName}
例子:
[example-test@bastion01 ~]$ kubectl 证书批准示例-测试certificatesigningrequest.certificates.k8s.io/example-test 批准
2-5.检查csr的批准情况
*如果 CONDITION 栏显示已批准,则表示已批准。
kubectl 获取 CSR
例子:
[example-test@bastion01 ~]$ kubectl get csr NAME AGE SIGNERNAME REQUESTOR REQUESTEDDURATION CONDITION example-test 14m kubernetes.io/kube-apiserver-client xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 〈无〉 已批准,已发布
2-6.创建crt
*请输入您之前在 {CsrName} 中记录的 NAME 值
kubectl get csr {CrtName} -o jsonpath='{.status.certificate}' | base64 -d > {CrtName}.crt
3.添加用户和上下文
3-1.添加用户和证书信息
*请在{UserName}中输入您的用户名
kubectl config set-credentials {用户名} --client-key={用户名}.key --client-certificate={用户名}.crt --embed-certs=true
例子:
[example-test@bastion01 ~]$ kubectl config set-credentials example-test --client-key=example-test.key --client-certificate=example-test.crt --embed-certs=true 用户“example-测试”
*设置将自动添加到 .kube/config 中,如下所示。
猫 ~/.kube/config
- 名称:示例测试用户:客户端证书数据:xxxxxxxxxxxxxxxxxxxxx 客户端密钥数据:xxxxxxxxxxxxxxxxxxxxxx
3-2. 记住集群名称
猫 ~/.kube/config
示例:
*name 是集群名称
api版本:v1 集群:- 集群:证书颁发机构数据:xxxxxxxxxxxxxxxxxxxxxxx 服务器:https://xxxxxxxxxxxxxxxxxxxxxxxx 名称:xxxxxxxxxxxxxxx
3-3.添加到上下文
*请在{UserName}中输入用户名
*请在{ClusterName}中输入您之前记下的值
kubectl config set-context {用户名} --cluster={集群名} --user={用户名}
例子:
[example-test@example-testbastion01 ~]$ kubectl config set-context example-test --cluster=xxxxxxxxxxxx --user=example-test 创建上下文“example-test”。
*设置将自动添加到 .kube/config 中,如下所示。
上下文: - 上下文:集群:xxxxxxxxxxxx 用户:xxxxxxxxxxxxxxx 名称:xxxxxxxxxxxxxxx - 上下文:集群:xxxxxxxxxxxxxx 用户:example-test 名称:example-test
4.授予权限
创建新的集群角色并赋予其任意权限
1.创建ClusterRole
*请在{ClusterRoleName}中输入集群角色名称
*{VerbName} ・请参考下表设置{ResourceName}
kubectl create clusterrole {ClusterRoleName} --verb={VerbName} --resource={ResourceName}
*主要资源名称和动词名称列表
资源名称 | 名称空间 | 节点 | 豆荚 | 服务 | 入口 | 秘密 | 配置映射 |
动词名称 | 评论 |
得到 | 获取资源 |
列表 | 获取资源列表 |
创造 | 创建资源 |
更新 | 更新资源 |
修补 | 部分更新资源 |
删除 | 删除资源 |
删除集合 | 批量删除资源 |
手表 | 监控资源变化 |
示例:Pod 的只读权限
[example-test@bastion01 ~]$ kubectl create clusterrole pod-readonly --verb=get,list,watch --resource=pods clusterrole.rbac.authorization.k8s.io/pod-readonly 创建
2. 检查您创建的集群角色
*请在{ClusterRoleName}中输入集群角色名称
kubectl 描述 clusterrole {ClusterRoleName}
例子:
[example-test@bastion01 ~]$ kubectl 描述 clusterrole pod-readonly 名称:pod-readonly 标签:<none>注释:<none> PolicyRule:资源 非资源 URL 资源名称 动词 --------- ----------------- -------------- ----- pods[][获取列表观看]
3. 为用户授予已创建集群角色的权限
*请在{ClusterRoleName}中输入集群角色绑定名称
*请在{UserName}中输入用户名
kubectl create clusterrolebinding {ClusterRoleBindingName} --clusterrole={ClusterRoleName} --user={UserName}
例子:
[example-test@bastion01 ~]$ kubectl 创建 clusterrolebinding pod-readonly-binding --clusterrole=pod-readonly --user=example-test clusterrolebinding.rbac.authorization.k8s.io/pod-readonly-binding 创建
4.检查授予权限
*如果Subjects中包含user中指定的用户名,则没有问题
kubectl 描述集群角色绑定 {ClusterRoleBindingName}
例子:
[example-test@bastion01 ~]$ kubectl 描述 clusterrolebinding pod-readonly-binding 名称:pod-readonly-binding 标签:<none>注释:<none>角色:种类:ClusterRole 名称:pod-readonly-binding 主题:种类名称命名空间 ---- ---- -------- 用户 example-test
授予预定义集群角色时
1. 向用户授予预定义的集群角色权限
* {ClusterRoleName} 为集群角色绑定名称
* {ClusterRoleName} 为集群角色名称
* {UserName} 为用户名 请填写
kubectl create clusterrolebinding {ClusterRoleBindingName} --clusterrole={ClusterRoleName} --user={UserName}
例子:
[example-test@bastion01 ~]$ kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin --user=example-test clusterrolebinding.rbac.authorization.k8s.io/cluster-admin-binding 创建
*预定义集群角色列表
默认集群角色 | 默认 ClusterRoleBinding | 解释 |
集群管理 | 系统:大师组 | 允许超级用户对任何资源执行任何操作。与 ClusterRoleBinding 一起使用时,它使您可以完全控制集群内和所有命名空间内的所有资源。当与 RoleBinding 一起使用时,它使您可以完全控制 RoleBinding 的命名空间内的所有资源,包括命名空间本身。 |
行政 | 没有任何 | 授予管理员访问权限,旨在使用 RoleBinding 在命名空间内授予。与 RoleBinding 一起使用时,它允许对命名空间中的大多数资源进行读/写访问,包括在命名空间中创建角色和 RoleBinding 的能力。 此角色不授予对资源配额或命名空间本身的写访问权限。 |
编辑 | 没有任何 | 允许对命名空间内的大多数对象进行读/写访问。此角色不允许查看或修改角色或角色绑定。但是,该 Role 可以访问 Secrets 以作为 Namespace 中的任意 ServiceAccount 运行 Pod,因此可用于获取 Namespace 中任意 ServiceAccount 的 API 访问级别。 |
看法 | 没有任何 | 授予只读访问权限以查看命名空间内的大多数对象。无法显示 Role 或 RoleBinding。此角色不允许查看 Secrets,因为读取 Secrets 的内容可以访问命名空间的 ServiceAccount 凭据。这允许作为命名空间内的任何 ServiceAccount 进行 API 访问(一种权限升级形式)。 |
2.确认授予权限
*如果Subjects包含user中指定的用户名,则没有问题。
kubectl 描述集群角色绑定 {ClusterRoleBindingName}
例子:
[example-test@bastion01 ~]$ kubectl 描述 clusterrolebinding cluster-admin-binding 名称: cluster-admin-binding 标签:<none>注释:<none>角色:种类:ClusterRole 名称:cluster-admin 主题:种类名称命名空间 ---- ---- --------- 用户 example-test
5.操作确认
5-1.改变上下文
*请在{UserName}中输入用户名
*此处使用的用户将被更改。
kubectl config use-context {用户名}
例子:
[example-test@bastion01 ~]$ kubectl config use-context example-test 切换到上下文“example-test”。
5-2.确认上下文(当前用户)
kubectl 配置当前上下文
例子:
[example-test@bastion01 ~]$ kubectl config 当前上下文 example-test
5-3.使用kubectl执行命令
*如果给Pod授予ReadOnly权限,则如下。
[example-test@bastion01 ~]$ kubectl get po 名称就绪状态重新启动年龄 xxxx-f5p2t 1/1 就绪 0 261d
[example-test@bastion01 ~]$ kubectl get node 来自服务器的错误(禁止):节点被禁止:用户“example-test”无法在集群范围的 API 组“”中列出资源“节点”
概括
它怎么样?
创建用户连接到 Kubernetes 中的集群后,您可以自由管理用户权限。
重复使用具有 cluster-admin 权限的用户可能会导致操作过程中发生意外事故,因此
如果您是多人操作,我们建议您创建的用户尽可能与 Linux 用户类似!
操作Kubernetes时请参考!