企业级运维之云原生与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访问控制
RAM(Resource Access Management)资源访问控制服务,是阿里云提供的一项管理用户身份与资源访问权限的服务。
运维人员通过RAM用户或RAM角色管理云服务资源是一个常见的场景,然而默认情况下,RAM用户或RAM角色没有使用云服务OpenAPI的任何权限。为了保证RAM用户或RAM角色的正常使用,需要对RAM用户或RAM角色授权。
OpenAPI接口:
- CreateCluster
- DescribeClusterDetail
- ScaleCluster
- DescribeAddons
- DescribeClusterNodes
2. 集群RBAC权限
RBAC(Role-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:有Allow和Deny两种值,表示允许/拒绝;
- 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
包含两个组:用户组权限、权限
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
包含两部分:信任策略、权限
以terway组件为例:
用户创建集群后,将KubernetesWorkerRole绑定在node节点;当用户在集群中创建Pod时,terway组件可以监听到创建Pod的事件,接着通过ECS元数据获取STS token,然后调用接口向VPC申请私网IP,并将IP分配给Pod。
三、 集群RBAC权限
1. 集群RBAC权限
RBAC是基于对用户关联角色的方式来控制用户对集群资源的访问,这里的“用户”是广义的,它可以是一个人、一个 ServiceAccount,或者一组用户或ServiceAccount。
权限三要素:
- 主体 Subject:可以为自然人(开发人员、集群管理人员,等),系统组件,Pod进程等;
- 操作对象API Resources:在Kubernetes集群中的各类资源,比如Pod、Nodes等;
- 具体操作Verbs:对目标对象的具体操作,比如list、get、create等;
2. 集群RBAC资源
集群RBAC资源关系图
RBAC API声明了四种 Kubernetes 资源对象:Role & ClusterRole、RoleBinding & ClusterRoleBinding,可以分为两组:
- Role(角色)和ClusterRole(集群角色):指定在资源上可以执行哪些操作;
- RoleBinding(角色绑定)和ClusterRoleBinding(集群角色绑定):将上述角色绑定到特定的用户、组或者 ServiceAccounts上。
Role和ClusterRole的区别主要是作用域的不同:
- Role:是用来指定命名空间范围内的权限的,在创建Role的时候,必须指定命名空间;
- ClusterRole:定义的是集群范围内的权限(命名空间无关),创建ClusterRole的时候不需要指定命名空间;
3. Role & ClusterRole
Role & ClusterRole指定哪些资源上可以执行哪些操作?
如下图所示,Role和ClusterRole的唯一区别是Role在创建时需要指定命名空间namespace:test。
4. verbs设置
verbs是在请求的资源上执行的请求的动词。
下图列举了kubectl的verbs与RBAC的verbs的对应关系:
5. RoleBinding & ClusterRoleBinding
角色绑定(Role Binding)是将角色中定义的权限赋予一个或者一组用户(定义了谁可以做这些操作)。
RoleBinding和ClusterRoleBinding的区别同样是RoleBinding多了一个命名空间的字段。
在上图中左边的RoleBinding字段代表允许dev用户对test命名空间的pod-access资源进行获取查看和监控;右边的ClusterRoleBinding字段代表允许dev用户对所有命名空间的pod-access资源进行获取查看和监控。
6. 集群RBAC授权
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;
ServiceAccount使用
使用ServiceAccount Token访问Kubernetes集群。
本讲小结
- ACK集群的RAM权限以及RBAC权限的原理;
- 集群中的组件如何使用的服务角色权限 ;
- ServiceAccount的介绍以及使用;
思考:
- 如何查询以及修改子账户以及ServiceAccount的权限?
- 如何使用curl命令获取default命名空间下的Pod列表?