企业级运维之云原生与Kubernetes实战课程 - 第四章第1讲 ACK集群权限管理

本文涉及的产品
访问控制,不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 1. ACK集群权限管理2. ACK集群升级3. ACK集群节点管理4. ACK集群弹性伸缩5. ACK集群故障处理与疑难处置6. 实验四:流水线部署

企业级运维之云原生与Kubernetes实战课程

第四章 ACK集群管理

 

 

视频地址

https://developer.aliyun.com/learning/course/913/detail/14564

 

本章目标

 

  • 熟悉集群的RAM权限以及集群的RBAC权限、学会如何管理集群权限以及集群组件获取RAM权限的原理;
  • 了解集群升级的原理,以及如何定位集群升级失败的原因;
  • 熟悉集群自动伸缩的原理,常见的配置以及如何定位自动伸缩失败的问题;
  • 熟悉ACK集群常见故障以及排查手段。

 

本章目录

 

1.  ACK集群权限管理

2.  ACK集群升级

3.  ACK集群节点管理

4.  ACK集群弹性伸缩

5.  ACK集群故障处理与疑难处置

6.  实验四:流水线部署

 

 

第四章第1 ACK集群权限管理

 

一、ACK集群权限简介

 

权限是用户、应用程序账号可以操作集群指定资源的一种集合。

 

ACK集群权限体系分为两类:

 

1.  RAM访问控制

 

RAMResource Access Management)资源访问控制服务,是阿里云提供的一项管理用户身份与资源访问权限的服务。

 

运维人员通过RAM用户或RAM角色管理云服务资源是一个常见的场景,然而默认情况下,RAM用户或RAM角色没有使用云服务OpenAPI的任何权限。为了保证RAM用户或RAM角色的正常使用,需要对RAM用户或RAM角色授权。

 

OpenAPI接口:

 

  • CreateCluster
  • DescribeClusterDetail
  • ScaleCluster
  • DescribeAddons
  • DescribeClusterNodes

 

2.  集群RBAC权限

 

RBACRole-Based Access Control)是基于角色的访问控制。在 RBAC 中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限,极大简化了权限的管理。这样管理都是层级相互依赖的,权限赋予给角色,而把角色又赋予用户,这样的权限设计很清楚,管理起来很方便。

 

RBAC权限通过APISever接口获取:

 

  • /api
  • /api/v1/Pod s
  • /api/v1/services
  • /api/v1/replicationcontrollers

 

集群RBAC权限配置步骤:

 

参考《配置RAM用户或RAM角色RBAC权限》:https://help.aliyun.com/document_detail/87656.html

 

  • 使用主账号登录容器服务管理控制台;
  • 在控制台左侧导航栏中,单击授权管理;
  • 在授权管理页面的选择子账号页签配置管理权限,在选择子账号页签单击子账号页签,在需要授权的RAM用户右侧单击管理权限,进入集群RBAC配置页签;
  • 单击集群RBAC配置页面的添加权限,添加集群或命名空间级别的权限配置,并选择相应的预置角色;也可以单击配置行首的减号删除目标角色,完成后单击下一步;
  • 在授权提交页签,如果出现授权成功,表示该RAM用户或RAM角色已被授予RAM权限,此时也已完成RBAC授权,操作结束。

 

二、访问控制(RAM鉴权)

 

RAM访问控制提供了授权子账号管理云产品资源的能力,它的本质是对产品的OpenAPI接口进行鉴权。

 

1.  RAM授权

 

授权示例:

 

{

 "Statement": [

   {

     "Action": [

       "cs:Get*",

       "cs:ScaleCluster",

       "cs:DeleteCluster"

       ],

     "Effect": "Allow",

     "Resource": [

       "acs:cs:*:*:cluster/<yourclusterID>"

     ]

   }

 ],

 "Version": "1"

}

 

说明:

 

  • Action:接口列表,cs表示容器产品,cs:ScaleCluser表示扩容集群的接口;
  • Effect:有AllowDeny两种值,表示允许/拒绝;
  • Resource:定义访问的资源对象,acs:cs:*:*:cluster/<yourclusterID>表示的是某个具体的集群id,资源遵循的格式:acs:<service-name>:<region>:<account-id>:<relative-id>
  • Condition(可选项):表示条件选项,比如限制哪些IP可以调用上述接口。

 

2.  RAM用户授权

 

RAM用户是一个身份实体,它通常代表您的组织中需要访问云资源的人员或应用程序。

 

a.  场景:

 

  • 当企业有多种云资源时,为不同员工(应用系统)创建RAM用户并独立分配权限,并按需设置登录密码或创建访问密钥,做到责权一致;
  • 禁止多员工共享同一个云账号,共享云账号可能导致密码或访问密钥泄露;
  • 随时可以撤销用户账号身上的权限,也可以随时删除其创建的用户账号;

 

b.  特点:

 

  • RAM用户是RAM的一种实体身份类型,有确定的身份ID和身份凭证,它通常与某个确定的人或应用程序一一对应。

 

