开发者学堂课程【企业级运维之云原生与 Kubernets 实战课程: ACK 集群权限管理】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/913/detail/14564
ACK 集群权限管理
本章目标
熟悉集群的 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,资源遵循的格式:a
c
s:<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 列表?