安装并使用免密组件托管版

更新时间: 2025-02-06 14:22:09

aliyun-acr-credential-helper托管版组件支持自动完成镜像的拉取,无需手动配置imagePullSecrets。托管版组件由ACK托管,不占用集群资源,免运维。本文介绍托管版组件使用步骤和注意事项。

前提条件

  • 集群为Kubernetes版本1.22及以上的ACK集群Pro版ACK Serverless集群ACK Edge集群

  • 容器镜像服务ACR实例为企业版或2024年9月8日或更早创建的个人版。

  • 已为免密组件使用的RAM角色授权

  • 集群中未安装aliyun-acr-credential-helper非托管版组件。

安装组件

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

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

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

  4. 安装组件 aliyun-acr-credential-helper页面,可以看到AcrInstanceInfo配置以及一些其他选项。AcrInstanceInfo对应的是组件关联的每个ACR实例相关的配置,而其他选项则是组件本身的配置,它们的说明如下。

    说明

    ACR实例相关配置及组件配置在安装完成后都支持修改。

    image

    关联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托管卡片上的配置,可变更组件配置。配置项的说明请参照上方的表格。

image

使用免密组件拉取镜像

安装并配置完成免密组件后,在创建工作负载时指定免密组件已关联的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功能才会生效。

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

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

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

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

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

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

相关文档

aliyun-acr-credential-helper的组件变更记录,请参见aliyun-acr-credential-helper

上一篇: 使用免密组件拉取容器镜像 下一篇: 访问配置
阿里云首页 容器镜像服务 相关技术圈