c.  示例:

 

权限名称:AliyunCSFullAccess

 

包含两个组:用户组权限、权限

 image.png

 

3.  用户角色授权

 

RAM角色是一种虚拟用户,与实体用户(阿里云账号、RAM用户和云服务)和教科书式角色(Textbook role)不同,RAM角色没有确定的身份认证密钥,需要被一个受信的实体用户扮演才能正常使用。

 

RAM角色机制是向您信任的实体(例如:RAM用户、某个应用或阿里云服务)进行授权的一种安全方法。

 

a.  场景:

 

  • 其他云账号中的RAM用户需要进行跨账户的资源访问 ;
  • ECS示例运行的应用程序代码需要对云资源执行操作;
  • 某些阿里云服务需要对账户中的资源进行操作才能提供服务;
  • 企业的身份提供商IdP,可以用于角色SSO

 

b.  特点:

 

  • RAM角色颁发短时有效的访问令牌(STS令牌),使其成为一种更安全的授予访问权限的方法。

 

c.  RAM角色类型:

参考《RAM角色概览》:https://help.aliyun.com/document_detail/93689.html

 

  • 阿里云账号:允许RAM用户所扮演的角色。扮演角色的RAM用户可以是自己的阿里云账号,也可以是其他阿里云账号。该类角色主要用于解决跨账号访问和临时授权问题;
  • 阿里云服务:允许云服务所扮演的角色。该类角色主要用于解决跨云服务授权访问的问题;
  • 身份提供商:允许受信身份提供商下的用户所扮演的角色。该类角色主要用于实现与阿里云的角色SSO

 

d.  示例:

 

角色名称:AliyunCSClusterRole

 

包含两部分:信任策略、权限

 image.png

 

terway组件为例:

image.png

 

用户创建集群后,将KubernetesWorkerRole绑定在node节点;当用户在集群中创建Pod时,terway组件可以监听到创建Pod的事件,接着通过ECS元数据获取STS token,然后调用接口向VPC申请私网IP,并将IP分配给Pod

 

三、 集群RBAC权限

 

1.  集群RBAC权限

 

RBAC是基于对用户关联角色的方式来控制用户对集群资源的访问,这里的“用户”是广义的,它可以是一个人、一个 ServiceAccount,或者一组用户或ServiceAccount

 

权限三要素:

 

  • 主体 Subject:可以为自然人(开发人员、集群管理人员,等),系统组件,Pod进程等;
  • 操作对象API Resources:在Kubernetes集群中的各类资源,比如PodNodes等;
  • 具体操作Verbs:对目标对象的具体操作,比如listgetcreate等;

 image.png

 

2.  集群RBAC资源

 image.png

集群RBAC资源关系图

 

RBAC API声明了四种 Kubernetes 资源对象:Role & ClusterRoleRoleBinding & ClusterRoleBinding,可以分为两组:

 

  • Role(角色)ClusterRole(集群角色):指定在资源上可以执行哪些操作;
  • RoleBinding(角色绑定)ClusterRoleBinding(集群角色绑定):将上述角色绑定到特定的用户、组或者 ServiceAccounts上。

 

RoleClusterRole的区别主要是作用域的不同:

 

  • Role:是用来指定命名空间范围内的权限的,在创建Role的时候,必须指定命名空间;
  • ClusterRole:定义的是集群范围内的权限(命名空间无关),创建ClusterRole的时候不需要指定命名空间;

 

3.  Role & ClusterRole

 

Role & ClusterRole指定哪些资源上可以执行哪些操作?

 

如下图所示,RoleClusterRole的唯一区别是Role在创建时需要指定命名空间namespace:test

 image.png

 

4.  verbs设置

 

verbs是在请求的资源上执行的请求的动词。

 

下图列举了kubectlverbsRBACverbs的对应关系:

 image.png

 

5.  RoleBinding & ClusterRoleBinding

 

角色绑定(Role Binding)是将角色中定义的权限赋予一个或者一组用户(定义了谁可以做这些操作)。

RoleBindingClusterRoleBinding的区别同样是RoleBinding多了一个命名空间的字段。

 image.png

 

在上图中左边的RoleBinding字段代表允许dev用户对test命名空间的pod-access资源进行获取查看和监控;右边的ClusterRoleBinding字段代表允许dev用户对所有命名空间的pod-access资源进行获取查看和监控。

 

6.  集群RBAC授权

 image.png

 

RBAC授权体系总结:RBAC授权体系可以总结为三个对象两个关系,三个对象是主体(用户)、角色和资源,两个关系即主体(用户)到角色的关系,角色和资源的关系。

 

思考:在命名空间下的RoleBinding引用不在命名空间下的ClusterRole,这样的绑定有什么效果?

 

7.  子账号RBAC权限授权

 

