設定 OpenShift Data Foundation 附加程式的授信設定檔
虛擬私有雲 Classic 叢集
您可以使用 ODF 的可信設定檔來限制群集中正在執行的 Pod 對帳戶或群集中其他資源的存取權。 如需授信設定檔的相關資訊,請參閱 建立授信設定檔。
啟用 OpenShift Data Foundation 附加程式
-
請在您的叢集中啟用此附加元件。 檢閱 參數參考手冊。
範例指令:
ibmcloud oc cluster addon enable openshift-data-foundation -c CLUSTER_NAME --version 4.X.X -
驗證附加程式狀態為
normal,且狀態為ready。ibmcloud oc cluster addon ls --cluster CLUSTER-ID -
驗證度量值代理程式 Pod 已部署且狀態為
Running。kubectl get pods -n kube-system | grep ibm-storage-metrics-agent輸出範例:
ibm-storage-metrics-agent-644cd95b5b-rh2gd 2/2 Running 0 7h42m
設定 ODF 的可信設定檔
-
遵循 建立授信設定檔 的步驟。 在設定檔的 條件 中,請務必指定下列存取權。
- 當 名稱空間 等於
kube-system時容許存取 - Satellite 服務角色- Satellite Link 管理者、讀者
- Kubernetes Service 角色-管理員、編輯者
- 計費服務角色-讀者、操作員
- 當 名稱空間 等於
-
建立授信設定檔之後,請從主控台中的 授信設定檔 頁面複製 ID。
-
決定您是否要在附加程式使用的 Kubernetes 密碼中使用 設定檔 ID 或 API 金鑰。 您可以使用授信設定檔的 ID 或 API 金鑰來建立密碼。 儲存下列文字並輸入您的認證。 您可以遵循步驟來手動建立密鑰,也可以使用 Shell Script 來 在叢集裡自動建立密鑰。
具有 Pod 身分的認證範例:
IBMCLOUD_AUTHTYPE=pod-identity IBMCLOUD_PROFILEID=<TRUSTED-PROFILE-ID>具有 API 金鑰的認證範例。
IBMCLOUD_AUTHTYPE=iam IBMCLOUD_APIKEY=<API-KEY> -
將認證編碼為 base64。
echo -n "IBMCLOUD_AUTHTYPE=<IAM-OR-POD-IDENTITY> IBMCLOUD_APIKEY=<API-KEY>" | base64 -
在叢集裡建立密鑰,其中包含授信設定檔的認證。 將下列 YAML 儲存至稱為
ibm-cloud-credentials.yaml的檔案。 在ibm-credentials.env:欄位中,輸入 base64 編碼的 API 金鑰或授信設定檔的 ID。apiVersion: v1 data: ibm-credentials.env: # Trusted profile ID kind: Secret metadata: name: ibm-cloud-credentials namespace: kube-system type: Opaque -
在叢集裡建立密碼。
kubectl apply -f ibm-cloud-credentials.yaml -
重新啟動代理程式 Pod。
kubectl delete pod <ibm-storage-metrics-agent> -n kube-system>
使用 Shell Script 自動建立密鑰
-
遵循 建立授信設定檔 的步驟。 在設定檔的 條件 中,請務必指定下列存取權。
- 當 名稱空間 等於
kube-system時容許存取 - Satellite 服務角色- Satellite Link 管理者、讀者
- Kubernetes Service 角色-管理員、編輯者
- 計費服務角色-讀者、操作員
- 當 名稱空間 等於
-
將下列 Script 儲存至稱為
generate-secret.sh的檔案。IBMCLOUD_AUTHTYPE= SECRET= error() { if [[ $? != 0 ]]; then echo "$1"; exit 1 fi } #validate_arguments validates the arguments provided to the script validate_arguments() { if [[ "$#" -eq 1 ]]; then if [[ "$1" == "-h" ]] || [[ "$1" == "--help" ]]; then usage; exit 1 fi fi #number of arguments provided to the script must be 2 if [[ "$#" -ne 2 ]]; then echo "Invalid number of arguments provided" usage; exit 1 fi #1st argument must be 'iam' or 'pod-identity' if [[ "$1" != "iam" ]] && [[ "$1" != "pod-identity" ]]; then echo "Provide a valid auth-type" usage; exit 1 fi IBMCLOUD_AUTHTYPE=$1 SECRET=$2 } #usage - prints the usage for execution of script usage() { echo "USAGE: bash generate-secret.sh <auth-type> <apikey/profile-id> auth-type: auth-type should be either iam or pod-identity. Provide iam to use api key, pod-identity to use trusted profile" } #main main() { validate_arguments "$@" auth_type="IBMCLOUD_AUTHTYPE=$IBMCLOUD_AUTHTYPE" secret= if [[ "$IBMCLOUD_AUTHTYPE" == "iam" ]]; then secret="IBMCLOUD_APIKEY=$SECRET" else secret="IBMCLOUD_PROFILEID=$SECRET" fi encodedValue=$(echo -e "$auth_type\n$secret" | base64) #on certain os, base64 encoding introduces newline, removing the same here. encodedValue=${encodedValue//$'\n'/} #fetch the agent pod name agentPodName=$(kubectl get pods -n kube-system | grep ibm-storage-metrics-agent | awk '{print $1}') error "$(date +"%b %d %G %H:%M:%S"): Unable to fetch ODF agent pod." if [[ "$agentPodName" == "" ]]; then echo "$(date +"%b %d %G %H:%M:%S"): Error - ibm-storage-metrics-agent pod not found" exit 1 fi echo "apiVersion: v1 data: ibm-credentials.env: $encodedValue kind: Secret metadata: name: ibm-cloud-credentials namespace: kube-system type: Opaque" > ibm-cloud-credentials.yaml #create the k8s secret kubectl apply -f ibm-cloud-credentials.yaml &> /dev/null error "$(date +"%b %d %G %H:%M:%S"): Error creating ibm-cloud-credentials secret." echo "$(date +"%b %d %G %H:%M:%S"): Created ibm-cloud-credentials secret" #restart the ODF agent pod echo "$(date +"%b %d %G %H:%M:%S"): Restarting $agentPodName pod" kubectl delete pod "$agentPodName" -n kube-system &> /dev/null error "$(date +"%b %d %G %H:%M:%S"): Error restarting $agentPodName pod in kube-system namespace." agentPodStatus= for i in {1..12} do sleep 5 agentPodStatus=$(kubectl get pods -n kube-system | grep ibm-storage-metrics-agent | awk '{print $3}') if [[ "$agentPodStatus" == "Running" ]]; then echo "$(date +"%b %d %G %H:%M:%S"): $i: ODF billing agent is now using ibm-cloud-credentials secret" rm ibm-cloud-credentials.yaml error "Error deleting ibm-cloud-credentials.yaml." exit 0 fi done error "$(date +"%b %d %G %H:%M:%S"): Error - ibm-storage-metrics-agent is in $agentPodStatus state" } main "$@" -
執行
generate-secret.shScript,並指定iam或pod-identity作為IBMCLOUD_AUTHTYPE以及PROFILE-ID或API-KEY。搭配使用
pod-identity與您信任的設定檔 ID 來執行generate-secret.sh的指令範例。sh ./generate-secret.sh pod-identity PROFILE-ID搭配使用
iam與 API 金鑰來執行generate-secret.sh的範例指令。sh ./generate-secret.sh iam API-KEY -
重新啟動代理程式 Pod。
oc delete pod <ibm-storage-metrics-agent> -n kube-sysem -
透過在輸出中尋找
secret type,取得代理程式 Pod 的日誌以驗證驅動程式是否使用正確的認證。 例如,"secret-used":"ibm-cloud-credentials","type":"pod-identity"。oc logs ibm-storage-metrics-agent-xxx -c storage-secret-sidecar -n kube-system