[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

【超过500家企业部署】AWS搭建、运维、监控服务

【超过500家企业部署】AWS搭建、运维、监控服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

[仅适用于 WordPress] 云服务器“Web Speed”

[仅适用于 WordPress] 云服务器“Web Speed”

[便宜]网站安全自动诊断“快速扫描仪”

[便宜]网站安全自动诊断“快速扫描仪”

[预约系统开发] EDISONE定制开发服务

[预约系统开发] EDISONE定制开发服务

[注册100个URL 0日元] 网站监控服务“Appmill”

[注册100个URL 0日元] 网站监控服务“Appmill”

【兼容200多个国家】全球eSIM“超越SIM”

【兼容200多个国家】全球eSIM“超越SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

【全球专属服务】Beyond北美及中国MSP

【全球专属服务】Beyond北美及中国MSP

[YouTube]超越官方频道“美由丸频道”

[YouTube]超越官方频道“美由丸频道”

[Kubernetes] 如何创建集群连接用户

*Kirimen(大阪十三)

你好!
我是Beyond大阪事务所的拉面大王Hide。
这是我的第 14 篇文章。

上次,我写了有关如何使用 Cloudflare Workers 配置基本身份验证的文章!
设置相对简单,但如果设置错误,可能无法查看该站点。
如果您有兴趣,请查看一下,我们会用通俗易懂的方式介绍设置方法,以免失败。

如何使用 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 访问(一种权限升级形式)。
・参考资料
使用RBAC授权
https://kubernetes.io/ja/docs/reference/access-authn-authz/rbac/

 

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时请参考!

如果您觉得这篇文章有帮助,请点赞!
5
加载中...
5 票,平均:1.00 / 15
743
X Facebook 哈特纳书签 口袋
[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

写这篇文章的人

关于作者

隐藏@基础设施工程师

这一切都始于一次非常有趣的采访。
大阪系统解决方案部门的一名职业中期员工。我的
工作是构建和运营服务器和云!
我拥有 LPIC1、AWS SAA 和 OCI 架构师助理资格。

其实我很喜欢拉面,
已经调查过大阪100多家店了(。-∀-)我要努力成为Nibi Beyond

我也在Twitter,所以请关注我(´∇`)
点击右上角的Twitter标记! !