控制台给子账号RBAC授权后,如何查询子账号拥有的RBAC权限?

 

  • kubectl get clusterrolebinding|grep 子账号uid,找出关联的clusterrole
  • kubectl get ClusterRole ClusterRoleName -o yaml查看对应的权限,ClusterRoleName是上面一步找出的关联clusterrole

 

四、 ServiceAccount

 

ServiceAccount是为了方便Pod里面的进程调用Kubernetes API或其他外部服务而设计的。

 

特点:

 

  • User account是为人设计的,而ServiceAccount则是为Pod中的进程调用Kubernetes API而设计;
  • User account是跨namespace的,而ServiceAccount则是仅局限它所在的namespace
  • 每个namespace都会自动创建一个default service account
  • 可以在创建Pod的时候为Pod制定一个自定义的ServiceAccount,用来代替default service account

 image.png

 

ServiceAccount使用

 

使用ServiceAccount Token访问Kubernetes集群。

 image.png

 

 

本讲小结

 

  • ACK集群的RAM权限以及RBAC权限的原理;
  • 集群中的组件如何使用的服务角色权限 ;
  • ServiceAccount的介绍以及使用;

 

思考:

 

  • 如何查询以及修改子账户以及ServiceAccount的权限?
  • 如何使用curl命令获取default命名空间下的Pod列表?

 

 

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
运维 Cloud Native Docker
云原生技术入门:Docker容器化实战
【9月更文挑战第20天】本文将引导你走进云原生技术的世界,通过Docker容器化技术的实战演练,深入理解其背后的原理和应用。我们将一起探索如何在云平台上利用Docker简化部署、扩展和管理应用程序的过程,并揭示这一技术如何改变现代软件的开发和运维模式。
|
2月前
|
存储 Kubernetes 负载均衡
CentOS 7.9二进制部署K8S 1.28.3+集群实战
本文详细介绍了在CentOS 7.9上通过二进制方式部署Kubernetes 1.28.3+集群的全过程,包括环境准备、组件安装、证书生成、高可用配置以及网络插件部署等关键步骤。
404 3
CentOS 7.9二进制部署K8S 1.28.3+集群实战
|
30天前
|
存储 运维 监控
实时计算Flink版在稳定性、性能、开发运维、安全能力等等跟其他引擎及自建Flink集群比较。
实时计算Flink版在稳定性、性能、开发运维和安全能力等方面表现出色。其自研的高性能状态存储引擎GeminiStateBackend显著提升了作业稳定性,状态管理优化使性能提升40%以上。核心性能较开源Flink提升2-3倍,资源利用率提高100%。提供一站式开发管理、自动化运维和丰富的监控告警功能,支持多语言开发和智能调优。安全方面,具备访问控制、高可用保障和全链路容错能力,确保企业级应用的安全与稳定。
38 0
|
2月前
|
Kubernetes 负载均衡 前端开发
二进制部署Kubernetes 1.23.15版本高可用集群实战
使用二进制文件部署Kubernetes 1.23.15版本高可用集群的详细教程,涵盖了从环境准备到网络插件部署的完整流程。
98 2
二进制部署Kubernetes 1.23.15版本高可用集群实战
|
1月前
|
Kubernetes 网络协议 Docker
Kubernetes入门到进阶实战
Kubernetes入门到进阶实战
76 0
|
2月前
|
存储 Kubernetes Docker
深入探索容器化技术:Docker 实战与 Kubernetes 管理
深入探索容器化技术:Docker 实战与 Kubernetes 管理
70 0
|
2月前
|
Kubernetes Ubuntu 网络安全
Ubuntu基于kubeadm快速部署K8S实战
关于如何在Ubuntu系统上使用kubeadm工具快速部署Kubernetes集群的详细实战指南。
176 2
|
2月前
|
Kubernetes Linux API
CentOS 7.6使用kubeadm部署k8s 1.17.2测试集群实战篇
该博客文章详细介绍了在CentOS 7.6操作系统上使用kubeadm工具部署kubernetes 1.17.2版本的测试集群的过程,包括主机环境准备、安装Docker、配置kubelet、初始化集群、添加节点、部署网络插件以及配置k8s node节点管理api server服务器。
116 0
CentOS 7.6使用kubeadm部署k8s 1.17.2测试集群实战篇
|
2月前
|
Kubernetes 容器
Kubernetes附加组件Dashboard部署实战篇
关于如何在Kubernetes集群中部署和配置Dashboard组件的详细实战指南,涵盖了从创建证书、部署Dashboard、设置服务访问到登录认证的完整流程。
371 0
Kubernetes附加组件Dashboard部署实战篇
|
3月前
|
Kubernetes Cloud Native Docker
云原生入门:Docker容器化部署实战
【8月更文挑战第31天】在数字化浪潮中,云原生技术成为企业转型的助推器。本文通过Docker容器化部署的实践案例,引导读者从零基础到掌握基础的云原生应用部署技能。我们将一起探索Docker的魅力,学习如何将一个应用容器化,并在云平台上运行起来,为深入云原生世界打下坚实基础。