【Kubernetes运维篇】RBAC认证授权详解(一)

这篇具有很好参考价值的文章主要介绍了【Kubernetes运维篇】RBAC认证授权详解(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、RBAC授权认证理论知识

1、什么是RBAC授权?

RBAC是一种基于角色访问控制方式,它将权限和角色相关联,用户加入到角色中,就会拥有角色中的权限,RBAC的核心思想是,将权限赋予给角色,角色中加入多个用户,加入进来的用户会具有角色的权限,如果修改权限也是针对角色进行操作,而不是针对每个用户进行权限操作,这样效率太低了。

【Kubernetes运维篇】RBAC认证授权详解(一),# 3-Kubernetes容器编排,kubernetes,运维,RBAC授权,K8S准入控制,serviceaccount,useraccount

2、认证基本流程

第一步:认证,针对用户做认证,判断用户是否符合要求

K8S中主要通过APIservice对外提供服务,那么就需要针对apiserver做用户认证,如果任何用户都可以访问apiserver,那么就可以随意在K8S集群中创建、删除等操作,这就很危险了,也容易遭到黑客的攻击,所以我们需要针对apiserver做用户授权认证,确保是合法符合要求的用户。

第二步:授权,认证通过,针对用户做权限控制,赋予那些权限

认证通过后仅仅表示此用户是被apiserver进行的用户,可以访问apiserver,但是不一定拥有删除资源,创建资源的权限,需要进行授权操作,常见的授权方式有rbac授权。

第三步:准入控制

用户认证授权通过后,最后一步就是准入控制,K8S提供多种准入控制,有点类似于插件,为apiserver提供更好的 “可拓展性”。请求apiserver时,通过认证,鉴权后、持久化(api对象,保存到etcd前),会经过"准入控制",它可以做变更和验证。

比如:如果我们创建Pod时定义了资源上下限制,但不满足LimitRange规则中定义的资源上下限制,此时LimitRange就会拒绝我们的请求,假如我们定义了一个名称空间叫test,这个名称空间做下资源限制:限制最多可以使用10vCPU、10Gi内存,在这个名称空间下创建的所有Pod都不能超过这个限制。

3、K8S客户端访问apiserver的认证几方式

1、第一种:客户端认证

客户端认证也称双向TLS认证,kubectl在访问apiserver的时候,apiserver要经过CA认证kubectl用户是否合法的,如下图:

【Kubernetes运维篇】RBAC认证授权详解(一),# 3-Kubernetes容器编排,kubernetes,运维,RBAC授权,K8S准入控制,serviceaccount,useraccount

2、第二种:Bearertoken方式

Bearetoken方式,可以理解为apiserver将一个密码通过非对称加密方式告诉你了kubectl,然后通过该密码进行相互访问,如下图:

【Kubernetes运维篇】RBAC认证授权详解(一),# 3-Kubernetes容器编排,kubernetes,运维,RBAC授权,K8S准入控制,serviceaccount,useraccount

3、第三种:Serviceaccount方式

上面客户端认证、Bearertoken都是外部访问apiserver的时候使用的方式,而Serviceaccount这种方式是内部访问Pod和apiserver交互采用的一种方式。

Serviceaccount包括了Namespace、Token、CA、且通过目录挂载的方式给予Pod,当Pod运行起来的时候,会读取到这些信息,从而使用该方式和apiserver进行通信,如下图:

【Kubernetes运维篇】RBAC认证授权详解(一),# 3-Kubernetes容器编排,kubernetes,运维,RBAC授权,K8S准入控制,serviceaccount,useraccount

当我们使用kubectl操作K8S资源时,需要确定我们使用那个用户进行1访问那个K8S集群,kubectl操作默认读取 /root/.kube/config文件,也可以使用 kubectl config view 命令进行差看config文件内容。

如果config文件没有在/root/.kube/config ,可以使用 --kubeconfig 参数进行指定文件位置:

kubectl get nodes --kubeconfig=/root/.kube/config 

config文件内容如下:

【Kubernetes运维篇】RBAC认证授权详解(一),# 3-Kubernetes容器编排,kubernetes,运维,RBAC授权,K8S准入控制,serviceaccount,useraccount

4、RBAC授权常见角色绑定方式

1、第一种:用户基于RoleBinding绑定到Role上

特点:RoleBinding是具有名称空间限制的,这种方式只限定在Rolebinding的名称空间下,如下图:

【Kubernetes运维篇】RBAC认证授权详解(一),# 3-Kubernetes容器编排,kubernetes,运维,RBAC授权,K8S准入控制,serviceaccount,useraccount

2、第二种:用户基于RoleBinding绑定到ClusterRole上

特点:没有名称空间限制,如下图:

【Kubernetes运维篇】RBAC认证授权详解(一),# 3-Kubernetes容器编排,kubernetes,运维,RBAC授权,K8S准入控制,serviceaccount,useraccount

3、第三种:用户基于ClusterRoleBinding绑定到ClusterRole上

特点:对任何名称空间下用户都具有ClusteRrole所具有的权限,如下图:

【Kubernetes运维篇】RBAC认证授权详解(一),# 3-Kubernetes容器编排,kubernetes,运维,RBAC授权,K8S准入控制,serviceaccount,useraccount

5、准入控制插件基本介绍

官方中文参考文档

在K8S中准入控制器的模块有很多,其中比较常用的有LimitRanger、ResourceQuota、ServiceAccount,也是K8S默认启用的准入模块(具体看K8S版本),我们只需要定义对应的规则即可。

如果是使用kubeadm方式搭建的K8S集群,我们可以修改 /etc/kubernetes/manifests/kube-apiserver.yaml文件中--enable-admission-plugins 参数定义使用的准入插件,多个使用逗号隔开,改完重启kubelet即可生效。

二、Useraccount、Serviceaccount基本使用

1、Useraccount、Serviceaccount介绍

Useraccount:用户账户,是给K8S集群外部用户使用的,如kubectl访问K8S集群要用useraccount用户,kubeadm搭建的K8s集群默认useraccount用户是kubernetes-admin

apiserver需要对客户端做认证,使用kubeadm安装的K8s,会在用户家目录下创建一个认证配置文件 .kube/config 这里面保存了客户端访问API Server的密钥相关信息,这样当用kubectl访问k8s时,它就会自动读取该配置文件,向API Server发起认证,然后完成操作请求。

Serviceaccount:服务账户,是给Pod使用的账户,就是在Pod容器内可以访问到apiserver,serviceaccount仅局限它所在的名称空间,每个名称空间创建是都会自动创建一个默认的serviceaccount,在创建Pod时,指定了此名称空间,且没有指定serviceaccount,那么这个Pod会使用此名称空间下默认的serviceaccount。

如下图,是在创建Pod时没有指定serviceaccount,会使用名称空间下默认的serviceaccount。

【Kubernetes运维篇】RBAC认证授权详解(一),# 3-Kubernetes容器编排,kubernetes,运维,RBAC授权,K8S准入控制,serviceaccount,useraccount

2、案例:创建ServiceAccount绑定到Pod

第一步:创建名为sa-test的ServiceAccount

 kubectl create sa sa-test

第二步:创建Pod指定ServiceAccount

cat sa-test.yaml 
---
apiVersion: v1
kind: Pod
metadata:
  name: sa-test
  namespace: default
spec:
  serviceAccountName: sa-test  # 指定sa
  containers:
  - name: sa-nginx
    image: nginx
    imagePullPolicy: IfNotPresent
kubectl apply -f sa-test.yaml

第三步:进入容器测试是否可以调用apiserver接口

kubectl exec -it sa-test  -- /bin/bash

指定sa后证书存放在/var/run/secrets/kubernetes.io/serviceaccount/目录

cd /var/run/secrets/kubernetes.io/serviceaccount/
ls
ca.crt	namespace  token

我们指定证书调用apiserver接口

curl --cacert ./ca.crt -H "Authorization: Bearer $(cat ./token)" https://kubernetesapi/v1/namespaces/kube-system

返回信息如下:就是被拒绝访问了,原因是我们只创建了sa用户,没进行授权

【Kubernetes运维篇】RBAC认证授权详解(一),# 3-Kubernetes容器编排,kubernetes,运维,RBAC授权,K8S准入控制,serviceaccount,useraccount

第四步:对sa做授权,然后在进行访问

创建一个 ClusterRoleBinding(集群角色绑定)来授予名为 sa-test 的服务账号在 default 命名空间下拥有 cluster-admin 集群角色的权限。通过这个绑定,sa-test 可以在整个集群中拥有最高权限,包括对集群节点、命名空间、Pod 等资源的管理权限。

kubectl create clusterrolebinding sa-test-admin --clusterrole=cluster-admin  --serviceaccount=default:sa-test

进入容器在请求一下:

kubectl exec -it sa-test  -- /bin/bash
cd /var/run/secrets/kubernetes.io/serviceaccount/

curl --cacert ./ca.crt -H "Authorization: Bearer $(cat ./token)" https://kubernetesapi/v1/namespaces/kube-system

进行授权后就可以访问到apiserver接口了如下图:

【Kubernetes运维篇】RBAC认证授权详解(一),# 3-Kubernetes容器编排,kubernetes,运维,RBAC授权,K8S准入控制,serviceaccount,useraccount

由于RBAC授权内容较多,分两次进行讲解,请关下篇文章,感谢支持~文章来源地址https://www.toymoban.com/news/detail-596401.html

到了这里,关于【Kubernetes运维篇】RBAC认证授权详解(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Kubernetes运维篇】ingress-nginx实现业务灰度发布详解

    1、场景一:将新版本灰度给部分用户 假设线上运行了一套对外提供 7 层服务的 Service A 服务,后来开发了个新版本 Service AA需要上线,但不想直接替换掉原来的 Service A,希望先灰度一小部分用户,等运行一段时间足够稳定了再逐渐全量上线新版本,最后平滑下线旧版本。 这

    2024年02月15日
    浏览(42)
  • K8s RBAC认证授权深度解析

    ​ 🐇明明跟你说过:个人主页 🏅个人专栏:《Kubernetes航线图:从船长到K8s掌舵者》 🏅 🔖行路有良友,便是天堂🔖 目录 一、前言 1、k8s简介 2、RBAC简介  二、RBAC核心概念 1、角色(Role)与集群角色(ClusterRole) 2、角色绑定(RoleBinding)与集群角色绑定(ClusterRoleBindin

    2024年04月28日
    浏览(25)
  • 【容器编排】初识 Kubernetes

    目录 1.简介 2.为什么需要 k8s 3.k8s 能做什么? 4.k8s 不是什么? 1.简介 摘取官网: 概述 | Kubernetes         Kubernetes 这个名字源于希腊语,意为 舵手 或 飞行员 。k8s 这个缩写是因为 k 和 s 之间有八个字符的关系。 Google 在 2014 年开源了 Kubernetes 项目。 Kubernetes 建立在 Google 大规模

    2024年02月14日
    浏览(46)
  • 【云原生】容器编排工具Kubernetes

    目录 一、 K8S介绍 官网地址: 1.1docker编排与k8s编排相比 1.2特性 1.3功能 二、K8S重要组件 2.1核心组件 (1)Kube-apiserver (2)Kube-controller-manager (3)Kube-scheduler (4)Node ①kubelet ②kube-proxy ③docker (5)etcd 2.2Kubernetes工作原理 三、Pod 3.1 Pod控制器 (1)Deployment (2)ReplicaSet (3)

    2024年02月09日
    浏览(33)
  • 【云原生】Kubernetes容器编排工具

    目录 1. K8S介绍 1.1 k8s的由来 下载地址 1.2 docker编排与k8s编排相比 1.3 传统后端部署与k8s 的对比 传统部署 k8s部署  ​2. k8s的集群架构与组件 (1) Kube-apiserver (2)Kube-controller-manager  (3)Kube-scheduler   2.2 k8s的配置存储中心 2.3  k8s的Node 组件   (1)Kubelet   (2)Kube-Proxy 

    2024年02月10日
    浏览(28)
  • 容器编排的未来:探索基于Kubernetes的微服务编排解决方案

    作者:禅与计算机程序设计艺术 当今的云计算环境下,容器技术正在成为主流,越来越多的公司选择基于容器技术实现应用部署及运行。容器编排技术也逐渐被普遍采用。通过容器编排工具可以将复杂的分布式系统架构部署、管理及扩展起来,从而提供一个高可用、易于维护

    2024年02月14日
    浏览(26)
  • Docker和Kubernetes:构建现代应用容器编排系统

    作者:禅与计算机程序设计艺术 Docker是一个开源的应用容器引擎,可以轻松打包、部署及运行应用程序。Kubernetes(简称K8s)是一个开源的,用于管理云平台中多个主机上的容器化的应用的容器集群管理系统。通过对Docker和Kubernetes的结合,能够更高效地自动化地部署和管理容

    2024年02月07日
    浏览(30)
  • 【容器化应用程序设计和开发】2.2 容器编排和Kubernetes调度

    往期回顾: 第一章:【云原生概念和技术】 第二章:2.1 容器化基础知识和Docker容器 第二章:2.2 Dockerfile 的编写和最佳实践 容器编排是指自动化部署、管理和运行容器化应用程序的过程。Kubernetes 是一个流行的容器编排平台,它提供了一种自动化的方式来创建、部署和管理容

    2024年02月03日
    浏览(34)
  • 容器编排工具的比较:Kubernetes、Docker Swarm、Nomad

    随着容器化技术的普及,容器编排工具成为了现代应用部署和管理的重要组成部分。容器编排工具能够自动化容器的部署、扩展和管理,从而提高应用的可靠性和可伸缩性。在众多的容器编排工具中,Kubernetes、Docker Swarm和Nomad是三个备受关注的主要候选。本文将对这三个工具

    2024年02月09日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包