安装并使用免密组件托管版
aliyun-acr-credential-helper托管版组件支持自动完成镜像的拉取,无需手动配置imagePullSecrets。托管版组件由ACK托管,不占用集群资源,免运维。本文介绍托管版组件使用步骤和注意事项。
前提条件
集群为Kubernetes版本1.22及以上的ACK集群Pro版、ACK Serverless集群、ACK Edge集群。
容器镜像服务ACR实例为企业版或2024年9月8日或更早创建的个人版。
已为免密组件使用的RAM角色授权。
集群中未安装aliyun-acr-credential-helper非托管版组件。
安装组件
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在组件管理页面,选择安全页签,找到aliyun-acr-credential-helper托管卡片,单击安装。
在安装组件 aliyun-acr-credential-helper页面,可以看到AcrInstanceInfo配置以及一些其他选项。AcrInstanceInfo对应的是组件关联的每个ACR实例相关的配置,而其他选项则是组件本身的配置,它们的说明如下。
说明ACR实例相关配置及组件配置在安装完成后都支持修改。
关联ACR实例配置:
AcrInstanceInfo
说明
InstanceId
ACR实例ID,可通过容器镜像服务控制台获取。
重要使用个人版ACR实例时请留空,使用企业版ACR实例时必填。
regionId
ACR实例所在地域的RegionId,可通过容器镜像服务控制台获取。
重要跨地域拉取镜像时必填。
domains
免密插件访问ACR实例所使用的域名。默认为上方填入的ACR实例的所有域名(公网、VPC)。若要指定个别域名,多个以英文半角逗号(,)分隔。
跨账号拉取镜像场景配置
适用于跨账号拉取镜像的场景。如无需求,请留空。
assumeRoleARN
ACR实例所有者的RAM角色ARN。
expireDuration
跨账号拉取时临时凭证的有效时间。取值范围[3600, 43200],默认值3600,单位为秒。同时需要将B用户创建角色的最大会话时间调整为43200。
rrsaRoleARN
集群所有者的RAM角色ARN。
rrsaOIDCProviderRoleARN
集群的提供商ARN。
组件配置:
配置项
说明
是否开启RRSA
勾选后即可开启RRSA,适用于需要在ACR实例配置中完成跨账号拉取场景配置。
watchNamespace
期望能免密拉取镜像的命名空间,默认值
default
。当取值为all
时,表示期望所有Namespace均能免密拉取。如需指定多个Namespace,请使用英文半角逗号(,)分隔。推荐配置业务Namespace,尽量避免配置all
或者集群系统组件相关的Namespace,以免影响集群系统组件镜像的拉取。serviceAccount
使免密组件托管版作用于指定的Service Account。默认值
Default
。取值为Default
时,会作用于所有指定Namespace的默认Service Account。如果设置为(*), 表示支持指定命名空间下的所有ServiceAccount。如果需要配置多个,请使用以英文半角逗号(,)分隔。expiringThreshold
组件内凭证过期阈值。默认值为
15m
。建议使用15min。即在凭证过期前15m组件自动更新凭证。notifyEmail
无需配置。
变更组件配置
在组件管理页面,单击aliyun-acr-credential-helper托管卡片上的配置,可变更组件配置。配置项的说明请参照上方的表格。
使用免密组件拉取镜像
安装并配置完成免密组件后,在创建工作负载时指定免密组件已关联的ServiceAccount,即可实现免密拉取镜像。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
serviceAccountName: my-service-account # 指定免密组件已经关联的ServiceAccount
containers:
- name: nginx
image: crpi-******.cn-hangzhou.personal.cr.aliyuncs.com/nginx/nginx:latest # 指定ACR镜像地址
ports:
- containerPort: 80
更多操作
跨账号拉取镜像
免密组件托管版支持基于适用于服务账户的RAM角色(RAM Roles for Service Accounts,简称RRSA)跨账号拉取镜像。
RRSA功能目前仅支持在1.22及以上版本的ACK集群基础版、ACK集群Pro版和ACK Serverless集群Pro版中拉取ACR企业版实例的镜像。
当开启RRSA功能后,由组件生成的凭证将不支持个人版非公开镜像拉取,同时也不支持本文中提到的其他的鉴权方式。
启用免密插件的RRSA功能首先需要在集群基本信息中启用RRSA,再进行免密插件RRSA的相关配置。若操作顺序颠倒,在配置完成后,则需要删除免密插件的Pod,RRSA功能才会生效。
启用集群的RRSA功能。具体操作,请参见启用RRSA功能。
集群中RRSA功能开启后,在基本信息页签的安全与审计区域,将鼠标悬浮至RRSA OIDC右侧已开启上面,即可查看提供商的URL链接和ARN信息。
配置跨账号RAM用户的容器镜像服务资源访问权限。
集群开启RRSA功能后,需要按照以下步骤进行配置。假设A用户为集群所有者,B用户为容器镜像服务实例所有者,现在需要授权A用户的集群具备访问B用户容器镜像服务资源的权限。
配置A用户的RAM角色
在A用户中创建一个角色,添加AliyunSTSAssumeRoleAccess权限策略,授予这个角色具有角色扮演的权限。按照如下修改其信任策略。
将示例中的
<oidc_issuer_url>
替换为上一步获取的当前集群中OIDC提供商的URL。将示例中的
<oidc_provider_arn>
替换为上一步获取的当前集群OIDC提供商的ARN。
{ "Statement": [ { "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "oidc:aud": "sts.aliyuncs.com", "oidc:iss": "<oidc_issuer_url>", "oidc:sub": "system:serviceaccount:kube-system:aliyun-acr-credential-helper" } }, "Effect": "Allow", "Principal": { "Federated": [ "<oidc_provider_arn>" ] } } ], "Version": "1" }
配置B用户的RAM角色
在B用户中创建一个拥有ACR相关权限的角色,单击RAM角色名称。选择信任策略,添加A用户角色ARN。对B用户的角色添加如下权限策略,授予这个角色获取实例信息及拉取镜像权限。
{ "Version": "1", "Statement": [ { "Action": [ "cr:GetAuthorizationToken", "cr:ListInstanceEndpoint", "cr:PullRepository" ], "Resource": "*", "Effect": "Allow" } ] }
该RAM角色可以为其设置RAM角色最大会话时间,设置时间范围为3600秒到43200秒,而角色会话时间在下文的配置项中步骤7中的expireDuration也需要设置。推荐此处取值的设置和配置项的expireDuration的值一致。允许expireDuration小于等于角色最大会话时间。
登录容器服务管理控制台,在左侧导航栏单击集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择集群信息。
在左侧导航栏,选择
。在组件管理页面,选择安全页签,找到aliyun-acr-credential-helper托管,单击卡片中的配置。
在aliyun-acr-credential-helper参数配置对话框,单击右侧的添加,输入assumeRoleARN,expireDuration,rrsaRoleARN,rrsaOIDCProviderRoleARN。单击确定。
相关文档
aliyun-acr-credential-helper的组件变更记录,请参见aliyun-acr-credential-helper。