K8S - Access Control 机制介绍

在这里插入图片描述
作为开发人员, 我们通常会直接用root 帐号操作 k8s master node 里的kubectl 命令,并不能感知k8s 多用户权限管理存在。

即使自动化, 我们也会考虑用ansible 来远程操作master node…

所以大部分开发人员默认上是不用深入研究k8s的Access control的

但是作为SRE 或者 DevOps 开发, 理解一下还是有好处, 当然本文也只是介绍个基本概念,也不会深入。



K8S 权限认证机制介绍

Kubernetes(K8s)的权限认证机制主要涉及认证(Authentication)和授权(Authorization)两个方面:

Authentication 包括用户验证与 服务帐号(SA) 认证

至于Authorization 授权方面, 就是我们常见的RBAC (Role-based Access Control)

如下图, 其实一切对k8s集群的管理操作都是通过api service 去调用nodes 的kubelet 去完成

而认证和授权是在api service 里完成的, 任何调用 api service 里的api之前都必须pass 认证和授权
在这里插入图片描述





K8S 的用户帐号

在 Kubernetes 中,用户账户(User Account)通常不是直接管理的资源,而是由身份验证插件和身份提供者处理的。这些身份提供者可以包括基本身份验证、证书认证、令牌认证、OpenID Connect 等。当用户成功进行身份验证后,Kubernetes 将使用其提供的身份信息调用集群中的授权插件来确定用户是否有权限执行请求的操作。

要创建用户账户,您通常需要依赖外部的身份提供者,比如 LDAP、Active Directory、OpenID Connect 等。这些身份提供者负责验证用户身份,并将验证成功的用户映射到 Kubernetes 中的特定用户账户。

总之, 一般情况下我们用不上它, 除非大型企业下的k8s 平台会考虑使用User 帐号。





K8S 的Service account 服务帐号

反而, k8s的sa 我们更应该重点关注, 因为sa 可以被k8s 本身管理, 包括sa 的创建和授权

通常1个namespace 被创建, 该namespace 会被自动创建1个名字叫default的 sa

我们可以下面命令来查看某个namespace 的sa

gateman@MoreFine-S500: conf$ kubectl get sa -n default
NAME      SECRETS   AGE
default   1         206d





K8S 的Service account 和 用户帐号的对比

  1. User 帐号是针对人的, 服务帐号针对POD 进程
  2. User 帐号是全局的, 在所有的namespace中 必须唯一, 而sa 是属于某个namespace的, 多个namespace 可以有同名的sa
  3. 通常User帐号与企业的用户数据库(例如LDAP)同步, 而sa 的创建和使用更加轻量化, 允许集群用户为特定任务创建sa
  4. 对于复杂系统的配置包(helm chart), 可以包括对该系统的各种组建的sa的定义





Service Account Admission Controller

