設定 OpenShift Data Foundation 附加程式的授信設定檔

虛擬私有雲 Classic 叢集

您可以使用 ODF 的可信設定檔來限制群集中正在執行的 Pod 對帳戶或群集中其他資源的存取權。 如需授信設定檔的相關資訊,請參閱 建立授信設定檔

啟用 OpenShift Data Foundation 附加程式

  1. 請登入您的帳戶。 適用的話,請將適當的資源群組設為目標。 設定叢集的環境定義。

  2. 請在您的叢集中啟用此附加元件。 檢閱 參數參考手冊

    範例指令:

    ibmcloud oc cluster addon enable openshift-data-foundation -c CLUSTER_NAME --version 4.X.X
    
  3. 驗證附加程式狀態為 normal,且狀態為 ready

    ibmcloud oc cluster addon ls --cluster CLUSTER-ID
    
  4. 驗證度量值代理程式 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 的可信設定檔

  1. 遵循 建立授信設定檔 的步驟。 在設定檔的 條件 中,請務必指定下列存取權。

    • 名稱空間 等於 kube-system 時容許存取
    • Satellite 服務角色- Satellite Link 管理者、讀者
    • Kubernetes Service 角色-管理員、編輯者
    • 計費服務角色-讀者、操作員
  2. 建立授信設定檔之後,請從主控台中的 授信設定檔 頁面複製 ID。

  3. 決定您是否要在附加程式使用的 Kubernetes 密碼中使用 設定檔 IDAPI 金鑰。 您可以使用授信設定檔的 ID 或 API 金鑰來建立密碼。 儲存下列文字並輸入您的認證。 您可以遵循步驟來手動建立密鑰,也可以使用 Shell Script 來 在叢集裡自動建立密鑰

    具有 Pod 身分的認證範例:

    IBMCLOUD_AUTHTYPE=pod-identity
    IBMCLOUD_PROFILEID=<TRUSTED-PROFILE-ID>
    

    具有 API 金鑰的認證範例。

    IBMCLOUD_AUTHTYPE=iam
    IBMCLOUD_APIKEY=<API-KEY>
    
  4. 將認證編碼為 base64。

    echo -n "IBMCLOUD_AUTHTYPE=<IAM-OR-POD-IDENTITY>
    IBMCLOUD_APIKEY=<API-KEY>" | base64
    
  5. 在叢集裡建立密鑰,其中包含授信設定檔的認證。 將下列 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
    
  6. 請登入您的帳戶。 適用的話,請將適當的資源群組設為目標。 設定叢集的環境定義。

  7. 在叢集裡建立密碼。

    kubectl apply -f ibm-cloud-credentials.yaml
    
  8. 重新啟動代理程式 Pod。

    kubectl delete pod <ibm-storage-metrics-agent> -n kube-system>
    

使用 Shell Script 自動建立密鑰

  1. 遵循 建立授信設定檔 的步驟。 在設定檔的 條件 中,請務必指定下列存取權。

    • 名稱空間 等於 kube-system 時容許存取
    • Satellite 服務角色- Satellite Link 管理者、讀者
    • Kubernetes Service 角色-管理員、編輯者
    • 計費服務角色-讀者、操作員
  2. 將下列 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 "$@"
    
  3. 執行 generate-secret.sh Script,並指定 iampod-identity 作為 IBMCLOUD_AUTHTYPE 以及 PROFILE-IDAPI-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
    
  4. 重新啟動代理程式 Pod。

    oc delete pod <ibm-storage-metrics-agent> -n kube-sysem
    
  5. 透過在輸出中尋找 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