ack-pod-identity-webhook
ack-pod-identity-webhook組件可以幫您更便捷地使用容器服務(wù)提供的RRSA(RAM Roles for Service Accounts)特性,它可以為您的應(yīng)用Pod自動注入應(yīng)用依賴的掛載OIDC Token和環(huán)境變量配置,免去繁瑣的手動配置工作。本文介紹ack-pod-identity-webhook組件信息、使用說明及變更記錄。
組件介紹
ack-pod-identity-webhook組件的架構(gòu)圖如下所示。
使用示例
本示例部署的應(yīng)用中,將使用RRSA特性扮演指定角色獲取當(dāng)前賬號下集群列表信息。相關(guān)信息如下。
命名空間:rrsa-demo
服務(wù)賬戶:demo-sa
RAM角色:ack-pod-identity-webhook-demo
當(dāng)您為Pod所在命名空間增加pod-identity.alibabacloud.com/injection: 'on'
標(biāo)簽后,ack-pod-identity-webhook組件將根據(jù)Pod使用的服務(wù)賬號的注解配置,自動為該Pod注入相關(guān)配置項。使用示例的操作步驟如下。
為集群開啟RRSA功能。具體操作,請參見啟用RRSA功能。
RRSA功能開啟后,請獲取集群中OIDC提供商的URL和ARN信息。
安裝ack-pod-identity-webhook組件。
在集群列表頁面,單擊目標(biāo)集群名稱,然后在左側(cè)導(dǎo)航欄,選擇 。
在組件管理頁面,單擊安全頁簽,找到ack-pod-identity-webhook組件,單擊組件右下方的安裝。
在提示對話框確認(rèn)組件信息后,單擊確定。
創(chuàng)建一個名為ack-pod-identity-webhook-demo的RAM角色。
使用阿里云賬號登錄RAM控制臺。
在左側(cè)導(dǎo)航欄,選擇 。
在角色頁面,單擊創(chuàng)建角色。
在創(chuàng)建角色面板,選擇可信實體類型為身份提供商,然后單擊下一步。
在配置角色配置項,配置如下角色信息后,單擊完成。
配置項
描述
角色名稱
ack-pod-identity-webhook-demo
身份提供商類型
OIDC
選擇身份提供商
ack-rrsa-<cluster_id>。其中,<cluster_id>為您的集群ID。
限制條件
oidc:iss:默認(rèn)即可。
oidc:aud:選擇sts.aliyuncs.com。
oidc:sub:條件判定方式選擇StringEquals,值的格式為system:serviceaccount:<namespace>:<serviceAccountName>。
<namespace>:應(yīng)用所在的命名空間。
<serviceAccountName>:服務(wù)賬戶名稱。
根據(jù)測試應(yīng)用的信息,此處需要填入system:serviceaccount:rrsa-demo:demo-sa。
為上一步創(chuàng)建的角色授予測試應(yīng)用所需的AliyunCSReadOnlyAccess系統(tǒng)策略權(quán)限。具體操作,請參見為RAM角色授權(quán)。
部署測試應(yīng)用。
使用以下內(nèi)容,創(chuàng)建demo.yaml文件。
如下YAML示例中,為命名空間增加標(biāo)簽
pod-identity.alibabacloud.com/injection: 'on'
,并為服務(wù)賬號增加注解pod-identity.alibabacloud.com/role-name: ack-pod-identity-webhook-demo
,啟用ack-pod-identity-webhook組件的自動配置注入功能。關(guān)于RRSA Demo調(diào)用實現(xiàn),請參見代碼。--- 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
執(zhí)行以下命令,部署測試應(yīng)用。
kubectl apply -f demo.yaml
執(zhí)行以下命令,查看測試應(yīng)用Pod,確認(rèn)ack-pod-identity-webhook組件已為Pod自動注入所需的配置。
kubectl -n rrsa-demo get pod demo -o yaml
apiVersion: v1 kind: Pod metadata: name: demo namespace: rrsa-demo spec: containers: - args: - rrsa - demo env: - name: ALIBABA_CLOUD_ROLE_ARN value: acs:ram::1***:role/ack-pod-identity-webhook-demo - name: ALIBABA_CLOUD_OIDC_PROVIDER_ARN value: acs:ram::1***:oidc-provider/ack-rrsa-c*** - name: ALIBABA_CLOUD_OIDC_TOKEN_FILE value: /var/run/secrets/ack.alibabacloud.com/rrsa-tokens/token image: registry.cn-hangzhou.aliyuncs.com/acs/ack-ram-tool:1.0.0 imagePullPolicy: Always name: demo volumeMounts: - mountPath: /var/run/secrets/kubernetes.io/serviceaccount name: kube-api-access-4bwdg readOnly: true - mountPath: /var/run/secrets/ack.alibabacloud.com/rrsa-tokens name: rrsa-oidc-token readOnly: true restartPolicy: OnFailure serviceAccount: demo-sa serviceAccountName: demo-sa volumes: - name: kube-api-access-4bwdg projected: defaultMode: 420 sources: - serviceAccountToken: expirationSeconds: 3607 path: token - configMap: items: - key: ca.crt path: ca.crt name: kube-root-ca.crt - downwardAPI: items: - fieldRef: apiVersion: v1 fieldPath: metadata.namespace path: namespace - name: rrsa-oidc-token projected: defaultMode: 420 sources: - serviceAccountToken: audience: sts.aliyuncs.com expirationSeconds: 3600 path: token
預(yù)期輸出表明,ack-pod-identity-webhook組件已為Pod自動注入了如下配置。
類別
配置項名稱
配置項說明
環(huán)境變量
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的配置。
執(zhí)行以下命令,查看測試應(yīng)用日志。
kubectl -n rrsa-demo logs demo
預(yù)期輸出:
cluster id: cf***, cluster name: foo* cluster id: c8***, cluster name: bar* cluster id: c4***, cluster name: foob*
自定義配置
ack-pod-identity-webhook組件的自定義配置包括命名空間配置、服務(wù)賬戶配置以及Pod配置。
命名空間配置
參數(shù) | 類型 | 說明 | 代碼示例 |
pod-identity.alibabacloud.com/injection | 標(biāo)簽 | 是否為該命名空間下的Pod啟用配置自動注入功能。
|
|
服務(wù)賬戶配置
參數(shù) | 類型 | 說明 | 代碼示例 |
pod-identity.alibabacloud.com/role-name | 注解 | 該服務(wù)賬戶關(guān)聯(lián)的RAM角色名稱。如果未配置該配置項或配置的值不是一個合法的RAM角色名稱,使用該服務(wù)賬戶的Pod將不會被自動注入配置。 |
|
pod-identity.alibabacloud.com/service-account-token-expiration | 注解 | 指定使用該服務(wù)賬戶的Pod掛載的OIDC Token的有效期。 取值范圍:[600, 43200]。單位:秒。 默認(rèn)值為3600,當(dāng)配置值無效時,將使用3600作為此配置項的值。 |
|
Pod配置
參數(shù) | 類型 | 說明 | 代碼示例 |
pod-identity.alibabacloud.com/service-account-token-expiration | 注解 | 指定該Pod掛載的OIDC Token的有效期。 取值范圍:[600, 43200]。單位:秒。 默認(rèn)值為3600,當(dāng)配置值無效時,將使用3600作為此配置項的值。 說明 當(dāng)服務(wù)賬戶和Pod上都存在該配置項時,服務(wù)賬戶上的配置將會被忽略。 |
|
pod-identity.alibabacloud.com/only-containers | 注解 | 限制只為Pod內(nèi)特定名稱的容器自動注入配置,使用英文半角逗號(,)分隔多個容器名稱。 如果未配置該配置項,將為Pod內(nèi)所有容器自動注入配置。 |
|
pod-identity.alibabacloud.com/skip-containers | 注解 | 配置不為特定名稱的容器自動注入配置,使用英文半角逗號(,)分隔多個容器名稱。 說明 當(dāng)某個容器名稱同時存在于 |
|
RRSA SDK參考代碼
編程語言 | 支持認(rèn)證的SDK版本 | 使用示例 |
Go | Alibaba Cloud Credentials for Go 1.2.6及以上版本 | |
Java | Alibaba Cloud Credentials for Java 0.2.10及以上版本 | |
Python 3 | Alibaba Cloud Credentials for Python 0.3.1及以上版本 | |
Node.js和TypeScript |
變更記錄
2023年06月
版本號 | 鏡像地址 | 變更內(nèi)容 | 變更時間 | 變更影響 |
0.1.1 | registry.cn-hangzhou.aliyuncs.com/acs/ack-pod-identity-webhook:v0.1.1.0-gbddcb74-aliyun | 增強組件對ACK Serverless集群的兼容性。 | 2023年06月07日 | 組件升級異常可能會導(dǎo)致Pod創(chuàng)建失敗,建議在業(yè)務(wù)低谷期進行升級操作。 |
2023年02月
版本號 | 鏡像地址 | 變更內(nèi)容 | 變更時間 | 變更影響 |
0.1.0 | registry.cn-hangzhou.aliyuncs.com/acs/ack-pod-identity-webhook:v0.1.0.9-g26b8fde-aliyun | 實現(xiàn)為應(yīng)用Pod自動掛載OIDC Token以及自動配置環(huán)境變量的功能。 | 2023年02月01日 | 首個版本。 |