managed-aliyun-acr-credential-helper组件支持在ACK集群Pro版、ACK Serverless集群Pro版和ACK Edge集群中免密拉取容器镜像服务ACR企业版和个人版的镜像,本文通过常用场景介绍如何使用免密组件托管版拉取私有镜像。
前提条件
已创建ACK Pro、ACK Serverless集群Pro版、ACK Edge和ACS集群且集群版本为1.22及以上。
已创建容器镜像服务ACR企业版实例。
集群中不存在免密插件用户侧版本。
跨账号场景仅支持1.22以上版本ACK Serverless集群Pro版、ACK集群Pro版和ACS集群以及企业版的容器镜像服务实例。
使用说明
免密组件托管版通过读取用户控制台的配置,进行私有镜像拉取。免密组件托管版配置完成后将会在集群中自动创建Secret,并关联到配置中已指定的ServiceAccount。任何使用此ServiceAccount的Pod都会默认使用免密组件托管版生成的Secret进行镜像拉取,从而达到免密拉取镜像的效果。
安装免密组件托管版
若您已安装免密组件托管版,请确保该组件为最新版本。若不是最新版本,请升级该组件至最新版本,升级组件不会对业务造成任何影响。具体操作,请参见管理组件。
关于aliyun-acr-credential-helper组件的更多信息,请参见aliyun-acr-credential-helper。
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在组件管理页面,选择安全页签,找到aliyun-acr-credential-helper托管,单击安装。
在aliyun-acr-credential-helper托管参数配置页面,单击AcrInstanceInfo右侧添加,即可添加多个ACR实例。当您使用个人版实例时,同样也需要单击AcrInstanceInfo右侧添加,但不需要填写InstanceId。
以下是ACR实例的配置项参数的说明。
配置项键
配置项键说明
配置项值
InstanceId
ACR实例ID,可在ACR控制台获取。
ACR企业版的InstanceId值为
cri-
开头的字符串。ACR个人版的InstanceId值为空,不需要填写。
regionId
ACR所在地域的RegionId,可在ACR控制台获取。当集群与ACR实例不在同一地域时,必填。当在同一地域时可不填。
例如杭州地域的RegionId为:
cn-hangzhou
。domains
默认为相应实例的所有域名。若要指定个别域名,多个以英文半角逗号(,)分隔。
example1.com,example2.com
assumeRoleARN
跨账号场景下ACR实例所有者的RAM角色ARN。
acs:ram::aaa
expireDuration
跨账号场景下临时凭证的有效时间。
默认为3600。取值范围为[3600, 43200],单位为秒。同时需要将B用户创建角色的最大会话时间调整为43200。
rrsaRoleARN
跨账号场景下集群所有者的RAM角色ARN。
acs:ram::bbb
rrsaOIDCProviderRoleARN
跨账号场景下集群的提供商ARN。
acs:ram::ccc
配置好实例信息后,还需要配置其他集群相关配置项,以下是免密组件托管版集群配置项的说明。
配置项
配置项键说明
配置项值
watchNamespace
期望能免密拉取镜像的Namespace。
默认值为
default
。当取值为all
时,表示期望所有Namespace均能免密拉取。如需配置多个Namespace时,请使用英文半角逗号(,)分隔。推荐配置生效Namespace为您的业务Namespace,尽量避免配置all
或者集群系统组件相关的Namespace,以免影响集群系统组件镜像的拉取。serviceAccount
使免密组件托管版作用于指定的服务账号。
默认为
default
。说明如果需要配置多个,请使用以英文半角逗号(,)分隔。如果设置为(*), 表示支持指定命名空间下的所有ServiceAccount。
expiringThreshold
组件内凭证过期阈值。
默认值为
15m
。建议使用15min。即在凭证过期前15m组件自动更新凭证。是否开启RRSA勾选项
勾选后即可开启RRSA(需完成RRSA相关配置)。
默认不勾选。配置RRSA相关配置项并勾选后,可以拉取跨账号的ACR镜像。
根据不同场景,私有镜像拉取权限的配置方式如下。
配置策略 | 使用场景 |
默认拉取策略,适用于同账号场景。 | |
跨地域场景。 | |
使用RRSA进行跨账号拉取镜像。 |
场景一:配置同账号拉取镜像
登录容器服务管理控制台,在左侧导航栏单击集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择集群信息。
在左侧导航栏,选择
。在组件管理页面,选择安全页签,找到aliyun-acr-credential-helper托管,单击卡片中的配置。
在aliyun-acr-credential-helper托管参数配置对话框,单击右侧的添加,在instanceId中输入ACR企业版实例ID。单击确定。
场景二:配置跨地域拉取镜像
登录容器服务管理控制台,在左侧导航栏单击集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择集群信息。
在左侧导航栏,选择
。在组件管理页面,选择安全页签,找到aliyun-acr-credential-helper托管,单击卡片中的配置。
在aliyun-acr-credential-helper 参数配置对话框,单击右侧的添加,在instanceId中输入ACR企业版实例ID,regionId中输入ACR企业版实例的RegionID。单击确定。
场景三:配置跨账号拉取镜像
使用RRSA进行跨账号拉取
基于适用于服务账户的RAM角色(RAM Roles for Service Accounts,简称RRSA)功能,可以在集群内为组件实现Pod维度的权限隔离。
RRSA功能目前仅支持在1.22及以上版本的集群(即ACK集群基础版、ACK集群Pro版和ACK Serverless集群Pro版)中拉取ACR企业版实例(基础版、标准版、高级版)的镜像。
当开启RRSA功能后,由组件生成的凭证将不支持个人版非公开镜像拉取,同时也不支持本文中提到的其他的鉴权方式。
启用免密插件的RRSA功能首先需要在集群基本信息中启用RRSA,再进行免密插件RRSA的相关配置。若操作顺序颠倒,在配置完成后,则需要删除免密插件的Pod,RRSA功能才会生效。
启用集群的RRSA功能。具体操作,请参见启用RRSA功能。
配置跨账号RAM用户的容器镜像服务资源访问权限。
集群开启RRSA功能后,需要按照以下步骤进行配置。假设A用户为集群所有者,B用户为容器镜像服务实例所有者,现在需要授权A用户的集群具备访问B用户容器镜像服务资源的权限。
配置A用户的RAM角色
在A用户中创建一个角色,添加AliyunSTSAssumeRoleAccess权限策略,授予这个角色具有角色扮演的权限。按照如下修改其信任策略。
将示例中的<oidc_issuer_url>替换为当前集群中OIDC提供商的URL。该URL可在容器服务管理控制台集群信息页面的基本信息页签获取。
将示例中的<oidc_provider_arn>替换为当前集群OIDC提供商的ARN。该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。单击确定。