为 OpenShift Data Foundation 附加组件设置可信概要文件

虚拟私有云 经典集群

您可以使用 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. 执行以下步骤以 创建可信概要文件。 在概要文件的 条件 中,确保指定以下访问权。

    • Namespace 等于 kube-system 时允许访问
    • Satellite 服务角色- Satellite Link 管理员,读者
    • Kubernetes Service 角色-管理器,编辑器
    • 计费服务角色-读者,操作员
  2. 创建可信概要文件后,请从控制台中的“可信概要文件”页面复制标识。

  3. 决定是要在附加组件使用的 Kubernetes 私钥中使用 概要文件标识 还是 API 密钥。 您可以使用可信概要文件的标识或 API 密钥来创建私钥。 保存以下文本并输入凭证。 您可以执行手动创建私钥的步骤,也可以使用 shell 脚本 在集群中自动创建私钥

    具有 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 密钥或可信概要文件的标识。

    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 脚本自动创建私钥

  1. 执行以下步骤以 创建可信概要文件。 在概要文件的 条件 中,确保指定以下访问权。

    • Namespace 等于 kube-system 时允许访问
    • Satellite 服务角色- Satellite Link 管理员,读者
    • Kubernetes Service 角色-管理器,编辑器
    • 计费服务角色-读者,操作员
  2. 将以下脚本保存到名为 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 脚本并将 iampod-identity 指定为 IBMCLOUD_AUTHTYPE 以及 PROFILE-IDAPI-KEY

    用于通过将 pod-identity 与可信概要文件标识配合使用来运行 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. 获取代理程序 pod 的日志,以通过在输出中查找 secret type 来验证驱动程序是否正在使用正确的凭证。 例如,"secret-used":"ibm-cloud-credentials","type":"pod-identity"

    oc logs ibm-storage-metrics-agent-xxx -c storage-secret-sidecar -n kube-system