首页 > 其他分享 >在k8s集群中创建新的用户,绑定集群并实现访问集群资源

在k8s集群中创建新的用户,绑定集群并实现访问集群资源

时间:2024-11-26 17:06:27浏览次数:12  
标签:kubectl -- myuser 绑定 kubeconfig Running 集群 k8s config


为了让普通用户能够通过认证并调用 API,需要执行几个步骤。 首先,该用户必须拥有 Kubernetes 集群签发的证书, 然后将该证书提供给 Kubernetes API。

创建私钥

下面的脚本展示了如何生成 PKI 私钥和 CSR。 设置 CSR 的 CN 和 O 属性很重要。CN 是用户名,O 是该用户归属的组。 你可以参考 RBAC 了解标准组的信息。

openssl genrsa -out myuser.key 2048
openssl req -new -key myuser.key -out myuser.csr -subj "/CN=myuser"

创建 CertificateSigningRequest

创建一个 CertificateSigningRequest, 并通过 kubectl 将其提交到 Kubernetes 集群。 下面是生成 CertificateSigningRequest 的脚本。

cat <<EOF | kubectl apply -f -
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
  name: myuser
spec:
  request: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQ1pUQ0NBVTBDQVFBd0lERVBNQTBHQTFVRUF3d0diWGwxYzJWeU1RMHdDd1lEVlFRS0RBUmhjSEF4TUlJQgpJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBeWRKSVc1WUlFV0dnaVZjWE1IWXNFR2dNCmVuSXBDQ3d5RjByNXpaNWdPU3kvUTR6dTFsamFIaFovbGhPMDVOeGUvbnBzMm1QUDdTVWxpOUhCUHlLeXVWdS8KNTIzN2VGQU9XbVhEcjJlOEtEZXkwK05vV0xxTWVRZitjeVlyL3ZmcytPTW50MHJPOFhjdTlSZjJWc2V0VjJ5ZAo4VTlkS2F0R3ZlVk85QVVveUIvRldCRTVTV2h4WmVMQTc5b2d5VGw5amdYK0FvTitmVmVmWUFHb3c4ZURKekliCnIrTTFjM3g5WlcxMlZZNU5qM3hiVXRaSWpoRVRneElvOUU0Sit1ajhub0pHMm5UOXlpQ3k0ZmEvMTg5Y08wS2wKQkZENUNKMjJuNGxNcnpINmxHK0VlRFl1bk5wN3czVWtMeTM0MmVCUTRJT2RxRllueVl3bWxBV2VaUXZ5ZXdJRApBUUFCb0FBd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFJc2szOHlGMnJ3LzBuT0MwZXUxMFZoYWhqcURPWGlmCnZxYm5DK0hjNzB4OGxaZDdFNSs0L1hYVDNhVDloZTVzbU9melFiUHJiYi92QzE3U1JkTjlIM0V3SUJ6WDZvcEoKeWZSQmgwRVEvYmlaRzRnVWFzM3dvcGF4Njk5REdUejRBQ1BDYlV5T1RYaXk0OGN1SWJFbHg0UlhKWXRLVko4VwpUdW5ObXJTU1FabFhKTjNweUlpM0FYVmltNVZaajZUN3FiTHVjRmpBbmcxcG1RM254MDRGdkJpTUxURFUvSDFhCkxtSTdYM3NSeVdQa3FocXh4Z244Rk9POFBTNUlCYUR6SVdBeWxhdktBNUR5WVZLdE5RUVhuYzV3aHorY1o0eEYKNmk4b0dLQVpKUFcvdmxmaWRLaFYzQmdTVXFyd1lHMm81RysweTVvUkg5UUJHc0xwcE9hamwzQT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCg==
  signerName: kubernetes.io/kube-apiserver-client
  expirationSeconds: 86400  # one day
  usages:
  - client auth
EOF

