说明

在openshift环境中,可以通过oc project {project_name}命令来切换project,那么在k8s中式如何切换namespace的呢?(ocp的project即相当于k8s中的ns)

实例

创建ns

  1. #创建dev 和 prod ns
  2. kubectl create ns dev
  3. kubectl create ns prod

查看默认上下文用于访问api的信息

  1. #通过kubectl config view或者cat ~/.kube/config 查看默认上下文使用的cluster和user
  2. kc config view
  3. apiVersion: v1
  4. clusters:
  5. - cluster:
  6. certificate-authority-data: REDACTED
  7. server: https://172.31.2.130:6443
  8. name: kubernetes
  9. contexts:
  10. - context:
  11. cluster: kubernetes //默认上下文使用的cluster
  12. user: kubernetes-admin //默认上下文使用的user
  13. name: kubernetes-admin@kubernetes
  14. current-context: ctx-prod
  15. kind: Config
  16. preferences: {}
  17. users:
  18. - name: kubernetes-admin
  19. user:
  20. client-certificate-data: REDACTED
  21. client-key-data: REDACTED

新增上下文

  1. #定义Context
  2. kubectl config set-context ctx-dev --namespace=dev --cluster=kubernetes --user=kubernetes-admin
  3. kubectl config set-context ctx-prod --namespace=prod --cluster=kubernetes --user=kubernetes-admin

切换上下文

  1. kubectl config use-context ctc-prod
    #此时部署应用默认就会到prod ns中

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

上述配置之后可以实现切换ns(类似oc project xxx),但是都是使用的kubernetes-admin这个user,这个用户具有cluster-admin的权限

以下配置实现在prod这个ns中只允许对资源deployment、pod的list等操作,而不允许delete操作

参考链接:https://blog.csdn.net/hy9418/article/details/80268418

创建私钥文件

  1. #使用openssl创建名为view.key的私钥文件
  2. openssl genrsa -out view.key

创建证书签名请求文件

  1. #使用上述的私钥文件创建csr文件
  2. openssl req -new -key view.key -out view.csr -subj "/CN=view/O=mypwd"

生成证书文件

  1. #利用k8s集群证书文件(/etc/kubernetes/pki/下),生成证书view.crt
  2. openssl x509 -req -in view.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out view.crt -days

配置k8s context

  1. #编辑~/.kube/config文件,新增user,name为view,其中client-certificate-data和client-key-data的值如下
  2.  
  3. client-certificate-data=`cat view.crt | base64 --wrap=`
  4.  
  5. client-key-data=`cat view.key | base64 --wrap=`
  6.  
  7. #在prod这个context中指定user为view
    - context:
        cluster: kubernetes
        namespace: prod
        user: view
      name: prod

由于未赋权限,报如下错误

  1. [root@node1 manifests]# kc config use-context prod
  2. Switched to context "prod".
  3. [root@node1 manifests]# kc get pod
  4. No resources found.
  5. Error from server (Forbidden): pods is forbidden: User "view" cannot list pods in the namespace "prod"

权限赋值

  1. #新建view_rbac.yaml文件,其中定义了Role对象和RoleBindind对象
  2. kind: Role
  3. apiVersion: rbac.authorization.k8s.io/v1beta1
  4. metadata:
  5. name: prod_user_role
  6. namespace: prod
  7. rules:
  8. # ""表示core这个apiGroups, pod就是在core
  9. - apiGroups: ["", "extensions", "apps"]
  10. resources:
  11. - pods
  12. verbs:
  13. - list
  14. ---
  15. kind: RoleBinding
  16. apiVersion: rbac.authorization.k8s.io/v1beta1
  17. metadata:
  18. name: prod_user_rolebinding
  19. namespace: prod
  20. roleRef:
  21. apiGroup: rbac.authorization.k8s.io
  22. kind: Role
  23. name: prod_user_role
  24. subjects:
  25. - kind: User
  26. name: view
  27. namespace: prod
  28.  
  29. #通过kubectl create -f view_rbac.yaml,注:需要切回具有cluster-admin权限的context才能执行create动作

verbs 字段的全集:verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]

验证

  1. #切换到prod context
  2. kc config use-context prod
  3.  
  4. #kc get pod,命令正常获取pod
  5. NAME READY STATUS RESTARTS AGE
  6. my--game-789f4fb6b5-6nl8n / Running 12d
  7. my--game-789f4fb6b5-j59hq / Running 12d
  8. my--game-789f4fb6b5-xx2vb / Running 12d
  9.  
  10. kc delete pod my--game-789f4fb6b5-6nl8n
  11. Error from server (Forbidden): pods "my-2048-game-789f4fb6b5-6nl8n" is forbidden: User "view" cannot delete pods in the namespace "prod"
  12.  
  13. kc get deployment
  14. No resources found.
  15. Error from server (Forbidden): deployments.extensions is forbidden: User "view" cannot list deployments.extensions in the namespace "prod"
  1.  
  1.  
  1.  

