2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

Kubernetes 身份认证和授权操作全攻略:上手操作 Kubernetes 授权

  • 2020-05-16
  • 本文字数:2477 字

    阅读完需:约 8 分钟

Kubernetes身份认证和授权操作全攻略:上手操作Kubernetes授权

这是本系列文章中的第三篇,前两篇文章分别介绍了Kubernetes访问控制以及身份认证。本文将通过上手实践的方式,带你理解 Kubernetes 授权这一概念。


在文章正式开始之前,我们先快速回顾一下我们实操过程中的环境和场景。我们正在处理生产环境中的集群,其中每个部分都与命名空间相关联。现在,组里新来了一位同事叫 Bob,我们在上篇教程中帮助 Bob 以 engineering 命名空间管理员的身份加入集群。并且他已经获得私钥以及签名证书来访问集群。


如果你还没有完成上述操作,请查看上篇教程,运行其中的命令以完成环境设置以及为 Bob 配置证书。


好,我们正式开始本篇教程。


现在我们要给 Bob 授权,以控制属于 engineering 命名空间的资源。


首先,我们要为 kubectl 创建一个上下文(context),方便它在不同的环境之间切换。


kubectl config set-context eng-context \  --cluster=minikube \  --namespace=engineering \  --user=bobContext "eng-context" created.
复制代码


上面的命令使用 Bob 在 minikube 集群中的凭据创建了一个指向 engineering 命名空间的新上下文。这会导致在〜/ .kube / config 文件中添加一个新的部分。



我们现在在 engineering 命名空间中创建一个简单的 pod:


apiVersion: v1kind: Podmetadata:  name: myapp  namespace: engineering  labels:    app: myappspec:  containers:  - name: myapp    image: busybox    command: ["/bin/sh", "-ec", "while :; do echo '.'; sleep 5 ; done"]
复制代码


 kubectl create -f myapp.yamlpod/myapp created
复制代码


kubectl get pods -n=engineeringNAME    READY   STATUS    RESTARTS   AGEmyapp   1/1     Running   0          89s
复制代码


虽然您可以作为集群管理员在工程命名空间中创建和操作 pod,但 Bob 甚至无法在同一名称空间中列出 pod。


kubectl get pods --namespace engineering --as bobError from server (Forbidden): pods is forbidden: User "bob" cannot list resource "pods" in API group "" in the namespace "engineering"
复制代码


为了使得 Bob 可以在 engineering 命名空间中访问资源,我们需要给他授权。这可以通过创建具有适当权限的角色然后将其绑定到用户 Bob 来完成。实质上,我们使用的是基于角色访问控制(RBAC)来允许 Bob 对 engineering 命名空间中的某些 Kubernetes 资源执行特定操作。


创建一个名为 eng-reader 的 Kubernetes 角色,允许其在 engineering 命名空间中列出 pod。


apiVersion: rbac.authorization.k8s.io/v1metadata:  namespace: engineering   name: eng-readerrules:- apiGroups: [""] # "" indicates the core API group  resources: ["pods", "services", "nodes"]  verbs: ["get", "watch", "list"]
复制代码


kubectl create -f role.yamlrole.rbac.authorization.k8s.io/eng-reader created
复制代码


kubectl get roles --namespace=engineeringNAME         AGEeng-reader   58s
复制代码


注意,这一角色目前和 Bob 毫无关联。我们需要通过角色绑定将角色中指定的权限应用于 Bob。


kind: RoleBindingapiVersion: rbac.authorization.k8s.io/v1metadata:  name: eng-read-access  namespace: engineeringsubjects:- kind: User  name: bob # Name is case sensitive  apiGroup: rbac.authorization.k8s.ioroleRef:  kind: Role #this must be Role or ClusterRole  name: eng-reader # this must match the name of the Role or ClusterRole you wish to bind to  apiGroup: rbac.authorization.k8s.io
复制代码


kubectl create -f role-binding.yamlrolebinding.rbac.authorization.k8s.io/eng-read-access created
复制代码


kubectl get rolebindings --namespace=engineeringNAME              AGEeng-read-access   31s
复制代码


让我们来检查一下 Bob 现在是否可以访问 pod。


kubectl get pods --namespace engineering --as bobNAME    READY   STATUS    RESTARTS   AGEmyapp   1/1     Running   0          11m
复制代码


既然他现在已经关联了 eng-reader 角色,那么他就获得了 pod 列表的权限。


此时,Bob 在集群中的访问权限依旧十分有限。他所能做的只是在 engineering 命名空间中列出 pod。这对 Bob 帮助不大。他想要检查集群中的节点数量,但是令他失望的是,他遇到了 forbidden error。


kubectl get nodes --as bobError from server (Forbidden): nodes is forbidden: User "bob" cannot list resource "nodes" in API group "" at the cluster scope
复制代码


在 Kubernetes 中角色和角色绑定既可以应用在命名空间层面也可以应用在集群层面。我们现在创建一个集群角色以及一个与 Bob 关联的角色绑定,以使他能够列出节点。