需要注意的几点:

  • usage 字段必须是 ‘client auth

  • expirationSeconds 可以设置为更长(例如 864000 是十天)或者更短(例如 3600 是一个小时)

  • request 字段是 CSR 文件内容的 base64 编码值, 要得到该值,可以执行命令:

    cat myuser.csr | base64 | tr -d "\n"
    

批准 CertificateSigningRequest

使用 kubectl 创建 CSR 并批准。

获取 CSR 列表:

kubectl get csr

批准 CSR:

kubectl certificate approve myuser

取得证书

从 CSR 取得证书:

kubectl get csr/myuser -o yaml

证书的内容使用 base64 编码,存放在字段 status.certificate

从 CertificateSigningRequest 导出颁发的证书:

kubectl get csr myuser -o jsonpath='{.status.certificate}'| base64 -d > myuser.crt

创建角色和角色绑定

创建了证书之后,为了让这个用户能访问 Kubernetes 集群资源,现在就要创建 Role 和 RoleBinding 了。

下面是为这个新用户创建 Role 的示例命令:

kubectl create role developer --verb=create --verb=get --verb=list --verb=update --verb=delete --resource=pods 

下面是为这个新用户创建 RoleBinding 的示例命令:

kubectl create rolebinding developer-binding-myuser --role=developer --user=myuser

添加到 kubeconfig

最后一步是将这个用户添加到 kubeconfig 文件。

首先,你需要添加新的凭据:

kubectl config set-credentials myuser --client-key=myuser.key --client-certificate=myuser.crt --embed-certs=true --kubeconfig=config

创建对应的集群:

kubectl config set-cluster mycluster  --server="https://192.168.188.101:6443" --certificate-authority=/etc/kubernetes/pki/ca.crt --embed-certs=true --kubeconfig=config

然后,你需要添加上下文:

kubectl config set-context myuser --cluster=mycluster --user=myuser --kubeconfig=config

来测试一下,把上下文切换为 myuser

kubectl config use-context myuser --kubeconfig=config

测试最终效果

[root@k8s-master01 projects]# kubectl get pod --kubeconfig=config
NAME                                  READY   STATUS      RESTARTS   AGE
dapi-test-pod                         0/1     Completed   0          2d23h
from-env-file-pod                     1/1     Running     0          2d23h
from-file-pod                         1/1     Running     0          3d
kubernetes-bootcamp-f95c5b745-7qxbx   1/1     Running     0          10d
kubernetes-bootcamp-f95c5b745-7wfjp   1/1     Running     0          10d
kubernetes-bootcamp-f95c5b745-jwhjl   1/1     Running     0          10d
kubernetes-bootcamp-f95c5b745-rmvjq   1/1     Running     0          10d
nginx-web                             1/1     Running     0          7d5h
task-pv-deployment-5866dbb7cc-78mvk   1/1     Running     0          9d
task-pv-deployment-5866dbb7cc-cr5rx   1/1     Running     0          9d
task-pv-deployment-5866dbb7cc-g42bc   1/1     Running     0          9d
task-pv-deployment-5866dbb7cc-nlfnd   1/1     Running     0          9d
task-pv-deployment-5866dbb7cc-p9t29   1/1     Running     0          9d
task-pv-deployment-5866dbb7cc-tbp4v   1/1     Running     0          9d
task-pv-pod                           1/1     Running     0          9d
task-pv-pod2                          1/1     Running     0          9d
[root@k8s-master01 projects]# kubectl get ns --kubeconfig=config
Error from server (Forbidden): namespaces is forbidden: User "myuser" cannot list resource "namespaces" in API group "" at the cluster scope

标签:kubectl,--,myuser,绑定,kubeconfig,Running,集群,k8s,config
From: https://blog.csdn.net/zhangshenglu1/article/details/144032147

