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。單擊確定。