这个控制器主要是管理POD 的sa 设置
它是 apiserver 的一部分。当1个POD 被创建和修改时

  1. 如果POD 没有被设置sa, 那么它会将POD 的sa 设为 default (default 是1个sa)
  2. 确保POD 引用的sa 存在, 否则会拒绝POD的创建和修改请求
  3. 如果POD 不包含任何 ImagePullSecret, 则将SA 的imagePullSecret 添加到POD中(前提是该SA 配置了ImagePullSecret
  4. 为包含API访问的token的POD添加了1个Volume, 挂载在/var/run/secrets/kubernetes.io/serviceaccount(容器里)

例子, 把default 的 token mount在pod里了

gateman@MoreFine-S500: conf$ kubectl exec -it deployment-cloud-order-5f46d97659-2d7nk /bin/bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.bash-4.4# pwd
/var/run/secrets/kubernetes.io/serviceaccount
bash-4.4# ls
ca.crt	namespace  token
bash-4.4# cat namespace 
default





Token Controller

每个sa 都观念1个token 就是 Token Controller 管理的





Service Account Controller

很简单, 这个controller 会管理namespace 的sa
他会确保每个namespace 会存在1个名字叫default的sa





Role

作用范围:Role 专注于特定命名空间(Namespace-specific)。它定义了对特定命名空间内资源的权限。
应用对象:Role 通常用于控制对该命名空间内资源的访问权限。
示例用途:可以为特定命名空间内的用户或 ServiceAccount 分配 Role,以限制其对该命名空间内资源的操作权限。

可以用下面命令来查看分别每个namespace 的role

gateman@MoreFine-S500: conf$ kubectl get role --all-namespaces
NAMESPACE       NAME                                             CREATED AT
ingress-nginx   ingress-nginx                                    2024-06-24T18:17:27Z
kube-public     kubeadm:bootstrap-signer-clusterinfo             2024-02-23T20:44:20Z
kube-public     system:controller:bootstrap-signer               2024-02-23T20:44:19Z
kube-system     extension-apiserver-authentication-reader        2024-02-23T20:44:19Z
kube-system     kube-proxy                                       2024-02-23T20:44:20Z
kube-system     kubeadm:kubelet-config-1.23                      2024-02-23T20:44:19Z
kube-system     kubeadm:nodes-kubeadm-config                     2024-02-23T20:44:19Z
kube-system     system::leader-locking-kube-controller-manager   2024-02-23T20:44:19Z
kube-system     system::leader-locking-kube-scheduler            2024-02-23T20:44:19Z
kube-system     system:controller:bootstrap-signer               2024-02-23T20:44:19Z
kube-system     system:controller:cloud-provider                 2024-02-23T20:44:19Z
kube-system     system:controller:token-cleaner                  2024-02-23T20:44:19Z

可以见default namespace 是没有role 定义的

查看具体Role的权限,
我们就查看上面的ingress-nginx


gateman@MoreFine-S500: conf$ kubectl get role ingress-nginx -n ingress-nginx -o yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:annotations:meta.helm.sh/release-name: ingress-nginxmeta.helm.sh/release-namespace: ingress-nginxcreationTimestamp: "2024-06-24T18:17:27Z"labels:app.kubernetes.io/component: controllerapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/managed-by: Helmapp.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginxapp.kubernetes.io/version: 1.10.1helm.sh/chart: ingress-nginx-4.10.1name: ingress-nginxnamespace: ingress-nginxresourceVersion: "3038700"uid: f27340df-0f11-448d-8591-baaca1b28989
rules:
- apiGroups:- ""resources:- namespacesverbs:- get
- apiGroups:- ""resources:- configmaps- pods- secrets- endpointsverbs:- get- list- watch
- apiGroups:- ""resources:- servicesverbs:- get- list- watch
- apiGroups:- networking.k8s.ioresources:- ingressesverbs:- get- list- watch
- apiGroups:- networking.k8s.ioresources:- ingresses/statusverbs:- update
- apiGroups:- networking.k8s.ioresources:- ingressclassesverbs:- get- list- watch
- apiGroups:- coordination.k8s.ioresourceNames:- ingress-nginx-leaderresources:- leasesverbs:- get- update
- apiGroups:- coordination.k8s.ioresources:- leasesverbs:- create
- apiGroups:- ""resources:- eventsverbs:- create- patch
- apiGroups:- discovery.k8s.ioresources:- endpointslicesverbs:- list- watch- get





ClusterRole

作用范围:ClusterRole 跨越整个集群,即集群范围(Cluster-wide)。它定义了对整个集群中资源的权限。
应用对象:ClusterRole 用于控制对集群级资源的访问权限,例如节点、命名空间等。
示例用途:可以为具有全局职责的用户或 ServiceAccount 分配 ClusterRole,以允许他们对整个集群的资源进行操作。

由于ClusterRole 是for all namespaces的, 我们可以下面命令来查看所有namespace的clusterrole

gateman@MoreFine-S500: conf$ kubectl get clusterrole
NAME                                                                   CREATED AT
admin                                                                  2024-02-23T20:44:18Z
cluster-admin                                                          2024-02-23T20:44:18Z
edit                                                                   2024-02-23T20:44:18Z
flannel                                                                2024-03-08T18:25:29Z
ingress-nginx                                                          2024-06-24T18:17:26Z
kubeadm:get-nodes                                                      2024-02-23T20:44:20Z
system:aggregate-to-admin                                              2024-02-23T20:44:18Z
system:aggregate-to-edit                                               2024-02-23T20:44:18Z
system:aggregate-to-view                                               2024-02-23T20:44:18Z
system:auth-delegator                                                  2024-02-23T20:44:18Z
system:basic-user                                                      2024-02-23T20:44:18Z
system:certificates.k8s.io:certificatesigningrequests:nodeclient       2024-02-23T20:44:18Z
system:certificates.k8s.io:certificatesigningrequests:selfnodeclient   2024-02-23T20:44:18Z
system:certificates.k8s.io:kube-apiserver-client-approver              2024-02-23T20:44:18Z
system:certificates.k8s.io:kube-apiserver-client-kubelet-approver      2024-02-23T20:44:18Z
system:certificates.k8s.io:kubelet-serving-approver                    2024-02-23T20:44:18Z
system:certificates.k8s.io:legacy-unknown-approver                     2024-02-23T20:44:18Z
system:controller:attachdetach-controller                              2024-02-23T20:44:18Z
system:controller:certificate-controller                               2024-02-23T20:44:19Z
system:controller:clusterrole-aggregation-controller                   2024-02-23T20:44:18Z
system:controller:cronjob-controller                                   2024-02-23T20:44:18Z
system:controller:daemon-set-controller                                2024-02-23T20:44:18Z
system:controller:deployment-controller                                2024-02-23T20:44:18Z
system:controller:disruption-controller                                2024-02-23T20:44:18Z
system:controller:endpoint-controller                                  2024-02-23T20:44:18Z
system:controller:endpointslice-controller                             2024-02-23T20:44:18Z
system:controller:endpointslicemirroring-controller                    2024-02-23T20:44:18Z
system:controller:ephemeral-volume-controller                          2024-02-23T20:44:18Z
system:controller:expand-controller                                    2024-02-23T20:44:18Z
system:controller:generic-garbage-collector                            2024-02-23T20:44:18Z
system:controller:horizontal-pod-autoscaler                            2024-02-23T20:44:18Z
system:controller:job-controller                                       2024-02-23T20:44:18Z
system:controller:namespace-controller                                 2024-02-23T20:44:18Z
system:controller:node-controller                                      2024-02-23T20:44:18Z
system:controller:persistent-volume-binder                             2024-02-23T20:44:18Z
system:controller:pod-garbage-collector                                2024-02-23T20:44:19Z
system:controller:pv-protection-controller                             2024-02-23T20:44:19Z
system:controller:pvc-protection-controller                            2024-02-23T20:44:19Z
system:controller:replicaset-controller                                2024-02-23T20:44:19Z
system:controller:replication-controller                               2024-02-23T20:44:19Z
system:controller:resourcequota-controller                             2024-02-23T20:44:19Z
system:controller:root-ca-cert-publisher                               2024-02-23T20:44:19Z
system:controller:route-controller                                     2024-02-23T20:44:19Z
system:controller:service-account-controller                           2024-02-23T20:44:19Z
system:controller:service-controller                                   2024-02-23T20:44:19Z
system:controller:statefulset-controller                               2024-02-23T20:44:19Z
system:controller:ttl-after-finished-controller                        2024-02-23T20:44:19Z
system:controller:ttl-controller                                       2024-02-23T20:44:19Z
system:coredns                                                         2024-02-23T20:44:20Z
system:discovery                                                       2024-02-23T20:44:18Z
system:heapster                                                        2024-02-23T20:44:18Z
system:kube-aggregator                                                 2024-02-23T20:44:18Z
system:kube-controller-manager                                         2024-02-23T20:44:18Z
system:kube-dns                                                        2024-02-23T20:44:18Z
system:kube-scheduler                                                  2024-02-23T20:44:18Z
system:kubelet-api-admin                                               2024-02-23T20:44:18Z
system:monitoring                                                      2024-02-23T20:44:18Z
system:node                                                            2024-02-23T20:44:18Z
system:node-bootstrapper                                               2024-02-23T20:44:18Z
system:node-problem-detector                                           2024-02-23T20:44:18Z
system:node-proxier                                                    2024-02-23T20:44:18Z
system:persistent-volume-provisioner                                   2024-02-23T20:44:18Z
system:public-info-viewer                                              2024-02-23T20:44:18Z
system:service-account-issuer-discovery                                2024-02-23T20:44:18Z
system:volume-scheduler                                                2024-02-23T20:44:18Z
view                                                                   2024-02-23T20:44:18Z

同样我们可以用下命令来查看某个clusterrole的具体权限

gateman@MoreFine-S500: conf$ kubectl get clusterrole cluster-admin -o yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:annotations:rbac.authorization.kubernetes.io/autoupdate: "true"creationTimestamp: "2024-02-23T20:44:18Z"labels:kubernetes.io/bootstrapping: rbac-defaultsname: cluster-adminresourceVersion: "87"uid: 64f8f954-d9bc-41a0-b4a2-d1a28eaacdda
rules:
- apiGroups:- '*'resources:- '*'verbs:- '*'
- nonResourceURLs:- '*'verbs:- '*'

权限基本都有!





Rolebinding 和 ClusterRoleBinding

这两个都容易理解了, 就是role 和 sa/User的mapping

gateman@MoreFine-S500: conf$ kubectl get rolebinding --all-namespaces
NAMESPACE       NAME                                                ROLE                                                  AGE
ingress-nginx   ingress-nginx                                       Role/ingress-nginx                                    85d
kube-public     kubeadm:bootstrap-signer-clusterinfo                Role/kubeadm:bootstrap-signer-clusterinfo             206d
kube-public     system:controller:bootstrap-signer                  Role/system:controller:bootstrap-signer               206d
kube-system     kube-proxy                                          Role/kube-proxy                                       206d
kube-system     kubeadm:kubelet-config-1.23                         Role/kubeadm:kubelet-config-1.23                      206d
kube-system     kubeadm:nodes-kubeadm-config                        Role/kubeadm:nodes-kubeadm-config                     206d
kube-system     system::extension-apiserver-authentication-reader   Role/extension-apiserver-authentication-reader        206d
kube-system     system::leader-locking-kube-controller-manager      Role/system::leader-locking-kube-controller-manager   206d
kube-system     system::leader-locking-kube-scheduler               Role/system::leader-locking-kube-scheduler            206d
kube-system     system:controller:bootstrap-signer                  Role/system:controller:bootstrap-signer               206d
kube-system     system:controller:cloud-provider                    Role/system:controller:cloud-provider                 206d
kube-system     system:controller:token-cleaner                     Role/system:controller:token-cleaner                  206d





具体例子

参考:
K8S - 用service account 登陆kubectl

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/143150.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

基于AlexNet实现猫狗大战

卷积神经网络介绍 卷积神经网络(Convolutional Neural Network,简称CNN),是一种深度学习模型,特别适用于处理图像、视频等数据。它的核心思想是利用卷积层(Convolutional layers)来提取输入数据…

[C语言]连子棋游戏

文章目录 一、前言二、游戏思路三、游戏方法1、初始化2、判断胜利3、交互4、电脑下棋 四、核心方法说明1、初始化游戏2、销毁棋盘3、显示游戏4、电脑下棋5、用户下棋6、判断游戏状态7、游戏交互 五、游戏效果展示与源码分享1、游戏效果2、源代码 一、前言 对于指针和数组理解尚…

关于std::swap原理

swap 操作交换两个相同类型容器的内容。调用swap之后&#xff0c;两个容器中的元素将会 交换&#xff1a; vector<striong> svec1(10); //10个元素的vector vector<string> svec2(24); //24个元素的vector swap(svec1,svec2); 调…

C++ | Leetcode C++题解之第413题等差数列划分

题目&#xff1a; 题解&#xff1a; class Solution { public:int numberOfArithmeticSlices(vector<int>& nums) {int n nums.size();if (n 1) {return 0;}int d nums[0] - nums[1], t 0;int ans 0;// 因为等差数列的长度至少为 3&#xff0c;所以可以从 i2 开…

一款免费开源且功能强大的思维导图软件-思绪思维导图

思绪思维导图是一款免费开源的思维导图软件&#xff0c;旨在帮助用户有效地组织和表达思想。它提供了丰富的功能&#xff0c;包括支持富文本、图片、图标、超链接、备注、标签等内容&#xff0c;以及关联线、概要等特性。 思绪思维导图下载&#xff1a;https://pan.quark.cn/s…

在STM32工程中使用Mavlink与飞控通信

本文讲述如何在STM32工程中使用Mavlink协议与飞控通信&#xff0c;特别适合自制飞控外设模块的项目。 需求来源&#xff1a; 1、增稳云台里的STM32单片机需要通过串口接收飞控传来的云台俯仰、横滚控制指令和相机拍照控制指令&#xff1b; 2、自制的有害气体采集器需要接收飞…

基于Springboot的医疗健康助手开题报告

文未可获取一份本项目的java源码和数据库参考。 一&#xff0e;选题意义, 研究现状,可行性分析 选题意义&#xff1a;随着科技的高速发展&#xff0c;人们的生活水平也正在稳步提高&#xff0c;解决温饱问题以后&#xff0c;广大人民群众也越来越注重自己的身体健康&#xff0…

[Redis][前置知识][下][高并发架构演进]详细讲解

目录 1.单机架构2.应⽤数据分离架构3.应⽤服务集群架构4.读写分离/主从分离架构5.引⼊缓存⸺冷热分离架构6.垂直分库/分表7.业务拆分⸺微服务8.总结 1.单机架构 只有一台服务器&#xff0c;这个服务器负责所有的工作 大部分公司的产品&#xff0c;都是这种单机架构 2.应⽤数…

自己建网站怎么建

自己建立一个网站可能听起来有点复杂&#xff0c;但实际上&#xff0c;有很多简单且免费的方法可以实现。下面将介绍一些基本步骤&#xff0c;帮助你开始自己建立一个网站。 首先&#xff0c;你需要明确你的网站目的是什么。是个人博客、商业网站&#xff0c;还是其他类型的网…

frp内网穿透功能使用教程

frp 是一款高性能的反向代理应用&#xff0c;专注于内网穿透。它支持多种协议&#xff0c;包括 TCP、UDP、HTTP、HTTPS 等&#xff0c;并且具备 P2P 通信功能。使用 frp&#xff0c;您可以安全、便捷地将内网服务暴露到公网&#xff0c;通过拥有公网 IP 的节点进行中转。 文档地…

深度学习----------------------文本预处理

目录 文本预处理读取数据集词源化词表该部分总代码该部分总代码 整合所有功能该部分总代码 文本预处理 文本预处理&#xff1a;把文本当作一个时序序列 将解析文本的常见预处理步骤。 这些步骤通常包括&#xff1a; ①将文本作为字符串加载到内存中。 ②将字符串拆分为词元&…

【数据结构篇】~链表算法题3(环形链表)

链表算法题3&#xff08;环形链表&#xff09; 环形链表的证明1. 环形链表I​1) 思路2&#xff09;代码实现 2. 环形链表II​1) 思路11) 思路22&#xff09;代码实现 环形链表的证明 1. 环形链表I​ https://leetcode.cn/problems/linked-list-cycle/description/ 1) 思路 判断…

Nginx搭建直播服务器,并用rtmp,http-flv,hls三种模式拉流观看直播的流程

一、首先搭建直播服务器 环境widows&#xff0c;并且已经集成了 &#xff1a;nginx-http-flv-module模块 nginx.conf配置如下&#xff1a; worker_processes 1;#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #error…

计算机人工智能前沿进展-大语言模型方向-2024-09-15

计算机人工智能前沿进展-大语言模型方向-2024-09-15 1. Towards the holistic design of alloys with large language models Z Pei, J Yin, J Neugebauer, A Jain - Nature Reviews Materials, 2024 利用大型语言模型实现合金的全面设计 摘要 文章讨论了大型语言模型在材料…

nginx服务器安装和部署代理

文章目录 Linux下面安装nginx nginx下载官网: [nginx: download](https://nginx.org/en/download.html) 使用yum命令安装gcc环境 yum install -y wget gcc-c pcre-devel zlib-devel openssl-devel//安装多个环境 wget gcc pcre-devel 支持正则表达式 zlib-devel提供了压缩和…

CleanClip vs 传统剪贴板:究竟谁更胜一筹?

在日常工作和生活中,复制粘贴可以说是我们使用最频繁的操作之一。传统的剪贴板功能虽然简单易用,但在功能性和效率上还有很大的提升空间。今天,我们就来比较一下新兴的剪贴板增强工具CleanClip与传统剪贴板,看看到底谁更胜一筹。 1. 剪贴历史管理 传统剪贴板只能存储最后一次…

Java项目实战II基于Java+Spring Boot+MySQL的图书管理系统的设计与实现 (源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、论文参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在信息爆炸…

【图虫创意-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

用来用去还是用回了ueditor-Vue富文本编辑器二次扩展

用来用去还是用回了ueditor-Vue富文本编辑器二次扩展。我们使用用过UEditor、TinyMCE、CKEditor、wangEditor、Tiptap、Quill项目经历过多次富文本的编辑器的选型使用&#xff0c;发现现在新的富文本编辑总感觉还是没达到我们的要求&#xff0c;果然改回了ueditor。 UEditor 是…

PMP与CMMI:两种管理方法的对比

PMP与CMMI&#xff1a;两种管理方法的对比 PMP&#xff1a;专注于项目管理CMMI&#xff1a;组织过程改进的框架总结&#xff1a;互补而非替代 在现代企业管理中&#xff0c;项目管理和组织能力成熟度模型集成&#xff08;CMMI&#xff09;是两个经常被提及的概念。虽然它们都是…