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

本文涉及的产品
访问控制,不限时长
简介: 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搭建和管理企业级网站应用
相关文章
|
4月前
|
Kubernetes 监控 容灾
ACK One舰队管理:企业级多集群管理解决方案
ACK One舰队管理是阿里云为您提供的强大的多集群管理方案,功能众多:GitOps应用分发、多集群网关、多集群Service、全局可观测、服务网格、统一权限管理等,方便您轻松应对混合云、多集群、容灾等场景的问题,简化多集群管理。
|
4月前
|
运维 Kubernetes Go
"解锁K8s二开新姿势!client-go:你不可不知的Go语言神器,让Kubernetes集群管理如虎添翼,秒变运维大神!"
【8月更文挑战第14天】随着云原生技术的发展,Kubernetes (K8s) 成为容器编排的首选。client-go作为K8s的官方Go语言客户端库,通过封装RESTful API,使开发者能便捷地管理集群资源,如Pods和服务。本文介绍client-go基本概念、使用方法及自定义操作。涵盖ClientSet、DynamicClient等客户端实现,以及lister、informer等组件,通过示例展示如何列出集群中的所有Pods。client-go的强大功能助力高效开发和运维。
444 1
|
4月前
|
运维 Kubernetes 监控
云原生时代的运维革新:Kubernetes的自动化之旅
在云原生技术不断演进的今天,Kubernetes已成为容器编排的事实标准。本文将深入探讨Kubernetes如何通过自动化工具和实践,为运维团队提供高效率、高可用性的解决方案,从而推动运维工作向更高效、智能化的方向转型。
96 6
|
4月前
|
Kubernetes 网络协议 Python
运维开发.Kubernetes探针与应用
运维开发.Kubernetes探针与应用
166 2
|
4月前
|
运维 Kubernetes 监控
云原生时代的运维革新:Kubernetes 在现代 IT 架构中的角色
随着云计算的不断演进,传统的运维模式已逐渐不能满足快速迭代和弹性伸缩的需求。本文将深入探讨 Kubernetes 作为容器编排工具如何引领运维领域的变革,并展示其在现代 IT 架构中的应用价值。通过实例分析,我们将了解 Kubernetes 如何优化资源管理、自动化部署和提高系统可靠性,同时指出实践中可能遇到的挑战及应对策略。
|
4月前
|
运维 Kubernetes 监控
自动化运维:使用Python脚本实现系统监控云原生技术实践:Kubernetes在现代应用部署中的角色
【8月更文挑战第31天】在现代IT运维管理中,自动化已成为提高效率和准确性的关键。本文将通过一个Python脚本示例,展示如何实现对服务器的自动监控,包括CPU使用率、内存占用以及磁盘空间的实时监测。这不仅帮助运维人员快速定位问题,也减轻了日常监控工作的负担。文章以通俗易懂的语言,逐步引导读者理解并实践自动化监控的设置过程。 【8月更文挑战第31天】本文旨在探索云原生技术的核心—Kubernetes,如何革新现代应用的开发与部署。通过浅显易懂的语言和实例,我们将一窥Kubernetes的强大功能及其对DevOps文化的影响。你将学会如何利用Kubernetes进行容器编排,以及它如何帮助你的
|
5月前
|
Kubernetes API 索引
|
5月前
|
Kubernetes Cloud Native 持续交付
云原生架构的核心组成部分通常包括容器化(如Docker)、容器编排(如Kubernetes)、微服务架构、服务网格、持续集成/持续部署(CI/CD)、自动化运维(如Prometheus监控和Grafana可视化)等。
云原生架构的核心组成部分通常包括容器化(如Docker)、容器编排(如Kubernetes)、微服务架构、服务网格、持续集成/持续部署(CI/CD)、自动化运维(如Prometheus监控和Grafana可视化)等。
|
4月前
|
运维 Kubernetes Cloud Native
Kubernetes云原生问题之在托管Kubernetes服务中云服务商和用户的运维责任划分如何解决
Kubernetes云原生问题之在托管Kubernetes服务中云服务商和用户的运维责任划分如何解决
42 0
|
4月前
|
弹性计算 运维 Kubernetes
云原生时代的运维革新:Kubernetes在现代IT架构中的角色
随着云计算的日益普及,传统运维模式逐渐不能满足现代企业的需求。本文将深入探讨Kubernetes如何在云原生时代重塑运维工作,包括自动化部署、弹性伸缩、服务发现等关键特性,以及它如何帮助企业实现敏捷性和效率的双重提升。
109 0