使用免密组件托管版拉取容器镜像

managed-aliyun-acr-credential-helper组件支持在ACK集群Pro版ACK Serverless集群Pro版ACK Edge集群中免密拉取容器镜像服务ACR企业版和个人版的镜像,本文通过常用场景介绍如何使用免密组件托管版拉取私有镜像。

前提条件

说明

跨账号场景仅支持1.22以上版本ACK Serverless集群Pro版ACK集群Pro版和ACS集群以及企业版的容器镜像服务实例。

使用说明

免密组件托管版通过读取用户控制台的配置,进行私有镜像拉取。免密组件托管版配置完成后将会在集群中自动创建Secret,并关联到配置中已指定的ServiceAccount。任何使用此ServiceAccount的Pod都会默认使用免密组件托管版生成的Secret进行镜像拉取,从而达到免密拉取镜像的效果。

安装免密组件托管版

若您已安装免密组件托管版,请确保该组件为最新版本。若不是最新版本,请升级该组件至最新版本,升级组件不会对业务造成任何影响。具体操作,请参见管理组件

关于aliyun-acr-credential-helper组件的更多信息,请参见aliyun-acr-credential-helper

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择运维管理 > 组件管理

  3. 组件管理页面,选择安全页签,找到aliyun-acr-credential-helper托管,单击安装

  4. 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进行跨账号拉取镜像。

场景一:配置同账号拉取镜像

  1. 登录容器服务管理控制台,在左侧导航栏单击集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择集群信息

  3. 在左侧导航栏,选择运维管理 > 组件管理

  4. 组件管理页面,选择安全页签,找到aliyun-acr-credential-helper托管,单击卡片中的配置

  5. aliyun-acr-credential-helper托管参数配置对话框,单击右侧的添加,在instanceId中输入ACR企业版实例ID。单击确定

场景二:配置跨地域拉取镜像

  1. 登录容器服务管理控制台,在左侧导航栏单击集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择集群信息

  3. 在左侧导航栏,选择运维管理 > 组件管理

  4. 组件管理页面,选择安全页签,找到aliyun-acr-credential-helper托管,单击卡片中的配置

  5. 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功能才会生效。

  1. 启用集群的RRSA功能。具体操作,请参见启用RRSA功能

    集群中RRSA功能开启后,在基本信息页签的安全与审计区域,将鼠标悬浮至RRSA OIDC右侧已开启上面,即可查看提供商的URL链接和ARN信息。image

  2. 配置跨账号RAM用户的容器镜像服务资源访问权限。

    集群开启RRSA功能后,需要按照以下步骤进行配置。假设A用户为集群所有者,B用户为容器镜像服务实例所有者,现在需要授权A用户的集群具备访问B用户容器镜像服务资源的权限。

    1. 配置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"
      }
    2. 配置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秒,而角色会话时间在下文的配置项中步骤7expireDuration也需要设置。推荐此处取值的设置和配置项的expireDuration的值一致。允许expireDuration小于等于角色最大会话时间。

  3. 登录容器服务管理控制台,在左侧导航栏单击集群

  4. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择集群信息

  5. 在左侧导航栏,选择运维管理 > 组件管理

  6. 组件管理页面,选择安全页签,找到aliyun-acr-credential-helper托管,单击卡片中的配置

  7. aliyun-acr-credential-helper参数配置对话框,单击右侧的添加,输入assumeRoleARN,expireDurationrrsaRoleARNrrsaOIDCProviderRoleARN。单击确定配置项.jpg