ack-pod-identity-webhook可以更便捷地使用容器计算服务提供的RRSA(RAM Roles for Service Accounts)特性,它可以为应用Pod自动注入应用依赖的挂载OIDC Token和环境变量配置,免去繁琐的手动配置工作。本文介绍ack-pod-identity-webhook的功能、使用说明和变更记录。
组件介绍
ack-pod-identity-webhook组件的架构图如下所示。
使用示例
本示例部署的应用中,将使用RRSA特性扮演指定角色获取当前账号下集群列表信息。相关信息如下。
-
命名空间:rrsa-demo
-
服务账户:demo-sa
-
RAM角色:ack-pod-identity-webhook-demo
当为Pod所在命名空间增加pod-identity.alibabacloud.com/injection: 'on'标签后,ack-pod-identity-webhook组件将根据Pod使用的服务账号的注解配置,自动为该Pod注入相关配置项。使用示例的操作步骤如下。
-
为集群开启RRSA功能。
-
登录容器计算服务控制台,在左侧导航栏选择集群列表。
-
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择集群信息。
-
在集群信息页面,单击基本信息页签,然后在安全与审计区域单击RRSA OIDC后的开启。
-
在弹出的启用 RRSA对话框,单击确定。
说明-
RRSA功能启用大约需要2-3min的时间,若遇到集群状态一直处于更新中的情况,请手动点击页面右上角的
按钮手动刷新。 -
当集群状态由更新中变为运行中后,表明该集群的RRSA特性已变更完成。将鼠标移动到RRSA OIDC右侧的已开启上,将显示OIDC提供商的URL链接和ARN信息。
-
-
-
安装ack-pod-identity-webhook组件。
-
在左侧导航栏,选择。
-
单击安全页签,找到ack-pod-identity-webhook组件,单击安装。
-
在提示对话框确认组件信息后,单击确认。
-
-
创建一个名为
ack-pod-identity-webhook-demo的RAM角色。-
使用阿里云账号登录RAM控制台。
-
在左侧导航栏,选择,然后在Role页面,单击创建角色。
-
在创建角色面板,单击切换编辑器来创建角色。
-
以可视化编辑为例,参考如下角色信息进行配置,然后单击确定。
配置项
描述
效果
默认为允许。
主体
选择身份提供者后,点击编辑。
选择身份提供者类型为OIDC,然后选择对应集群的身份提供者,如ack-rrsa-<cluster_id>。其中<cluster_id>为集群ID。
操作
默认勾选sts:AssumeRole。
条件
-
oidc:iss:选择身份提供者后自动添加,保持默认。
-
oidc:aud:选择身份提供者后自动添加,保持默认。
-
oidc:sub:需要手动添加条件。
-
条件键:
oidc:sub -
运算符:
StringEquals -
条件值:格式为system:serviceaccount:<namespace>:<serviceAccountName>。
-
<namespace>:应用所在的命名空间。
-
<serviceAccountName>:服务账户名称。
根据测试应用的信息,此处需要填入
system:serviceaccount:rrsa-demo:demo-sa。 -
-
-
-
在弹窗页面中,输入角色名称
ack-pod-identity-webhook-demo,单击确定。
-
-
为上一步创建的RAM角色授予测试应用所需的AliyunCSReadOnlyAccess系统策略权限。具体操作,请参见管理RAM角色的权限。
-
部署测试应用。
-
连接集群。具体操作,请参见连接集群。
-
使用以下内容,创建demo.yaml文件。
如下YAML示例中,为命名空间
rrsa-demo增加标签pod-identity.alibabacloud.com/injection: 'on',并为服务账号demo-sa增加注解pod-identity.alibabacloud.com/role-name: ack-pod-identity-webhook-demo,启用ack-pod-identity-webhook组件的自动配置注入功能。关于RRSA Demo调用的具体实现,请参见代码。说明以下示例使用的
registry.cn-hangzhou.aliyuncs.com/acs/ack-ram-tool:1.0.0需通过公网拉取,请确保集群已开通公网访问。具体操作,请参见为集群开启公网访问能力。--- apiVersion: v1 kind: Namespace metadata: name: rrsa-demo labels: pod-identity.alibabacloud.com/injection: 'on' --- apiVersion: v1 kind: ServiceAccount metadata: name: demo-sa namespace: rrsa-demo annotations: pod-identity.alibabacloud.com/role-name: ack-pod-identity-webhook-demo --- apiVersion: v1 kind: Pod metadata: name: demo namespace: rrsa-demo spec: serviceAccountName: demo-sa containers: - image: registry.cn-hangzhou.aliyuncs.com/acs/ack-ram-tool:1.0.0 imagePullPolicy: "Always" args: - rrsa - demo name: demo restartPolicy: OnFailure -
部署测试应用。
kubectl apply -f demo.yaml
-
-
查看测试应用Pod,确认ack-pod-identity-webhook组件已为Pod自动注入所需的配置。
kubectl -n rrsa-demo get pod demo -o yaml预期输出表明,ack-pod-identity-webhook组件已为Pod自动注入了如下配置。
字段
配置项名称
配置项说明
envALIBABA_CLOUD_ROLE_ARN需要扮演的RAM角色ARN。
ALIBABA_CLOUD_OIDC_PROVIDER_ARNOIDC身份提供商的ARN。
ALIBABA_CLOUD_OIDC_TOKEN_FILE包含OIDC Token的文件路径。
VolumeMountsrrsa-oidc-token挂载OIDC Token的配置。
Volumesrrsa-oidc-token挂载OIDC Token的配置。
-
查看测试应用日志。
kubectl -n rrsa-demo logs demo预期输出:
cluster id: c66e40b731ab24f96b36bec5b1a******, cluster name: test-**** cluster id: cbec9a1f7b433470ebe4c900552******, cluster name: test-****
自定义配置
ack-pod-identity-webhook组件的自定义配置包括命名空间配置、服务账户配置以及Pod配置。
命名空间配置
|
参数 |
类型 |
说明 |
代码示例 |
|
pod-identity.alibabacloud.com/injection |
标签 |
是否为该命名空间下的Pod启用配置自动注入功能。
|
|
服务账户配置
|
参数 |
类型 |
说明 |
代码示例 |
|
pod-identity.alibabacloud.com/role-name |
注解 |
该服务账户关联的RAM角色名称。 如果未配置该配置项或配置的值不是一个合法的RAM角色名称,使用该服务账户的Pod将不会被自动注入配置。 |
|
|
pod-identity.alibabacloud.com/service-account-token-expiration |
注解 |
指定使用该服务账户的Pod挂载的OIDC Token的有效期。
说明
当服务账户和Pod上都存在该配置项时,优先使用Pod配置,服务账户上的配置将会被忽略。 |
|
Pod配置
|
参数 |
类型 |
说明 |
代码示例 |
|
pod-identity.alibabacloud.com/service-account-token-expiration |
注解 |
指定该Pod挂载的OIDC Token的有效期。
说明
当服务账户和Pod上都存在该配置项时,优先使用Pod配置,服务账户上的配置将会被忽略。 |
|
|
pod-identity.alibabacloud.com/only-containers |
注解 |
只为Pod内特定名称的容器自动注入配置。使用英文半角逗号(,)分隔多个容器名称。 说明
当 |
|
|
pod-identity.alibabacloud.com/skip-containers |
注解 |
除特定名称的容器外,为Pod内其他容器自动注入配置。使用英文半角逗号(,)分隔多个容器名称。 说明
当 |
|
RRSA SDK参考代码
|
编程语言 |
支持认证的SDK版本 |
使用示例 |
|
Go |
Alibaba Cloud Credentials for Go 1.2.6及以上版本 |
|
|
Java |
Alibaba Cloud Credentials for Java 0.2.10及以上版本 |
|
|
Python 3 |
Alibaba Cloud Credentials for Python 0.3.1及以上版本 |
|
|
Node.js和TypeScript |
变更记录
2024年06月
|
版本号 |
镜像地址 |
变更内容 |
变更时间 |
变更影响 |
|
0.1.1 |
registry.cn-hangzhou.aliyuncs.com/acs/ack-pod-identity-webhook:v0.1.1.0-gbddcb74-aliyun |
|
2024年06月30日 |
组件升级异常可能会导致Pod创建失败,建议在业务低谷期进行升级操作。 |