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特性已变更完成,RRSA OIDC右侧会显示提供商的URL链接以及ARN信息。
安装ack-pod-identity-webhook组件。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在组件管理页面,单击安全页签,找到ack-pod-identity-webhook组件,单击组件右下方的安装。
在提示对话框确认组件信息后,单击确定。
创建一个名为ack-pod-identity-webhook-demo的RAM角色。
使用阿里云账号登录RAM控制台。
在左侧导航栏,选择 。
在角色页面,单击创建角色。
在创建角色面板,选择可信实体类型为身份提供商,然后单击下一步。
在配置角色配置项,配置如下角色信息后,单击完成。
配置项
描述
角色名称
ack-pod-identity-webhook-demo
身份提供商类型
OIDC
选择身份提供商
ack-rrsa-<cluster_id>。其中,<cluster_id>为您的集群ID。
限制条件
oidc:iss:默认即可。
oidc:aud:选择sts.aliyuncs.com。
oidc:sub:条件判定方式选择StringEquals,值的格式为system:serviceaccount:<namespace>:<serviceAccountName>。
<namespace>:应用所在的命名空间。
<serviceAccountName>:服务账户名称。
根据测试应用的信息,此处需要填入system:serviceaccount:rrsa-demo:demo-sa。
为上一步创建的角色授予测试应用所需的AliyunCSReadOnlyAccess系统策略权限。具体操作,请参见为RAM角色授权。
部署测试应用。
使用以下内容,创建demo.yaml文件。
如下YAML示例中,为命名空间增加标签
pod-identity.alibabacloud.com/injection: 'on'
,并为服务账号增加注解pod-identity.alibabacloud.com/role-name: ack-pod-identity-webhook-demo
,启用ack-pod-identity-webhook组件的自动配置注入功能。关于RRSA Demo调用实现,请参见代码。--- 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自动注入了如下配置。
类别
配置项名称
配置项说明
环境变量
ALIBABA_CLOUD_ROLE_ARN
需要扮演的RAM角色ARN。
ALIBABA_CLOUD_OIDC_PROVIDER_ARN
OIDC身份提供商的ARN。
ALIBABA_CLOUD_OIDC_TOKEN_FILE
包含OIDC Token的文件路径。
VolumeMount
rrsa-oidc-token
挂载OIDC Token的配置。
Volume
rrsa-oidc-token
挂载OIDC Token的配置。
执行以下命令,查看测试应用日志。
kubectl -n rrsa-demo logs demo
预期输出:
cluster id: cf***, cluster name: foo* cluster id: c8***, cluster name: bar* cluster id: c4***, cluster name: foob*
自定义配置
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的有效期。 取值范围:[600, 43200]。单位:秒。 默认值为3600,当配置值无效时,将使用3600作为此配置项的值。 |
|
Pod配置
参数 | 类型 | 说明 | 代码示例 |
pod-identity.alibabacloud.com/service-account-token-expiration | 注解 | 指定该Pod挂载的OIDC Token的有效期。 取值范围:[600, 43200]。单位:秒。 默认值为3600,当配置值无效时,将使用3600作为此配置项的值。 说明 当服务账户和Pod上都存在该配置项时,服务账户上的配置将会被忽略。 |
|
pod-identity.alibabacloud.com/only-containers | 注解 | 限制只为Pod内特定名称的容器自动注入配置,使用英文半角逗号(,)分隔多个容器名称。 如果未配置该配置项,将为Pod内所有容器自动注入配置。 |
|
pod-identity.alibabacloud.com/skip-containers | 注解 | 配置不为特定名称的容器自动注入配置,使用英文半角逗号(,)分隔多个容器名称。 说明 当某个容器名称同时存在于 |
|
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 |
变更记录
2023年06月
版本号 | 镜像地址 | 变更内容 | 变更时间 | 变更影响 |
0.1.1 | registry.cn-hangzhou.aliyuncs.com/acs/ack-pod-identity-webhook:v0.1.1.0-gbddcb74-aliyun | 增强组件对ACK Serverless集群的兼容性。 | 2023年06月07日 | 组件升级异常可能会导致Pod创建失败,建议在业务低谷期进行升级操作。 |
2023年02月
版本号 | 镜像地址 | 变更内容 | 变更时间 | 变更影响 |
0.1.0 | registry.cn-hangzhou.aliyuncs.com/acs/ack-pod-identity-webhook:v0.1.0.9-g26b8fde-aliyun | 实现为应用Pod自动挂载OIDC Token以及自动配置环境变量的功能。 | 2023年02月01日 | 首个版本。 |