配置k8s集群context-rbac实践的更多相关文章

  1. 企业运维实践-还不会部署高可用的kubernetes集群?使用kubeadm方式安装高可用k8s集群v1.23.7

    关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 文章目录: 0x00 前言简述 ...

  2. K8S集群集成harbor(1.9.3)服务并配置HTTPS

    一.简介 简介请参考:https://www.cnblogs.com/panwenbin-logs/p/10218099.html 二.安装Harbor主机环境及安装要求 主机环境: OS: Cent ...

  3. [k8s]jenkins配合kubernetes插件实现k8s集群构建的持续集成

    另一个结合harbor自动构建镜像的思路: 即code+baseimage一体的方案 - 程序员将代码提交到代码仓库gitlab - 钩子触发jenkins master启动一次构建 - jenkin ...

  4. Randcher 2.0部署K8s集群(一)

    环境准备 1.系统版本 CentOS7.5 + docker ee 2.配置阿里云yum源 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirro ...

  5. Ansible部署K8s集群

    目录 检查网络:k8s-check.yaml 连接配置:k8s-conn-cfg.yaml 配置k8s集群dns解析: k8s-hosts-cfg.yaml 配置yum源:k8s-yum-cfg.ya ...

  6. K8s集群认证之RBAC

    kubernetes认证,授权概括总结: RBAC简明总结摘要:API Server认证授权过程: subject(主体)----->认证----->授权[action(可做什么)]--- ...

  7. K8S集群Master高可用实践

    K8S集群Master高可用实践    https://blog.51cto.com/ylw6006/2164981 本文将在前文基础上介绍k8s集群的高可用实践,一般来讲,k8s集群高可用主要包含以 ...

  8. 1.还不会部署高可用的kubernetes集群?看我手把手教你使用二进制部署v1.23.6的K8S集群实践(上)

    公众号关注「WeiyiGeek」 设为「特别关注」,每天带你玩转网络安全运维.应用开发.物联网IOT学习! 本章目录: 0x00 前言简述 0x01 环境准备 主机规划 软件版本 网络规划 0x02 ...

  9. 万级K8s集群背后etcd稳定性及性能优化实践

    背景与挑战 随着腾讯自研上云及公有云用户的迅速增长,一方面,腾讯云容器服务TKE服务数量和核数大幅增长, 另一方面我们提供的容器服务类型(TKE托管及独立集群.EKS弹性集群.edge边缘计算集群.m ...

随机推荐

  1. 【网络安全】Dos攻击科普文

    目录 DOS攻击 什么是DOS攻击 攻击手段分类 具体的攻击方式举例 优秀博客参考 DDOS攻击 DOS攻击 什么是DOS攻击 DOS是Denial of Service的简称,用中文简单翻译就是拒绝 ...

  2. 不同的phper该如何区别使用swoole和workerman?

       那么我们该怎样去区别应用swoole和workerman?                workerman workerman纯php写的,swoole是php的c扩展,性能肯定更高,百度.腾 ...

  3. 推荐一款现代化的脚手架项目《hope-boot》

    简介: > 一款现代化的脚手架项目.企业开发?接外包?赚外快?还是学习?这都能满足你,居家必备,值得拥有

  4. 处理 Could not find a 'KafkaClient' entry in the JAAS configuration. System property 'java.security.auth.login.config' is

    场景 某监控进程需要访问多个集群的Kafka INFO - org.apache.kafka.common.KafkaException: Failed to construct kafka cons ...

  5. Veins(车载通信仿真框架)入门教程(二)——调用第三方库

    Veins(车载通信仿真框架)入门教程(二)——调用第三方库 在借助Veins进行自己的研究时我们经常需要实现一些比较复杂的功能,有时就需要借助第三方库的帮助. 博主的研究需要使用神经网络,但是自己编 ...

  6. 判断是否存在UI被触摸

    ) || (Input.touchCount > && Input.GetTouch().phase == TouchPhase.Began)) { #if UNITY_ANDR ...

  7. JS设置和获取盒模型的宽和高

    JS设置和获取盒模型的宽和高 dom.style.width/height:只能取出内联样式的宽度和高度 dom.currentStyle.width/height:获取即时的计算的样式,但是只有IE ...

  8. 设计模式C++描述----15.策略(Strategy)模式

    一. 举例说明 以前做了一个程序,程序的功能是评价几种加密算法时间,程序的使用操作不怎么变,变的是选用各种算法. 结构如下: Algorithm:抽象类,提供算法的公共接口. RSA_Algorith ...

  9. vue 首次加载缓慢/刷新后加载缓慢 原因及解决方案

    # vue 首次加载缓慢/刷新后加载缓慢 原因及解决方案 最近做项目发现一个问题,页面每次刷新后加载速度都非常慢,20s左右,在开发环境则非常流畅,几乎感觉不到,本文参考望山的各种方案优化 1,关闭打 ...

  10. Redis开发与运维:SDS

    STRING 我们会经常打交道的string类型,在redis中拥有广泛的使用.也是开启redis数据类型的基础. 在我最最开始接触的redis的时候,总是以为字符串类型就是值的类型是字符串. 比如: ...