企业级运维之云原生与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搭建和管理企业级网站应用
相关文章
|
2月前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
115 2
|
15天前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
86 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
2月前
|
Kubernetes Cloud Native 微服务
云原生入门与实践:Kubernetes的简易部署
云原生技术正改变着现代应用的开发和部署方式。本文将引导你了解云原生的基础概念,并重点介绍如何使用Kubernetes进行容器编排。我们将通过一个简易的示例来展示如何快速启动一个Kubernetes集群,并在其上运行一个简单的应用。无论你是云原生新手还是希望扩展现有知识,本文都将为你提供实用的信息和启发性的见解。
|
2月前
|
Kubernetes Cloud Native 开发者
云原生入门:Kubernetes的简易指南
【10月更文挑战第41天】本文将带你进入云原生的世界,特别是Kubernetes——一个强大的容器编排平台。我们将一起探索它的基本概念和操作,让你能够轻松管理和部署应用。无论你是新手还是有经验的开发者,这篇文章都能让你对Kubernetes有更深入的理解。
|
2月前
|
运维 Kubernetes Cloud Native
云原生技术入门:Kubernetes和Docker的协同工作
【10月更文挑战第43天】在云计算时代,云原生技术成为推动现代软件部署和运行的关键力量。本篇文章将带你了解云原生的基本概念,重点探讨Kubernetes和Docker如何协同工作以支持容器化应用的生命周期管理。通过实际代码示例,我们将展示如何在Kubernetes集群中部署和管理Docker容器,从而为初学者提供一条清晰的学习路径。
|
2月前
|
运维 监控 应用服务中间件
自动化运维的利器:Ansible实战应用
【10月更文挑战第41天】在现代IT运维领域,自动化已成为提高效率、减少错误的关键。Ansible作为一种简单而强大的自动化工具,正被越来越多的企业采纳。本文将通过实际案例,展示如何使用Ansible简化日常运维任务,包括配置管理和批量部署等,旨在为读者提供一种清晰、易懂的自动化解决方案。
32 1
|
2月前
|
Kubernetes 负载均衡 Cloud Native
探索Kubernetes:云原生应用的基石
探索Kubernetes:云原生应用的基石
|
2月前
|
运维 Ubuntu 应用服务中间件
自动化运维工具Ansible的实战应用
【10月更文挑战第36天】在现代IT基础设施管理中,自动化运维已成为提升效率、减少人为错误的关键手段。本文通过介绍Ansible这一流行的自动化工具,旨在揭示其在简化日常运维任务中的实际应用价值。文章将围绕Ansible的核心概念、安装配置以及具体使用案例展开,帮助读者构建起自动化运维的初步认识,并激发对更深入内容的学习兴趣。
74 4
|
2月前
|
Kubernetes 监控 负载均衡
深入云原生:Kubernetes 集群部署与管理实践
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其弹性、可扩展性成为企业IT架构的首选。本文将引导你了解如何部署和管理一个Kubernetes集群,包括环境准备、安装步骤和日常维护技巧。我们将通过实际代码示例,探索云原生世界的秘密,并分享如何高效运用这一技术以适应快速变化的业务需求。
74 1
|
2月前
|
Kubernetes Cloud Native 云计算
云原生入门:Kubernetes 和容器化基础
在这篇文章中,我们将一起揭开云原生技术的神秘面纱。通过简单易懂的语言,我们将探索如何利用Kubernetes和容器化技术简化应用的部署和管理。无论你是初学者还是有一定经验的开发者,本文都将为你提供一条清晰的道路,帮助你理解和运用这些强大的工具。让我们从基础开始,逐步深入了解,最终能够自信地使用这些技术来优化我们的工作流程。