ack-pod-identity-webhook組件可以幫您更便捷地使用Container Service提供的RRSA(RAM Roles for Service Accounts)特性,它可以為您的應用Pod自動注入應用依賴的掛載OIDC Token和環境變數配置,免去繁瑣的手動設定工作。本文介紹ack-pod-identity-webhook組件資訊、使用說明及變更記錄。
組件介紹
ack-pod-identity-webhook組件的架構圖如下所示。
使用樣本
本樣本部署的應用中,將使用RRSA特性扮演指定角色擷取當前帳號下叢集列表資訊。相關資訊如下。
命名空間:rrsa-demo
服務賬戶:demo-sa
RAM角色:ack-pod-identity-webhook-demo
當您為Pod所在命名空間增加pod-identity.alibabacloud.com/injection: 'on'
標籤後,ack-pod-identity-webhook組件將根據Pod使用的服務帳號的註解配置,自動為該Pod注入相關配置項。使用樣本的操作步驟如下。
為叢集開啟RRSA功能。具體操作,請參見啟用RRSA功能。
RRSA功能開啟後,請擷取叢集中OIDC供應商的URL和ARN資訊。
安裝ack-pod-identity-webhook組件。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在組件管理頁面,單擊安全頁簽,找到ack-pod-identity-webhook組件,單擊組件右下方的安裝。
在提示對話方塊確認組件資訊後,單擊確定。
建立一個名為ack-pod-identity-webhook-demo的RAM角色。
使用阿里雲帳號登入RAM控制台。
在左側導覽列,選擇 。
在角色頁面,單擊建立角色。
在建立角色面板,選擇可信實體類型為身份供應商,然後單擊下一步。
在配置角色配置項,配置如下角色資訊後,單擊完成。
配置項
描述
角色名稱
ack-pod-identity-webhook-demo
身份供應商類型
OIDC
選擇身份供應商
ack-rrsa-<cluster_id>。其中,<cluster_id>為您的叢集ID。
限制條件
oidc:iss:預設即可。
oidc:aud:選擇sts.aliyuncs.com。
oidc:sub:條件判定方式選擇StringEquals,值的格式為system:serviceaccount:<namespace>:<serviceAccountName>。
<namespace>:應用所在的命名空間。
<serviceAccountName>:服務賬戶名稱。
根據測試應用的資訊,此處需要填入system:serviceaccount:rrsa-demo:demo-sa。
為上一步建立的角色授予測試應用所需的AliyunCSReadOnlyAccess系統策略許可權。具體操作,請參見為RAM角色授權。
部署測試應用。
使用以下內容,建立demo.yaml檔案。
如下YAML樣本中,為命名空間增加標籤
pod-identity.alibabacloud.com/injection: 'on'
,並為服務帳號增加註解pod-identity.alibabacloud.com/role-name: ack-pod-identity-webhook-demo
,啟用ack-pod-identity-webhook組件的自動設定注入功能。關於RRSA Demo調用實現,請參見代碼。--- apiVersion: v1 kind: Namespace metadata: name: rrsa-demo labels: pod-identity.alibabacloud.com/injection: 'on' --- apiVersion: v1 kind: ServiceAccount metadata: name: demo-sa namespace: rrsa-demo annotations: pod-identity.alibabacloud.com/role-name: ack-pod-identity-webhook-demo --- apiVersion: v1 kind: Pod metadata: name: demo namespace: rrsa-demo spec: serviceAccountName: demo-sa containers: - image: registry.cn-hangzhou.aliyuncs.com/acs/ack-ram-tool:1.0.0 imagePullPolicy: "Always" args: - rrsa - demo name: demo restartPolicy: OnFailure
執行以下命令,部署測試應用。
kubectl apply -f demo.yaml
執行以下命令,查看測試應用Pod,確認ack-pod-identity-webhook組件已為Pod自動注入所需的配置。
kubectl -n rrsa-demo get pod demo -o yaml
預期輸出表明,ack-pod-identity-webhook組件已為Pod自動注入了如下配置。
類別
配置項名稱
配置項說明
環境變數
ALIBABA_CLOUD_ROLE_ARN
需要扮演的RAM角色ARN。
ALIBABA_CLOUD_OIDC_PROVIDER_ARN
OIDC身份供應商的ARN。
ALIBABA_CLOUD_OIDC_TOKEN_FILE
包含OIDC Token的檔案路徑。
VolumeMount
rrsa-oidc-token
掛載OIDC Token的配置。
Volume
rrsa-oidc-token
掛載OIDC Token的配置。
執行以下命令,查看測試應用日誌。
kubectl -n rrsa-demo logs demo
預期輸出:
cluster id: cf***, cluster name: foo* cluster id: c8***, cluster name: bar* cluster id: c4***, cluster name: foob*
自訂配置
ack-pod-identity-webhook組件的自訂配置包括命名空間配置、服務賬戶配置以及Pod配置。
命名空間配置
參數 | 類型 | 說明 | 程式碼範例 |
pod-identity.alibabacloud.com/injection | 標籤 | 是否為該命名空間下的Pod啟用配置自動注入功能。
|
|
服務賬戶配置
參數 | 類型 | 說明 | 程式碼範例 |
pod-identity.alibabacloud.com/role-name | 註解 | 該服務賬戶關聯的RAM角色名稱。如果未配置該配置項或配置的值不是一個合法的RAM角色名稱,使用該服務賬戶的Pod將不會被自動注入配置。 |
|
pod-identity.alibabacloud.com/service-account-token-expiration | 註解 | 指定使用該服務賬戶的Pod掛載的OIDC Token的有效期間。 取值範圍:[600, 43200]。單位:秒。 預設值為3600,當配置值無效時,將使用3600作為此配置項的值。 |
|
Pod配置
參數 | 類型 | 說明 | 程式碼範例 |
pod-identity.alibabacloud.com/injection | 標籤 | 是否為該Pod啟用配置自動注入功能。
|
|
pod-identity.alibabacloud.com/service-account-token-expiration | 註解 | 指定該Pod掛載的OIDC Token的有效期間。 取值範圍:[600, 43200]。單位:秒。 預設值為3600,當配置值無效時,將使用3600作為此配置項的值。 說明 當服務賬戶和Pod上都存在該配置項時,服務賬戶上的配置將會被忽略。 |
|
pod-identity.alibabacloud.com/only-containers | 註解 | 限制只為Pod內特定名稱的容器自動注入配置,使用英文半形逗號(,)分隔多個容器名稱。 如果未配置該配置項,將為Pod內所有容器自動注入配置。 |
|
pod-identity.alibabacloud.com/skip-containers | 註解 | 配置不為特定名稱的容器自動注入配置,使用英文半形逗號(,)分隔多個容器名稱。 說明 當某個容器名稱同時存在於 |
|
RRSA SDK參考代碼
目前,阿里雲V2.0 SDK已經內建了支援使用RRSA OIDC Token進行OpenAPI認證的功能,所有基於V2.0 SDK產生並且支援STS Token認證的雲產品SDK都將預設支援RRSA OIDC Token認證。支援此功能的SDK版本資訊和參考代碼如下。
程式設計語言 | 支援認證的SDK版本 | 使用樣本 |
Go | Alibaba Cloud Credentials for Go 1.2.6及以上版本。更多資訊,請參考方式六:使用OIDCRoleArn。 | |
Java | Alibaba Cloud Credentials for Java 0.2.10及以上版本。更多資訊,請參考方式六:使用OIDCRoleArn。 | |
Python 3 | Alibaba Cloud Credentials for Python 0.3.1及以上版本。更多資訊,請參考方式六:使用OIDCRoleArn。 | |
Node.js和TypeScript | Alibaba Cloud Credentials for TypeScript/Node.js 2.2.6及以上版本。更多資訊,請參考方式六:使用OIDCRoleArn。 |
變更記錄
2024年12月
版本號碼 | 鏡像地址 | 變更內容 | 變更時間 | 變更影響 |
0.2.0 | registry-cn-hangzhou.ack.aliyuncs.com/acs/ack-pod-identity-webhook:v0.2.0.11-g2f0c2e7-aliyun | 當前處於灰階發布中。
| 2024年12月19日 | 組件升級異常可能會導致Pod建立失敗,建議在業務低穀期進行升級操作。 |
2023年06月
版本號碼 | 鏡像地址 | 變更內容 | 變更時間 | 變更影響 |
0.1.1 | registry.cn-hangzhou.aliyuncs.com/acs/ack-pod-identity-webhook:v0.1.1.0-gbddcb74-aliyun | 增強組件對ACK Serverless叢集的相容性。 | 2023年06月07日 | 組件升級異常可能會導致Pod建立失敗,建議在業務低穀期進行升級操作。 |
2023年02月
版本號碼 | 鏡像地址 | 變更內容 | 變更時間 | 變更影響 |
0.1.0 | registry.cn-hangzhou.aliyuncs.com/acs/ack-pod-identity-webhook:v0.1.0.9-g26b8fde-aliyun | 實現為應用Pod自動掛載OIDC Token以及自動設定環境變數的功能。 | 2023年02月01日 | 首個版本。 |