相关文章

  • hadoop~搭建HA集群之后不能自动切换namenode
    在搭好HA集群之后,想测试一下集群的高可用性,于是先把active的namenode给停掉:hadoop-daemon.shstopnamenode或者直接kill掉该节点namenode的对应进程也可。但是通过hdfshaadmin-getServiceStatemaster1查看,发现standby的namenode并没有自动切换成active,直到我把之前kill......
  • 【docker集群应用】Docker常用命令
    文章目录Docker常用命令Docker镜像操作搜索镜像获取镜像查看镜像信息添加镜像标签删除镜像存出与载入镜像上传镜像Docker容器操作容器创建查看容器状态启动容器创建并启动容器后台持续运行容器终止容器运行进入容器文件复制容器导出与导入删除容器批量操作Docke......
  • Kafka集群管理:大数据运维专家来教你如何实现数据均衡与性能最大化
    Kafka概述Kafka起初是由LinkedIn公司采用Scala语言开发的一个多分区、多副本且基于ZooKeeper协调的分布式消息系统,现已被捐献给Apache基金会。 目前Kafka已经定位为一个分布式流式处理平台,它以高吞吐、可持久化、可水平扩展、支持流数据处理等多种特性而被广泛使......
  • Rust vtable(Rust虚表、Rust虚函数表)动态绑定、Rust多态调用、通过类型引用创建trait对
    文章目录Rustvtable原理深度解析1.什么是vtable?1.1Trait对象和vtableTrait对象指针结构-一个指向数据的指针(指向具体类型实例的数据)-一个指向vtable的指针,vtable存储了该类型所有trait方法的函数指针示例:通过类型引用创建trait对象(自动实例化)Ascii图解释......
  • CKA认证 | Day4 K8s管理应用生命周期(下)
    第四章K8s管理应用程序生命周期(下)1、Pod对象1.1Pod的基本概念Pod是Kubernetes中最基本和最重要的概念之一,是一个逻辑抽象概念,Kubernetes创建和管理的最小单元,一个Pod由一个容器或多个容器组成。它简化了容器的部署、管理和扩展。通过Pod可以轻松地将应用程序的不同......
  • k8s问题记录-etcdserver: mvcc: database space exceeded异常处理
    报错截图如下查看etcd,发现超过默认值2G了解决参考链接https://cloud.tencent.com/developer/article/2360418执行过程PS:高可用集群需要在所有master执行#1、获取当前的版本$rev=$(ETCDCTL_API=3etcdctl--endpoints=https://127.0.0.1:2379--cacert=/etc/kubernete......
  • k8s
    常用命令//查看节点信息kubectlgetnodes故障排查TheAPIserverisnothealthyafter4m问题描述解决方案//查看当前containerd镜像下载地址containerdconfigdump|grepsandbox_image//生成默认的containerd配置文件mkdir/etc/containerdcontainerdco......
  • mongodb shard 分片集群基础概念
    目录一、shard集群二、ConfigServer1、config.shards2、config.database3、config.collection4、config.chunks5、config.settings6、其他三、shard机制1、PrimaryShard2、ShardKey2.1范围分片2.2哈希分片2.3ShardKey重定义2.4版本约束2.5ShardKey......
  • KingbaseES V8R6集群备份恢复案例之---远程外部备份故障案例
    案例说明:KingbaseESV8R6集群,通过‘cluster’模式执行远程异地的外部备份,在备份初始化时,故障显示,远程节点连接数据库失败,异常终止。原因是,数据库节点不支持本地数据库访问导致。适用版本:KingbaseESV8R6集群架构:一、问题现象如下所示,在执行sys_backup.shinit后,提示远程备......
  • 云原生周刊:K8s 严重漏洞
    开源项目推荐KitOpsKitOps是一款开源的DevOps工具,专为AI/ML项目的全生命周期管理而设计,通过将模型、数据集、代码和配置打包并版本化为符合OCI(开放容器标准)的工件,简化了AI/ML工作流的部署与管理。KitOps支持统一打包,将AI/ML模型、数据集和配置封装为便携式工件,同时提......