Configuration de profils sécurisés pour le module complémentaire OpenShift Data Foundation

Cloud privé virtuel Clusters classiques

Vous pouvez utiliser des profils de confiance pour ODF afin de limiter l'accès des pods en cours d'exécution dans votre cluster à d'autres ressources de votre compte ou de votre cluster. Pour plus d'informations sur les profils sécurisés, voir Création de profils sécurisés.

Activation du module complémentaire OpenShift Data Foundation

  1. Connectez-vous à votre compte. Le cas échéant, ciblez le groupe de ressources approprié. Définissez le contexte de votre cluster.

  2. Activez l'extension dans votre cluster. Consultez le Guide de référence des paramètres.

    Exemple de commande :

    ibmcloud oc cluster addon enable openshift-data-foundation -c CLUSTER_NAME --version 4.X.X
    
  3. Vérifiez que l'état du module complémentaire est normal et que le statut est ready.

    ibmcloud oc cluster addon ls --cluster CLUSTER-ID
    
  4. Vérifiez que le pod de l'agent de métriques est déployé et que le statut est Running.

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

    Exemple de sortie :

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

Mise en place de profils de confiance pour ODF

  1. Procédez comme suit pour créer un profil sécurisé. Dans les Conditions du profil, veillez à spécifier l'accès suivant.

    • Autoriser l'accès lorsque Namespace est égal à kube-system
    • Rôles de service Satellite- Satellite Link Administrator, Reader
    • Rôles Kubernetes Service-Gestionnaire, Editeur
    • Rôles de service de facturation-Lecteur, Opérateur
  2. Après avoir créé votre profil sécurisé, copiez l'ID à partir de la page Profils sécurisés de la console.

  3. Décidez si vous souhaitez utiliser l'ID de profil ou une clé d'API dans le secret Kubernetes utilisé par le module complémentaire. Vous pouvez créer le secret à l'aide de l'ID ou de la clé d'API du profil sécurisé. Sauvegardez le texte suivant et entrez vos données d'identification. Vous pouvez suivre les étapes de création manuelle du secret ou utiliser le script shell pour créer automatiquement le secret dans votre cluster.

    Exemples de données d'identification avec identité de pod:

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

    Exemple de données d'identification avec une clé d'API.

    IBMCLOUD_AUTHTYPE=iam
    IBMCLOUD_APIKEY=<API-KEY>
    
  4. Encodez les identifiants sur base64.

    echo -n "IBMCLOUD_AUTHTYPE=<IAM-OR-POD-IDENTITY>
    IBMCLOUD_APIKEY=<API-KEY>" | base64
    
  5. Créez un secret dans votre cluster qui contient les données d'identification du profil sécurisé. Sauvegardez le fichier YAML suivant dans un fichier appelé ibm-cloud-credentials.yaml. Dans la zone ibm-credentials.env:, entrez la clé d'API codée en base64 ou l'ID du profil sécurisé.

    apiVersion: v1
    data:
      ibm-credentials.env: # Trusted profile ID
    kind: Secret
    metadata:
      name: ibm-cloud-credentials
      namespace: kube-system
    type: Opaque
    
  6. Connectez-vous à votre compte. Le cas échéant, ciblez le groupe de ressources approprié. Définissez le contexte de votre cluster.

  7. Créez le secret dans votre cluster.

    kubectl apply -f ibm-cloud-credentials.yaml
    
  8. Redémarrez les pods d'agent.

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

Création automatique d'un secret à l'aide d'un script Shell

  1. Procédez comme suit pour créer un profil sécurisé. Dans les Conditions du profil, veillez à spécifier l'accès suivant.

    • Autoriser l'accès lorsque Namespace est égal à kube-system
    • Rôles de service Satellite- Satellite Link Administrator, Reader
    • Rôles Kubernetes Service-Gestionnaire, Editeur
    • Rôles de service de facturation-Lecteur, Opérateur
  2. Sauvegardez le script suivant dans un fichier appelé 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. Exécutez le script generate-secret.sh et spécifiez iam ou pod-identity comme IBMCLOUD_AUTHTYPE et votre PROFILE-ID ou API-KEY.

    Exemple de commande permettant d'exécuter generate-secret.sh en utilisant pod-identity avec votre ID de profil sécurisé.

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

    Exemple de commande permettant d'exécuter generate-secret.sh en utilisant iam avec une clé d'API.

    sh ./generate-secret.sh iam API-KEY
    
  4. Redémarrez les pods d'agent.

    oc delete pod <ibm-storage-metrics-agent> -n kube-sysem
    
  5. Obtenez les journaux du pod d'agent pour vérifier que le pilote utilise les données d'identification correctes en recherchant le fichier secret type dans la sortie. Par exemple,"secret-used":"ibm-cloud-credentials","type":"pod-identity".

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