说明

在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. JUC - ReentrantLock 的基本用法 以及 lock()、tryLock()、lockInterruptibly()的区别

    ReentrantLock 与 synchronized对比 最近有在阅读Java并发编程实战这本书,又看到了ReentrantLock和synchronized的对比,发现自己以前对于Renntra ...

  2. C#操作sql server

    C#操作sqlserver跟操作其他数据没有太大差别,但是又一些细节要注意一下. 在安装sqlserver时不要选择默认实例,如果是则需要更改设置,还有远程连接要去连接服务中设置一下,如端口1433等 ...

  3. json基础用法

    JSON格式 JSON格式(JavaScript Object Notation的缩写)是一种用于数据交换的文本格式,2001年由Douglas Crockford提出,目的是取代繁琐笨重的XML格式 ...

  4. C/C++——strcpy函数的实现

    题目:     已知strcpy函数的原型是:         char * strcpy(char * strDest,const char * strSrc);     1.不调用库函数,实现st ...

  5. 用Python编写简单的发红包程序和计算器原理

    用Python编写简单的发红包程序: 第一种解法:数轴方法解决 import random def red_packet(money,num): money = money * 100 #将钱数转换成 ...

  6. 前后端对称加密(AES)

    后端实现(JAVA) package com.vcgeek.hephaestus.demo; import org.apache.commons.codec.binary.Base64; import ...

  7. SpringBoot 常用注解简单总结

    终于有时间对刚学的SpringBoot注解总结一下了,Annotation(注解)是JDK 5.0之后及以后版本引入的,这个时候需要在Spring中申明一个Bean,只能通过xml的方式,非常繁琐.但 ...

  8. 欧拉路&&欧拉回路

    T1是欧拉路板子,但我不会,直接爆炸.. 这玩意就是个dfs,但我以前一直以为欧拉路只能$O(nm)$求 今天才知道可以$O(n+m)$ 欧拉路判定: 无向:起点终点为奇度点,其余偶度 有向:起点终点 ...

  9. 重置root密码!

    偶尔把密码忘记了也不用慌,重置密码只需简单几步: 第1步:开机后在内核上敲击“e”. 第2步:在linux16这行的后面输入“rd.break”并敲击“ctrl+x“. 第3步:进入到了系统的紧急求援 ...

  10. .NET手撸绘制TypeScript类图——上篇

    .NET手撸绘制TypeScript类图--上篇 近年来随着交互界面的精细化,TypeScript越来越流行,前端的设计也越来复杂,而类图正是用简单的箭头和方块,反映对象与对象之间关系/依赖的好方式. ...