19.6. Utilisation du mode manuel avec GCP Workload Identity
Le mode manuel avec l'identité de charge de travail GCP est pris en charge pour Google Cloud Platform (GCP).
Cette stratégie d'informations d'identification n'est prise en charge que pour les nouveaux clusters OpenShift Container Platform et doit être configurée lors de l'installation. Vous ne pouvez pas reconfigurer un cluster existant qui utilise une stratégie d'informations d'identification différente pour utiliser cette fonctionnalité.
En mode manuel avec GCP Workload Identity, les composants individuels du cluster OpenShift Container Platform peuvent se faire passer pour des comptes de service IAM à l'aide d'informations d'identification à court terme et à privilèges limités.
Les demandes d'informations d'identification nouvelles et actualisées sont automatisées en utilisant un fournisseur d'identité OpenID Connect (OIDC) configuré de manière appropriée, associé à des comptes de service IAM. OpenShift Container Platform signe des jetons de compte de service qui sont approuvés par GCP, et peuvent être projetés dans un pod et utilisés pour l'authentification. Par défaut, les jetons sont actualisés au bout d'une heure.
L'utilisation du mode manuel avec GCP Workload Identity modifie le contenu des informations d'identification GCP fournies aux composants individuels d'OpenShift Container Platform.
Format du secret des BPC
apiVersion: v1 kind: Secret metadata: namespace: <target_namespace> name: <target_secret_name> data: service_account.json: <service_account>
apiVersion: v1
kind: Secret
metadata:
namespace: <target_namespace>
name: <target_secret_name>
data:
service_account.json: <service_account>
Contenu du fichier service_account.json
encodé en Base64 à l'aide d'informations d'identification à long terme
{ "type": "service_account", "project_id": "<project_id>", "private_key_id": "<private_key_id>", "private_key": "<private_key>", "client_email": "<client_email_address>", "client_id": "<client_id>", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/<client_email_address>" }
{
"type": "service_account",
"project_id": "<project_id>",
"private_key_id": "<private_key_id>",
"private_key": "<private_key>",
"client_email": "<client_email_address>",
"client_id": "<client_id>",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/<client_email_address>"
}
Contenu du fichier service_account.json
encodé en Base64 à l'aide de l'identité de la charge de travail GCP
{ "type": "external_account", "audience": "//iam.googleapis.com/projects/123456789/locations/global/workloadIdentityPools/test-pool/providers/test-provider", "subject_token_type": "urn:ietf:params:oauth:token-type:jwt", "token_url": "https://sts.googleapis.com/v1/token", "service_account_impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/<client_email_address>:generateAccessToken", "credential_source": { "file": "<path_to_token>", "format": { "type": "text" } } }
{
"type": "external_account",
"audience": "//iam.googleapis.com/projects/123456789/locations/global/workloadIdentityPools/test-pool/providers/test-provider",
"subject_token_type": "urn:ietf:params:oauth:token-type:jwt",
"token_url": "https://sts.googleapis.com/v1/token",
"service_account_impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/<client_email_address>:generateAccessToken",
"credential_source": {
"file": "<path_to_token>",
"format": {
"type": "text"
}
}
}
- 1
- Le type de certificat est
external_account
. - 2
- Le public cible est le fournisseur d'identité de charge de travail GCP.
- 3
- L'URL de la ressource du compte de service qui peut être associé à ces informations d'identification.
- 4
- Le chemin d'accès au jeton du compte de service dans le pod. Par convention, il s'agit de
/var/run/secrets/openshift/serviceaccount/token
pour les composants de OpenShift Container Platform.
19.6.1. Installation d'un cluster OpenShift Container Platform configuré en mode manuel avec GCP Workload Identity
Pour installer un cluster configuré pour utiliser le Cloud Credential Operator (CCO) en mode manuel avec GCP Workload Identity :
Comme le cluster fonctionne en mode manuel lors de l'utilisation de GCP Workload Identity, il n'est pas en mesure de créer de nouvelles informations d'identification pour les composants avec les autorisations dont ils ont besoin. Lors de la mise à niveau vers une version mineure différente d'OpenShift Container Platform, il y a souvent de nouvelles exigences en matière d'autorisations GCP. Avant de mettre à niveau un cluster qui utilise GCP Workload Identity, l'administrateur du cluster doit s'assurer manuellement que les autorisations GCP sont suffisantes pour les composants existants et disponibles pour tous les nouveaux composants.
19.6.1.1. Configuration de l'utilitaire Cloud Credential Operator
Pour créer et gérer des informations d'identification du nuage depuis l'extérieur du cluster lorsque le Cloud Credential Operator (CCO) fonctionne en mode manuel, extrayez et préparez le binaire de l'utilitaire CCO (ccoctl
).
L'utilitaire ccoctl
est un binaire Linux qui doit être exécuté dans un environnement Linux.
Conditions préalables
- Vous avez accès à un compte OpenShift Container Platform avec un accès administrateur de cluster.
-
Vous avez installé l'OpenShift CLI (
oc
).
Procédure
Obtenez l'image de la version d'OpenShift Container Platform en exécutant la commande suivante :
RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
$ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
Copy to Clipboard Copied! Obtenez l'image du conteneur CCO à partir de l'image de la version d'OpenShift Container Platform en exécutant la commande suivante :
CCO_IMAGE=$(oc adm release info --image-for='cloud-credential-operator' $RELEASE_IMAGE -a ~/.pull-secret)
$ CCO_IMAGE=$(oc adm release info --image-for='cloud-credential-operator' $RELEASE_IMAGE -a ~/.pull-secret)
Copy to Clipboard Copied! NoteVeillez à ce que l'architecture de
$RELEASE_IMAGE
corresponde à l'architecture de l'environnement dans lequel vous utiliserez l'outilccoctl
.Extrayez le binaire
ccoctl
de l'image du conteneur CCO dans l'image de la version d'OpenShift Container Platform en exécutant la commande suivante :oc image extract $CCO_IMAGE --file="/usr/bin/ccoctl" -a ~/.pull-secret
$ oc image extract $CCO_IMAGE --file="/usr/bin/ccoctl" -a ~/.pull-secret
Copy to Clipboard Copied! Modifiez les autorisations pour rendre
ccoctl
exécutable en exécutant la commande suivante :chmod 775 ccoctl
$ chmod 775 ccoctl
Copy to Clipboard Copied!
Vérification
Pour vérifier que
ccoctl
est prêt à être utilisé, affichez le fichier d'aide en exécutant la commande suivante :ccoctl --help
$ ccoctl --help
Copy to Clipboard Copied! Sortie de
ccoctl --help
:OpenShift credentials provisioning tool Usage: ccoctl [command] Available Commands: alibabacloud Manage credentials objects for alibaba cloud aws Manage credentials objects for AWS cloud gcp Manage credentials objects for Google cloud help Help about any command ibmcloud Manage credentials objects for IBM Cloud nutanix Manage credentials objects for Nutanix Flags: -h, --help help for ccoctl Use "ccoctl [command] --help" for more information about a command.
OpenShift credentials provisioning tool Usage: ccoctl [command] Available Commands: alibabacloud Manage credentials objects for alibaba cloud aws Manage credentials objects for AWS cloud gcp Manage credentials objects for Google cloud help Help about any command ibmcloud Manage credentials objects for IBM Cloud nutanix Manage credentials objects for Nutanix Flags: -h, --help help for ccoctl Use "ccoctl [command] --help" for more information about a command.
Copy to Clipboard Copied!
19.6.1.2. Création de ressources GCP avec l'utilitaire Cloud Credential Operator
Vous pouvez utiliser la commande ccoctl gcp create-all
pour automatiser la création de ressources GCP.
Par défaut, ccoctl
crée les objets dans le répertoire dans lequel les commandes sont exécutées. Pour créer les objets dans un autre répertoire, utilisez l'option --output-dir
. Cette procédure utilise <path_to_ccoctl_output_dir>
pour faire référence à ce répertoire.
Conditions préalables
Vous devez avoir :
-
Extraction et préparation du binaire
ccoctl
.
Procédure
Extrayez la liste des objets
CredentialsRequest
de l'image de la version d'OpenShift Container Platform en exécutant la commande suivante :oc adm release extract \ --credentials-requests \ --cloud=gcp \ --to=<path_to_directory_with_list_of_credentials_requests>/credrequests \ quay.io/<path_to>/ocp-release:<version>
$ oc adm release extract \ --credentials-requests \ --cloud=gcp \ --to=<path_to_directory_with_list_of_credentials_requests>/credrequests \
1 quay.io/<path_to>/ocp-release:<version>
Copy to Clipboard Copied! - 1
credrequests
est le répertoire dans lequel la liste des objetsCredentialsRequest
est stockée. Cette commande crée le répertoire s'il n'existe pas.
NoteL'exécution de cette commande peut prendre quelques instants.
Si votre cluster utilise les capacités du cluster pour désactiver un ou plusieurs composants optionnels, supprimez les ressources personnalisées
CredentialsRequest
pour tous les composants désactivés.Exemple
credrequests
contenu du répertoire pour OpenShift Container Platform 4.12 sur GCP0000_26_cloud-controller-manager-operator_16_credentialsrequest-gcp.yaml 0000_30_machine-api-operator_00_credentials-request.yaml 0000_50_cloud-credential-operator_05-gcp-ro-credentialsrequest.yaml 0000_50_cluster-image-registry-operator_01-registry-credentials-request-gcs.yaml 0000_50_cluster-ingress-operator_00-ingress-credentials-request.yaml 0000_50_cluster-network-operator_02-cncc-credentials.yaml 0000_50_cluster-storage-operator_03_credentials_request_gcp.yaml
0000_26_cloud-controller-manager-operator_16_credentialsrequest-gcp.yaml
1 0000_30_machine-api-operator_00_credentials-request.yaml
2 0000_50_cloud-credential-operator_05-gcp-ro-credentialsrequest.yaml
3 0000_50_cluster-image-registry-operator_01-registry-credentials-request-gcs.yaml
4 0000_50_cluster-ingress-operator_00-ingress-credentials-request.yaml
5 0000_50_cluster-network-operator_02-cncc-credentials.yaml
6 0000_50_cluster-storage-operator_03_credentials_request_gcp.yaml
7 Copy to Clipboard Copied! - 1
- Le contrôleur de nuages Manager Operator CR est requis.
- 2
- Le certificat de conducteur de machine API est exigé.
- 3
- Le certificat d'opérateur de titres de créance en nuage est requis.
- 4
- Le certificat d'opérateur de registre d'images est requis.
- 5
- Le CR de l'opérateur d'entrée est requis.
- 6
- Le certificat d'opérateur de réseau est requis.
- 7
- Le Storage Operator CR est un composant optionnel et peut être désactivé dans votre cluster.
Utilisez l'outil
ccoctl
pour traiter tous les objetsCredentialsRequest
dans le répertoirecredrequests
:ccoctl gcp create-all \ --name=<name> \ --region=<gcp_region> \ --project=<gcp_project_id> \ --credentials-requests-dir=<path_to_directory_with_list_of_credentials_requests>/credrequests
$ ccoctl gcp create-all \ --name=<name> \ --region=<gcp_region> \ --project=<gcp_project_id> \ --credentials-requests-dir=<path_to_directory_with_list_of_credentials_requests>/credrequests
Copy to Clipboard Copied! où :
-
<name>
est le nom défini par l'utilisateur pour toutes les ressources GCP créées et utilisées pour le suivi. -
<gcp_region>
est la région du GCP dans laquelle les ressources en nuage seront créées. -
<gcp_project_id>
est l'identifiant du projet GCP dans lequel les ressources en nuage seront créées. -
<path_to_directory_with_list_of_credentials_requests>/credrequests
est le répertoire contenant les fichiers des manifestesCredentialsRequest
pour créer les comptes de service GCP.
NoteSi votre cluster utilise des fonctionnalités d'aperçu technologique activées par l'ensemble de fonctionnalités
TechPreviewNoUpgrade
, vous devez inclure le paramètre--enable-tech-preview
.-
Vérification
Pour vérifier que les secrets d'OpenShift Container Platform sont créés, listez les fichiers dans le répertoire
<path_to_ccoctl_output_dir>/manifests
:ls <path_to_ccoctl_output_dir>/manifests
$ ls <path_to_ccoctl_output_dir>/manifests
Copy to Clipboard Copied!
Vous pouvez vérifier que les comptes de service IAM sont créés en interrogeant GCP. Pour plus d'informations, reportez-vous à la documentation GCP sur l'établissement de la liste des comptes de service IAM.
19.6.1.3. Exécution du programme d'installation
Conditions préalables
- Configurez un compte auprès de la plateforme cloud qui héberge votre cluster.
- Obtenir l'image de la version d'OpenShift Container Platform.
Procédure
Allez dans le répertoire qui contient le programme d'installation et créez le fichier
install-config.yaml
:openshift-install create install-config --dir <installation_directory>
openshift-install create install-config --dir <installation_directory>
Copy to Clipboard Copied! où
<installation_directory>
est le répertoire dans lequel le programme d'installation crée les fichiers.Modifiez le fichier de configuration
install-config.yaml
de manière à ce qu'il contienne le paramètrecredentialsMode
fixé àManual
.Exemple
install-config.yaml
fichier de configurationapiVersion: v1 baseDomain: cluster1.example.com credentialsMode: Manual compute: - architecture: amd64 hyperthreading: Enabled
apiVersion: v1 baseDomain: cluster1.example.com credentialsMode: Manual
1 compute: - architecture: amd64 hyperthreading: Enabled
Copy to Clipboard Copied! - 1
- Cette ligne est ajoutée pour fixer le paramètre
credentialsMode
àManual
.
Créez les manifestes d'installation requis pour OpenShift Container Platform :
openshift-install create manifests
$ openshift-install create manifests
Copy to Clipboard Copied! Copiez les manifestes générés par
ccoctl
dans le répertoire manifests créé par le programme d'installation :cp /<path_to_ccoctl_output_dir>/manifests/* ./manifests/
$ cp /<path_to_ccoctl_output_dir>/manifests/* ./manifests/
Copy to Clipboard Copied! Copiez la clé privée générée par
ccoctl
dans le répertoiretls
dans le répertoire d'installation :cp -a /<path_to_ccoctl_output_dir>/tls .
$ cp -a /<path_to_ccoctl_output_dir>/tls .
Copy to Clipboard Copied! Exécutez le programme d'installation d'OpenShift Container Platform :
./openshift-install create cluster
$ ./openshift-install create cluster
Copy to Clipboard Copied!
19.6.1.4. Vérification de l'installation
- Connectez-vous au cluster OpenShift Container Platform.
Vérifiez que le cluster n'a pas d'identifiants
root
:oc get secrets -n kube-system gcp-credentials
$ oc get secrets -n kube-system gcp-credentials
Copy to Clipboard Copied! Le résultat devrait ressembler à ce qui suit :
Error from server (NotFound): secrets "gcp-credentials" not found
Error from server (NotFound): secrets "gcp-credentials" not found
Copy to Clipboard Copied! Vérifiez que les composants utilisent les comptes de service spécifiés dans les manifestes secrets, au lieu d'utiliser les informations d'identification créées par l'OCC :
Exemple de commande avec l'opérateur de registre d'images
oc get secrets -n openshift-image-registry installer-cloud-credentials -o json | jq -r '.data."service_account.json"' | base64 -d
$ oc get secrets -n openshift-image-registry installer-cloud-credentials -o json | jq -r '.data."service_account.json"' | base64 -d
Copy to Clipboard Copied! Le résultat doit indiquer le rôle et le jeton d'identité Web utilisés par le composant et ressembler à ce qui suit :
Exemple de sortie avec l'opérateur de registre d'images
{ "type": "external_account", "audience": "//iam.googleapis.com/projects/123456789/locations/global/workloadIdentityPools/test-pool/providers/test-provider", "subject_token_type": "urn:ietf:params:oauth:token-type:jwt", "token_url": "https://sts.googleapis.com/v1/token", "service_account_impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/<client-email-address>:generateAccessToken", "credential_source": { "file": "/var/run/secrets/openshift/serviceaccount/token", "format": { "type": "text" } } }
{ "type": "external_account",
1 "audience": "//iam.googleapis.com/projects/123456789/locations/global/workloadIdentityPools/test-pool/providers/test-provider", "subject_token_type": "urn:ietf:params:oauth:token-type:jwt", "token_url": "https://sts.googleapis.com/v1/token", "service_account_impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/<client-email-address>:generateAccessToken",
2 "credential_source": { "file": "/var/run/secrets/openshift/serviceaccount/token", "format": { "type": "text" } } }
Copy to Clipboard Copied!