Configuración de perfiles de confianza para el complemento OpenShift Data Foundation

Nube privada virtual Clusters clásicos

Puede utilizar perfiles de confianza para ODF para limitar el acceso que tienen los pods en ejecución de su cluster a otros recursos de su cuenta o cluster. Para obtener más información sobre los perfiles de confianza, consulte Creación de perfiles de confianza.

Habilitación del complemento OpenShift Data Foundation

  1. Inicie una sesión en la cuenta. If applicable, target the appropriate resource group. Establezca el contexto para el clúster.

  2. Activa el complemento en tu clúster. Revise la Referencia de parámetros.

    Mandato de ejemplo:

    ibmcloud oc cluster addon enable openshift-data-foundation -c CLUSTER_NAME --version 4.X.X
    
  3. Verifique que el estado del complemento sea normal y el estado sea ready.

    ibmcloud oc cluster addon ls --cluster CLUSTER-ID
    
  4. Verifique que el pod del agente de métricas se haya desplegado y que el estado sea Running.

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

    Salida de ejemplo:

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

Configuración de perfiles de confianza para ODF

  1. Siga los pasos para crear un perfil de confianza. En las Condiciones del perfil, asegúrese de especificar el acceso siguiente.

    • Permitir acceso cuando Espacio de nombres sea igual a kube-system
    • Satellite- Satellite Link Administrator, Reader
    • Roles de Kubernetes Service-Gestor, Editor
    • Roles de servicio de facturación-Lector, Operador
  2. Después de crear el perfil de confianza, copie el ID de la página Perfiles de confianza en la consola.

  3. Decida si desea utilizar el ID de perfil o una clave de API en el secreto de Kubernetes que utiliza el complemento. Puede crear el secreto utilizando el ID o la clave de API para el perfil de confianza. Guarde el texto siguiente y especifique sus credenciales. Puede seguir los pasos para crear el secreto manualmente o puede utilizar el script de shell para crear automáticamente el secreto en el clúster.

    Credenciales de ejemplo con identidad de pod:

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

    Credenciales de ejemplo con una clave de API.

    IBMCLOUD_AUTHTYPE=iam
    IBMCLOUD_APIKEY=<API-KEY>
    
  4. Codifica las credenciales en base64.

    echo -n "IBMCLOUD_AUTHTYPE=<IAM-OR-POD-IDENTITY>
    IBMCLOUD_APIKEY=<API-KEY>" | base64
    
  5. Cree un secreto en el clúster que contenga las credenciales para el perfil de confianza. Guarde el siguiente archivo YAML en un archivo denominado ibm-cloud-credentials.yaml. En el campo ibm-credentials.env:, especifique la clave de API codificada base64 o el ID del perfil de confianza.

    apiVersion: v1
    data:
      ibm-credentials.env: # Trusted profile ID
    kind: Secret
    metadata:
      name: ibm-cloud-credentials
      namespace: kube-system
    type: Opaque
    
  6. Inicie una sesión en la cuenta. If applicable, target the appropriate resource group. Establezca el contexto para el clúster.

  7. Cree el secreto en el clúster.

    kubectl apply -f ibm-cloud-credentials.yaml
    
  8. Reinicie los pods de agente.

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

Creación automática de un secreto utilizando un script de shell

  1. Siga los pasos para crear un perfil de confianza. En las Condiciones del perfil, asegúrese de especificar el acceso siguiente.

    • Permitir acceso cuando Espacio de nombres sea igual a kube-system
    • Satellite- Satellite Link Administrator, Reader
    • Roles de Kubernetes Service-Gestor, Editor
    • Roles de servicio de facturación-Lector, Operador
  2. Guarde el script siguiente en un archivo denominado 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. Ejecute el script generate-secret.sh y especifique iam o pod-identity como IBMCLOUD_AUTHTYPE y PROFILE-ID o API-KEY.

    Mandato de ejemplo para ejecutar generate-secret.sh utilizando pod-identity con el ID de perfil de confianza.

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

    Mandato de ejemplo para ejecutar generate-secret.sh utilizando iam con una clave de API.

    sh ./generate-secret.sh iam API-KEY
    
  4. Reinicie los pods de agente.

    oc delete pod <ibm-storage-metrics-agent> -n kube-sysem
    
  5. Obtenga los registros del pod de agente para verificar que el controlador está utilizando las credenciales correctas buscando secret type en la salida. Por ejemplo,"secret-used":"ibm-cloud-credentials","type":"pod-identity".

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