Vertrauenswürdige Profile für das Add-on OpenShift Data Foundation einrichten

Virtuelle private Cloud Klassische Cluster

Sie können vertrauenswürdige Profile für ODF verwenden, um den Zugriff von laufenden Pods in Ihrem Cluster auf andere Ressourcen in Ihrem Konto oder Cluster zu beschränken. Weitere Informationen zu vertrauenswürdigen Profilen finden Sie unter Vertrauenswürdige Profile erstellen.

OpenShift Data Foundation-Add-on aktivieren

  1. Melden Sie sich an Ihrem Konto an. If applicable, target the appropriate resource group. Legen Sie den Kontext für den Cluster fest.

  2. Aktivieren Sie das Add-on in Ihrem Cluster. Überprüfen Sie die Parameterreferenz.

    Beispielbefehl:

    ibmcloud oc cluster addon enable openshift-data-foundation -c CLUSTER_NAME --version 4.X.X
    
  3. Stellen Sie sicher, dass der Add-on-Status normal und der Status ready lautet.

    ibmcloud oc cluster addon ls --cluster CLUSTER-ID
    
  4. Überprüfen Sie, dass der Pod des Metrikagenten bereitgestellt wurde und der Status Running lautet.

    kubectl get pods -n kube-system | grep ibm-storage-metrics-agent
    

    Beispielausgabe:

    ibm-storage-metrics-agent-644cd95b5b-rh2gd        2/2     Running   0          7h42m
    

Einrichten von vertrauenswürdigen Profilen für ODF

  1. Führen Sie die Schritte zum Erstellen eines vertrauenswürdigen Profils aus. Geben Sie in den Bedingungen für das Profil den folgenden Zugriff an:

    • Zugriff zulassen, wenn Namensbereich gleich kube-system ist
    • Satellite-Servicerollen- Satellite Link-Administrator, Leseberechtigter
    • Rollen Kubernetes Service-Manager, Editor
    • Abrechnungsservicerollen-Leser, Bediener
  2. Nachdem Sie Ihr vertrauenswürdiges Profil erstellt haben, kopieren Sie die ID von der Seite Vertrauenswürdige Profile in der Konsole.

  3. Legen Sie fest, ob Sie die Profil-ID oder einen API-Schlüssel im geheimen Kubernetes-Schlüssel verwenden möchten, den das Add-on verwendet. Sie können den geheimen Schlüssel mithilfe der ID oder des API-Schlüssels für das vertrauenswürdige Profil erstellen. Speichern Sie den folgenden Text und geben Sie Ihre Berechtigungsnachweise ein. Sie können die Schritte zum manuellen Erstellen des geheimen Schlüssels ausführen oder das Shell-Script verwenden, um den geheimen Schlüssel automatisch in Ihrem Cluster zu erstellen.

    Beispielberechtigungsnachweise mit Pod-Identität:

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

    Beispielberechtigungsnachweise mit einem API-Schlüssel.

    IBMCLOUD_AUTHTYPE=iam
    IBMCLOUD_APIKEY=<API-KEY>
    
  4. Verschlüsseln Sie die Anmeldedaten unter base64.

    echo -n "IBMCLOUD_AUTHTYPE=<IAM-OR-POD-IDENTITY>
    IBMCLOUD_APIKEY=<API-KEY>" | base64
    
  5. Erstellen Sie einen geheimen Schlüssel in Ihrem Cluster, der die Berechtigungsnachweise für das vertrauenswürdige Profil enthält. Speichern Sie die folgende YAML-Datei in einer Datei namens ibm-cloud-credentials.yaml. Geben Sie im Feld ibm-credentials.env: den base64-codierten API-Schlüssel oder die ID des vertrauenswürdigen Profils ein.

    apiVersion: v1
    data:
      ibm-credentials.env: # Trusted profile ID
    kind: Secret
    metadata:
      name: ibm-cloud-credentials
      namespace: kube-system
    type: Opaque
    
  6. Melden Sie sich an Ihrem Konto an. If applicable, target the appropriate resource group. Legen Sie den Kontext für den Cluster fest.

  7. Erstellen Sie den geheimen Schlüssel in Ihrem Cluster.

    kubectl apply -f ibm-cloud-credentials.yaml
    
  8. Starten Sie die Agentenpods erneut.

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

Geheimen Schlüssel mithilfe eines Shell-Scripts automatisch erstellen

  1. Führen Sie die Schritte zum Erstellen eines vertrauenswürdigen Profils aus. Geben Sie in den Bedingungen für das Profil den folgenden Zugriff an:

    • Zugriff zulassen, wenn Namensbereich gleich kube-system ist
    • Satellite-Servicerollen- Satellite Link-Administrator, Leseberechtigter
    • Rollen Kubernetes Service-Manager, Editor
    • Abrechnungsservicerollen-Leser, Bediener
  2. Speichern Sie das folgende Script in einer Datei namens 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. Führen Sie das Script generate-secret.sh aus und geben Sie iam oder pod-identity als IBMCLOUD_AUTHTYPE und Ihre PROFILE-ID oder API-KEY an.

    Beispielbefehl zum Ausführen von generate-secret.sh unter Verwendung von pod-identity mit Ihrer vertrauenswürdigen Profil-ID.

    sh ./generate-secret.sh pod-identity PROFILE-ID
    

    Beispielbefehl für die Ausführung von generate-secret.sh mithilfe von iam mit API-Schlüssel.

    sh ./generate-secret.sh iam API-KEY
    
  4. Starten Sie die Agentenpods erneut.

    oc delete pod <ibm-storage-metrics-agent> -n kube-sysem
    
  5. Rufen Sie die Protokolle des Agentenpods ab, um zu überprüfen, ob der Treiber die richtigen Berechtigungsnachweise verwendet, indem Sie in der Ausgabe nach secret type suchen. Beispiel: "secret-used":"ibm-cloud-credentials","type":"pod-identity".

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