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
-
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 -
Vérifiez que l'état du module complémentaire est
normalet que le statut estready.ibmcloud oc cluster addon ls --cluster CLUSTER-ID -
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-agentExemple de sortie :
ibm-storage-metrics-agent-644cd95b5b-rh2gd 2/2 Running 0 7h42m
Mise en place de profils de confiance pour ODF
-
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
- Autoriser l'accès lorsque Namespace est égal à
-
Après avoir créé votre profil sécurisé, copiez l'ID à partir de la page Profils sécurisés de la console.
-
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> -
Encodez les identifiants sur base64.
echo -n "IBMCLOUD_AUTHTYPE=<IAM-OR-POD-IDENTITY> IBMCLOUD_APIKEY=<API-KEY>" | base64 -
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 zoneibm-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 -
Créez le secret dans votre cluster.
kubectl apply -f ibm-cloud-credentials.yaml -
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
-
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
- Autoriser l'accès lorsque Namespace est égal à
-
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 "$@" -
Exécutez le script
generate-secret.shet spécifieziamoupod-identitycommeIBMCLOUD_AUTHTYPEet votrePROFILE-IDouAPI-KEY.Exemple de commande permettant d'exécuter
generate-secret.shen utilisantpod-identityavec votre ID de profil sécurisé.sh ./generate-secret.sh pod-identity PROFILE-IDExemple de commande permettant d'exécuter
generate-secret.shen utilisantiamavec une clé d'API.sh ./generate-secret.sh iam API-KEY -
Redémarrez les pods d'agent.
oc delete pod <ibm-storage-metrics-agent> -n kube-sysem -
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 typedans 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