kind: ClusterRoleapiVersion: rbac.authorization.k8s.io/v1metadata:  # "namespace" omitted since ClusterRoles are not namespaced  name: cluster-node-readerrules:- apiGroups: [""]  resources: ["nodes"]  verbs: ["get", "watch", "list"]
复制代码


kubectl create -f cluster-role.yamlclusterrole.rbac.authorization.k8s.io/cluster-node-reader created
复制代码


kubectl get clusterroles cluster-node-readerNAME                  AGEcluster-node-reader   49s
复制代码


kind: ClusterRoleBindingapiVersion: rbac.authorization.k8s.io/v1metadata:  name: read-cluster-nodessubjects:- kind: User  name: bob # Name is case sensitive  apiGroup: rbac.authorization.k8s.ioroleRef:  kind: ClusterRole  name: cluster-node-reader  apiGroup: rbac.authorization.k8s.io
复制代码


kubectl create -f cluster-role-binding.yamlclusterrolebinding.rbac.authorization.k8s.io/read-cluster-nodes created
复制代码


kubectl get clusterrolebindings read-cluster-nodesNAME                 AGEread-cluster-nodes   35s
复制代码


现在,Bob 已经设置为可以在集群中列出节点。


kubectl get nodes --as bobNAME       STATUS   ROLES    AGE   VERSIONminikube   Ready    master   52m   v1.15.2
复制代码


本篇教程的目的是为了帮助你理解角色以及角色绑定如何在 Kubernetes 中工作的。在本系列下一篇文章中,我们将来看看 service account,保持关注哟~


2020-05-16 17:181063

评论

发布
暂无评论
发现更多内容

Django笔记三十一之全局异常处理

Hunter熊

Python django 异常处理 全局异常

异常体系与项目实践

Java 架构

高级修图软件:Affinity Photo中文Mac版

真大的脸盆

Mac 图像处理 图像编辑 编辑图像 处理图像工具

CDN网关超大range计算方法

天翼云开发者社区

CDN

LlamaIndex 联合创始人下场揭秘:如何使用私有数据提升 LLM 的能力?

Zilliz

Milvus Zilliz LLM zillizcloud llamaindex

展会回顾 | 2023元宇宙生态博览会圆满落幕,3DCAT荣获“元宇宙交互技术奖”

3DCAT实时渲染

元宇宙 实时云渲染 实时渲染云

发现你的职业价值观:打造成功职业生涯的关键

Jack

标签系列:标签管理平台的架构与设计

小鲸数据

数据 标签 数据管理 标签体系

从 DevOps 到平台工程:软件开发的新范式

SEAL安全

DevOps 软件研发 平台工程

JavaScript中eval和with语句如何影响作用域链:探索深度知识

Immerse

HashMap 底层是如何实现的?

javacn.site

java面试

《好好学习》:如何管理知识?

郭明

苹果系统更新:MacOS 11-13.x(PKG系统安装包及IPSW固件)

Rose

mac系统 macOS 13 Ventura 苹果最新系统 苹果系统下载

IDO&IEO盘点,包括PoseiSwap等即将面向市场的潜力打新活动

股市老人

中央企业数字化转型专业委员会正式揭牌!

用友BIP

财务管理

VM虚拟机 v13.0.2激活版 for Mac许可秘钥

Rose

VMware Fusion Pro 13 VM虚拟机破解版 Mac虚拟机 VMware Fusion激活秘钥

做实大模型的产业价值,度小满深耕“NLP+金融”

脑极体

金融 nlp 度小满

全屋智能,始终在等一双“究极手”

脑极体

智能家居

全球首款通过HDR Vivid认证的平板发布,华为视频全场景观影体验再升级

最新动态

2023-05-18:有 n 名工人。 给定两个数组 quality 和 wage , 其中,quality[i] 表示第 i 名工人的工作质量,其最低期望工资为 wage[i] 。 现在我们想雇佣

福大大架构师每日一题

Go 算法 rust

C语言编程—常量

芯动大师

BATJ架构师首推!分布式事务原理与实战,出神入化

程序知音

Java 分布式 java架构 Java进阶 后端技术

浅谈基于Shapley值的数据融合反欺骗数据判断相关

天翼云开发者社区

数据 Shapley

打造绿色低碳存储方案,助推数据中心绿色长“存”

天翼云开发者社区

CIO

旭阳数字郗维宝:数智化转型助力焦化企业打破行业困境

用友BIP

升级企业数智化底座 2023用友技术大会

开通 ChatGPT Plus 的一些经验分享(66/100)

hackstoic

ChatGPT

IDO&IEO盘点,包括PoseiSwap等即将面向市场的潜力打新活动

BlockChain先知

云原生可观测性的几大误区

Yestodorrow

云原生 APM 监控 可观测性

Scrum进入疲惫期?三点帮你走出困境

敏捷开发

Scrum 敏捷开发 软件开发 Scrum Master 疲倦期

Kubernetes身份认证和授权操作全攻略:上手操作Kubernetes授权_文化 & 方法_Rancher_InfoQ精选文章