全部產品
Search
文件中心

Container Service for Kubernetes:使用免密組件託管版拉取容器鏡像

更新時間:Nov 14, 2024

managed-aliyun-acr-credential-helper組件支援在ACK叢集Pro版ACK Serverless叢集Pro版和ACK Edge叢集中免密拉取Container RegistryACR企業版和個人版的鏡像,本文通過常用情境介紹如何使用免密組件託管版拉取私人鏡像。

前提條件

說明

跨帳號情境僅支援1.22以上版本ACK Serverless叢集Pro版ACK叢集Pro版和ACS叢集以及企業版的Container Registry執行個體。

使用說明

免密組件託管版通過讀取使用者控制台的配置,進行私人鏡像拉取。免密組件託管版配置完成後將會在叢集中自動建立Secret,並關聯到配置中已指定的ServiceAccount。任何使用此ServiceAccount的Pod都會預設使用免密組件託管版產生的Secret進行鏡像拉取,從而達到免密拉取鏡像的效果。

安裝免密組件託管版

若您已安裝免密組件託管版,請確保該組件為最新版本。若不是最新版本,請升級該組件至最新版本,升級組件不會對業務造成任何影響。具體操作,請參見管理組件

關於aliyun-acr-credential-helper組件的更多資訊,請參見aliyun-acr-credential-helper

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  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. 登入Container Service管理主控台,在左側導覽列單擊叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇叢集資訊

  3. 在左側導覽列,選擇營運管理 > 組件管理

  4. 組件管理頁面,選擇安全頁簽,找到aliyun-acr-credential-helper託管,單擊卡片中的配置

  5. aliyun-acr-credential-helper託管參數配置對話方塊,單擊右側的添加,在instanceId中輸入ACR企業版執行個體ID。單擊確定

情境二:配置跨地區拉取鏡像

  1. 登入Container Service管理主控台,在左側導覽列單擊叢集

  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功能

  2. 配置跨帳號RAM使用者的Container Registry資源存取權限。

    叢集開啟RRSA功能後,需要按照以下步驟進行配置。假設A使用者為叢集所有者,B使用者為Container Registry執行個體所有者,現在需要授權A使用者的叢集具備訪問B使用者Container Registry資源的許可權。

    1. 配置A使用者的RAM角色

      在A使用者中建立一個角色,添加AliyunSTSAssumeRoleAccess權限原則,授予這個角色具有角色扮演的許可權。按照如下修改其信任策略。

      • 將樣本中的<oidc_issuer_url>替換為當前叢集中OIDC供應商的URL。該URL可在Container Service管理主控台叢集資訊頁面的基本資料頁簽擷取。

      • 將樣本中的<oidc_provider_arn>替換為當前叢集OIDC供應商的ARN。該ARN可在Container Service管理主控台叢集資訊頁面的基本資料頁簽擷取。

      {
        "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. 登入Container Service管理主控台,在左側導覽列單擊叢集

  4. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇叢集資訊

  5. 在左側導覽列,選擇營運管理 > 組件管理

  6. 組件管理頁面,選擇安全頁簽,找到aliyun-acr-credential-helper託管,單擊卡片中的配置

  7. aliyun-acr-credential-helper參數配置對話方塊,單擊右側的添加,輸入assumeRoleARN,expireDurationrrsaRoleARNrrsaOIDCProviderRoleARN。單擊確定配置項.jpg