Chapitre 2. Opérateurs de réseautage
2.1. AWS Load Balancer Opérateur
L’opérateur AWS Load Balancer est un opérateur pris en charge par Red Hat que les utilisateurs peuvent éventuellement installer sur le service Red Hat OpenShift géré par SRE sur les clusters AWS (ROSA). L’opérateur AWS Load Balancer gère le cycle de vie du contrôleur AWS Load Balancer qui fournit les services AWS Elastic Load Balancing v2 (ELBv2) pour les applications exécutées dans les clusters ROSA.
2.1.1. Créer un rôle AWS IAM en utilisant l’utilitaire Cloud Credential Operator
Il est possible d’utiliser l’utilitaire Cloud Credential Operator (ccoctl) pour créer un rôle AWS IAM pour l’opérateur AWS Load Balancer. Le rôle AWS IAM interagit avec les sous-réseaux et les clouds privés virtuels (VPC).
Conditions préalables
- Il faut extraire et préparer le binaire ccoctl.
Procédure
Téléchargez la ressource personnalisée CredentialsRequest (CR) et stockez-la dans un répertoire en exécutant la commande suivante:
curl --create-dirs -o <credentials_requests_dir>/operator.yaml https://raw.githubusercontent.com/openshift/aws-load-balancer-operator/main/hack/operator-credentials-request.yaml
$ curl --create-dirs -o <credentials_requests_dir>/operator.yaml https://raw.githubusercontent.com/openshift/aws-load-balancer-operator/main/hack/operator-credentials-request.yaml
Copy to Clipboard Copied! L’utilitaire ccoctl permet de créer un rôle AWS IAM en exécutant la commande suivante:
ccoctl aws create-iam-roles \ --name <name> \ --region=<aws_region> \ --credentials-requests-dir=<credentials_requests_dir> \ --identity-provider-arn <oidc_arn>
$ ccoctl aws create-iam-roles \ --name <name> \ --region=<aws_region> \ --credentials-requests-dir=<credentials_requests_dir> \ --identity-provider-arn <oidc_arn>
Copy to Clipboard Copied! Exemple de sortie
2023/09/12 11:38:57 Role arn:aws:iam::777777777777:role/<name>-aws-load-balancer-operator-aws-load-balancer-operator created 2023/09/12 11:38:57 Saved credentials configuration to: /home/user/<credentials_requests_dir>/manifests/aws-load-balancer-operator-aws-load-balancer-operator-credentials.yaml 2023/09/12 11:38:58 Updated Role policy for Role <name>-aws-load-balancer-operator-aws-load-balancer-operator created
2023/09/12 11:38:57 Role arn:aws:iam::777777777777:role/<name>-aws-load-balancer-operator-aws-load-balancer-operator created
1 2023/09/12 11:38:57 Saved credentials configuration to: /home/user/<credentials_requests_dir>/manifests/aws-load-balancer-operator-aws-load-balancer-operator-credentials.yaml 2023/09/12 11:38:58 Updated Role policy for Role <name>-aws-load-balancer-operator-aws-load-balancer-operator created
Copy to Clipboard Copied! - 1
- Le nom de ressource Amazon (ARN) d’un rôle AWS IAM qui a été créé pour l’opérateur AWS Load Balancer, tel que arn:aws:iam::7777777777:role/<name>-aws-load-balancer-operator-aws-load-balancer-operator.
NoteLa longueur d’un nom de rôle AWS IAM doit être inférieure ou égale à 12 caractères.
2.1.2. Création d’un rôle AWS IAM pour le contrôleur en utilisant l’utilitaire Cloud Credential Operator
Il est possible d’utiliser l’utilitaire Cloud Credential Operator (ccoctl) pour créer un rôle AWS IAM pour le contrôleur AWS Load Balancer. Le rôle AWS IAM est utilisé pour interagir avec les sous-réseaux et les clouds privés virtuels (VPC).
Conditions préalables
- Il faut extraire et préparer le binaire ccoctl.
Procédure
Téléchargez la ressource personnalisée CredentialsRequest (CR) et stockez-la dans un répertoire en exécutant la commande suivante:
curl --create-dirs -o <credentials_requests_dir>/controller.yaml https://raw.githubusercontent.com/openshift/aws-load-balancer-operator/main/hack/controller/controller-credentials-request.yaml
$ curl --create-dirs -o <credentials_requests_dir>/controller.yaml https://raw.githubusercontent.com/openshift/aws-load-balancer-operator/main/hack/controller/controller-credentials-request.yaml
Copy to Clipboard Copied! L’utilitaire ccoctl permet de créer un rôle AWS IAM en exécutant la commande suivante:
ccoctl aws create-iam-roles \ --name <name> \ --region=<aws_region> \ --credentials-requests-dir=<credentials_requests_dir> \ --identity-provider-arn <oidc_arn>
$ ccoctl aws create-iam-roles \ --name <name> \ --region=<aws_region> \ --credentials-requests-dir=<credentials_requests_dir> \ --identity-provider-arn <oidc_arn>
Copy to Clipboard Copied! Exemple de sortie
2023/09/12 11:38:57 Role arn:aws:iam::777777777777:role/<name>-aws-load-balancer-operator-aws-load-balancer-controller created 2023/09/12 11:38:57 Saved credentials configuration to: /home/user/<credentials_requests_dir>/manifests/aws-load-balancer-operator-aws-load-balancer-controller-credentials.yaml 2023/09/12 11:38:58 Updated Role policy for Role <name>-aws-load-balancer-operator-aws-load-balancer-controller created
2023/09/12 11:38:57 Role arn:aws:iam::777777777777:role/<name>-aws-load-balancer-operator-aws-load-balancer-controller created
1 2023/09/12 11:38:57 Saved credentials configuration to: /home/user/<credentials_requests_dir>/manifests/aws-load-balancer-operator-aws-load-balancer-controller-credentials.yaml 2023/09/12 11:38:58 Updated Role policy for Role <name>-aws-load-balancer-operator-aws-load-balancer-controller created
Copy to Clipboard Copied! - 1
- Le nom de ressource Amazon (ARN) d’un rôle AWS IAM qui a été créé pour le contrôleur AWS Load Balancer, tel que arn:aws:iam::7777777777:role/<name>-aws-load-balancer-operator-aws-load-balancer-controller.
NoteLa longueur d’un nom de rôle AWS IAM doit être inférieure ou égale à 12 caractères.
2.1.3. Installation d’un opérateur AWS Load Balancer
Il est possible d’installer un opérateur AWS Load Balancer et un contrôleur AWS Load Balancer si vous répondez à certaines exigences.
Conditions préalables
- Il existe un cluster Red Hat OpenShift sur AWS (ROSA) doté d’une configuration VPC (BYO-VPC) sur plusieurs zones de disponibilité installées en mode Plan de contrôle hébergé (HCP).
- En tant qu’utilisateur, vous avez accès au cluster avec le rôle d’administrateur dédié.
- Il vous est possible de modifier le VPC et les sous-réseaux du cluster ROSA créé.
- Le ROSA CLI (rosa) a été installé.
- Le CLI d’Amazon Web Services (AWS) a été installé.
- Le service Red Hat OpenShift est disponible sur AWS 4.13 ou version ultérieure.
Lors de l’installation d’un opérateur AWS Load Balancer pour une utilisation avec un cluster ROSA dans une zone locale AWS (LZ), vous devez activer la zone locale AWS pour le compte. De plus, vous devez vous assurer que les services AWS Elastic Load Balancing v2 (ELBv2) existent dans la zone locale AWS.
Procédure
Identifiez l’ID de l’infrastructure de cluster et le DNS OpenID Connect (OIDC) en exécutant les commandes suivantes:
Identifier l’ID du cluster ROSA:
rosa describe cluster --cluster=<cluster_name> | grep -i 'Infra ID'
$ rosa describe cluster --cluster=<cluster_name> | grep -i 'Infra ID'
Copy to Clipboard Copied! a) ou
oc get infrastructure cluster -o json | jq -r '.status.infrastructureName'
$ oc get infrastructure cluster -o json | jq -r '.status.infrastructureName'
Copy to Clipboard Copied! Identifiez le cluster ROSA OIDC DNS à l’aide de la commande rosa CLI suivante:
rosa describe cluster --cluster=<cluster_name> | grep -i OIDC
$ rosa describe cluster --cluster=<cluster_name> | grep -i OIDC
1 Copy to Clipboard Copied! - 1
- Dans un exemple de DNS OIDC est oidc.op1.openshiftapps.com/28q7fsn54m2jjts3kd556aij4mu9omah.
a) ou
oc get authentication.config cluster -o=jsonpath="{.spec.serviceAccountIssuer}"
$ oc get authentication.config cluster -o=jsonpath="{.spec.serviceAccountIssuer}"
Copy to Clipboard Copied! - Localisez les informations OIDC Amazon Resource Name (ARN) sur la console Web AWS en naviguant vers les fournisseurs IAM Access Management Identity. L’exemple OIDC ARN est arn:aws:iam::777777777777:oidc-provider/<oidc_dns_url>.
- Enregistrez la sortie des commandes. Ces informations seront utilisées dans les prochaines étapes de cette procédure.
Créez la politique AWS IAM requise pour l’opérateur AWS Load Balancer à l’aide de l’AWS CLI.
Connectez-vous au cluster ROSA en tant qu’utilisateur avec le rôle d’administrateur dédié et créez un nouveau projet en utilisant la commande suivante:
oc new-project aws-load-balancer-operator
$ oc new-project aws-load-balancer-operator
Copy to Clipboard Copied! Attribuer la politique de confiance suivante au nouveau rôle AWS IAM:
IDP='{Cluster_OIDC_Endpoint}'
$ IDP='{Cluster_OIDC_Endpoint}'
Copy to Clipboard Copied! IDP_ARN="arn:aws:iam::{AWS_AccountNo}:oidc-provider/${IDP}"
$ IDP_ARN="arn:aws:iam::{AWS_AccountNo}:oidc-provider/${IDP}"
1 Copy to Clipboard Copied! - 1
- {AWS_AccountNo} par votre numéro de compte AWS et {Cluster_OIDC_Endpoint} par le DNS OIDC identifié plus tôt dans cette procédure.
Assurez-vous que la politique de trsut a été assignée au rôle AWS IAM.
Exemple de sortie
cat <<EOF > albo-operator-trusted-policy.json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "${IDP_ARN}" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "${IDP}:sub": "system:serviceaccount:aws-load-balancer-operator:aws-load-balancer-operator-controller-manager" } } } ] } EOF
$ cat <<EOF > albo-operator-trusted-policy.json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "${IDP_ARN}" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "${IDP}:sub": "system:serviceaccount:aws-load-balancer-operator:aws-load-balancer-operator-controller-manager" } } } ] } EOF
Copy to Clipboard Copied! ImportantIl ne faut pas inclure la partie https de l’URL DNS OIDC lorsque vous remplacez {Cluster_OIDC_Endpoint} par le DNS OIDC que vous avez identifié plus tôt. Il n’y a que les informations alphanumériques qui suivent l’URL.
Créer et vérifier le rôle en utilisant la politique de confiance générée:
aws iam create-role --role-name albo-operator --assume-role-policy-document file://albo-operator-trusted-policy.json
$ aws iam create-role --role-name albo-operator --assume-role-policy-document file://albo-operator-trusted-policy.json
Copy to Clipboard Copied! OPERATOR_ROLE_ARN=$(aws iam get-role --role-name albo-operator --output json | jq -r '.Role.Arn')
$ OPERATOR_ROLE_ARN=$(aws iam get-role --role-name albo-operator --output json | jq -r '.Role.Arn')
Copy to Clipboard Copied! echo $OPERATOR_ROLE_ARN
$ echo $OPERATOR_ROLE_ARN
Copy to Clipboard Copied! Exemple de sortie
ROLE arn:aws:iam::<aws_account_number>:role/albo-operator 2023-08-02T12:13:22Z ASSUMEROLEPOLICYDOCUMENT 2012-10-17 STATEMENT sts:AssumeRoleWithWebIdentity Allow STRINGEQUALS system:serviceaccount:aws-load-balancer-operator:aws-load-balancer-controller-manager PRINCIPAL arn:aws:iam:<aws_account_number>:oidc-provider/<oidc_provider_id>
ROLE arn:aws:iam::<aws_account_number>:role/albo-operator 2023-08-02T12:13:22Z ASSUMEROLEPOLICYDOCUMENT 2012-10-17 STATEMENT sts:AssumeRoleWithWebIdentity Allow STRINGEQUALS system:serviceaccount:aws-load-balancer-operator:aws-load-balancer-controller-manager PRINCIPAL arn:aws:iam:<aws_account_number>:oidc-provider/<oidc_provider_id>
Copy to Clipboard Copied! NoteLà où le rôle AWS IAM a été créé pour l’opérateur AWS Load Balancer, tel que arn:aws:iam::7777777777:role/albo-operator.
Joindre la politique d’autorisation de l’opérateur au rôle:
curl -o albo-operator-permission-policy.json https://raw.githubusercontent.com/openshift/aws-load-balancer-operator/release-1.1/hack/operator-permission-policy.json aws iam put-role-policy --role-name albo-operator --policy-name perms-policy-albo-operator --policy-document file://albo-operator-permission-policy.json
$ curl -o albo-operator-permission-policy.json https://raw.githubusercontent.com/openshift/aws-load-balancer-operator/release-1.1/hack/operator-permission-policy.json $ aws iam put-role-policy --role-name albo-operator --policy-name perms-policy-albo-operator --policy-document file://albo-operator-permission-policy.json
Copy to Clipboard Copied!
Créez la politique AWS IAM requise pour le contrôleur AWS Load Balancer à l’aide de l’AWS CLI:
Générez un fichier de stratégie de confiance pour votre fournisseur d’identité. L’exemple suivant utilise OpenID Connect:
IDP='{Cluster_OIDC_Endpoint}' IDP_ARN="arn:aws:iam::{AWS_AccountNo}:oidc-provider/${IDP}" cat <<EOF > albo-controller-trusted-policy.json
$ IDP='{Cluster_OIDC_Endpoint}' $ IDP_ARN="arn:aws:iam::{AWS_AccountNo}:oidc-provider/${IDP}" $ cat <<EOF > albo-controller-trusted-policy.json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "${IDP_ARN}" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "${IDP}:sub": "system:serviceaccount:aws-load-balancer-operator:aws-load-balancer-operator-controller-manager" } } } ] } EOF
Copy to Clipboard Copied! Créer et vérifier le rôle en utilisant la politique de confiance générée:
aws iam create-role --role-name albo-controller --assume-role-policy-document file://albo-controller-trusted-policy.json CONTROLLER_ROLE_ARN=$(aws iam get-role --role-name albo-controller --output json | jq -r '.Role.Arn') echo $CONTROLLER_ROLE_ARN
$ aws iam create-role --role-name albo-controller --assume-role-policy-document file://albo-controller-trusted-policy.json $ CONTROLLER_ROLE_ARN=$(aws iam get-role --role-name albo-controller --output json | jq -r '.Role.Arn') $ echo $CONTROLLER_ROLE_ARN
Copy to Clipboard Copied! Exemple de sortie
ROLE arn:aws:iam::<aws_account_number>:role/albo-controller 2023-08-02T12:13:22Z ASSUMEROLEPOLICYDOCUMENT 2012-10-17 STATEMENT sts:AssumeRoleWithWebIdentity Allow STRINGEQUALS system:serviceaccount:aws-load-balancer-operator:aws-load-balancer-operator-controller-manager PRINCIPAL arn:aws:iam:<aws_account_number>:oidc-provider/<oidc_provider_id>
ROLE arn:aws:iam::<aws_account_number>:role/albo-controller 2023-08-02T12:13:22Z ASSUMEROLEPOLICYDOCUMENT 2012-10-17 STATEMENT sts:AssumeRoleWithWebIdentity Allow STRINGEQUALS system:serviceaccount:aws-load-balancer-operator:aws-load-balancer-operator-controller-manager PRINCIPAL arn:aws:iam:<aws_account_number>:oidc-provider/<oidc_provider_id>
Copy to Clipboard Copied! NoteLà où le rôle AWS IAM a été créé pour le contrôleur AWS Load Balancer, tel que arn:aws:iam::7777777777:role/albo-controller.
Joindre la politique d’autorisation du contrôleur au rôle:
curl -o albo-controller-permission-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.4.7/docs/install/iam_policy.json aws iam put-role-policy --role-name albo-controller --policy-name perms-policy-albo-controller --policy-document file://albo-controller-permission-policy.json
$ curl -o albo-controller-permission-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.4.7/docs/install/iam_policy.json $ aws iam put-role-policy --role-name albo-controller --policy-name perms-policy-albo-controller --policy-document file://albo-controller-permission-policy.json
Copy to Clipboard Copied!
Dans le cas d’un ROSA avec cluster HCP, ajoutez les balises nécessaires à la découverte du sous-réseau:
Ajoutez la balise {Key: Value} suivante à la balise VPC hébergeant le cluster ROSA et à tous ses sous-réseaux. * remplacer {Cluster Infra ID} par l’ID Infra spécifié précédemment:
kubernetes.io/cluster/${Cluster Infra ID}:owned
kubernetes.io/cluster/${Cluster Infra ID}:owned
Copy to Clipboard Copied! Ajoutez les balises ELBv2 {Key: Value} suivantes aux sous-réseaux privés et, éventuellement, aux sous-réseaux publics:
- Les sous-réseaux privés: kubernetes.io/role/internal-elb:1
Les sous-réseaux publics: kubernetes.io/role/elb:1
NoteDes équilibreurs de charge internes et face à Internet seront créés dans la zone de disponibilité AWS à laquelle appartiennent ces sous-réseaux.
ImportantLes ressources ELBv2 (comme les ALB et les NLB) créées par AWS Load Balancer Operator n’héritent pas de balises personnalisées définies pour les clusters ROSA. Il faut définir des balises séparément pour ces ressources.
Créez l’opérateur AWS Load Balancer en remplissant les étapes suivantes:
Créez un objet OperatorGroup en exécutant la commande suivante:
cat <<EOF | oc apply -f - apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: aws-load-balancer-operator namespace: aws-load-balancer-operator spec: targetNamespaces: [] EOF
$ cat <<EOF | oc apply -f - apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: aws-load-balancer-operator namespace: aws-load-balancer-operator spec: targetNamespaces: [] EOF
Copy to Clipboard Copied! Créez un objet d’abonnement en exécutant la commande suivante:
cat <<EOF | oc apply -f - apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: aws-load-balancer-operator namespace: aws-load-balancer-operator spec: channel: stable-v1 name: aws-load-balancer-operator source: redhat-operators sourceNamespace: openshift-marketplace config: env: - name: ROLEARN value: "<operator_role_arn>" EOF
$ cat <<EOF | oc apply -f - apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: aws-load-balancer-operator namespace: aws-load-balancer-operator spec: channel: stable-v1 name: aws-load-balancer-operator source: redhat-operators sourceNamespace: openshift-marketplace config: env: - name: ROLEARN value: "<operator_role_arn>"
1 EOF
Copy to Clipboard Copied! - 1
- Indique le rôle ARN de l’opérateur AWS Load Balancer. L’objet CredentialsRequest utilise ce rôle ARN pour fournir les informations d’identification AWS. L’exemple de <operator_role_arn> est arn:aws:iam::<aws_account_number>:role/albo-operator.
Créez le contrôleur AWS Load Balancer:
apiVersion: networking.olm.openshift.io/v1 kind: AWSLoadBalancerController metadata: name: cluster spec: subnetTagging: Manual credentialsRequestConfig: stsIAMRoleARN: <controller_role_arn>
apiVersion: networking.olm.openshift.io/v1 kind: AWSLoadBalancerController metadata: name: cluster spec: subnetTagging: Manual credentialsRequestConfig: stsIAMRoleARN: <controller_role_arn>
Copy to Clipboard Copied! ImportantÉtant donné que les contrôleurs AWS Load Balancer ne prennent pas en charge la création des balanceurs de charge AWS (ALB) associés aux zones de disponibilité AWS et aux zones locales AWS, les clusters ROSA peuvent avoir des ALB associés exclusivement aux zones locales AWS ou aux zones de disponibilité AWS, mais pas simultanément.
La vérification
Confirmez une installation réussie en exécutant les commandes suivantes:
Collecter des informations sur les pods dans le cadre du projet:
oc get pods -n aws-load-balancer-operator
$ oc get pods -n aws-load-balancer-operator
Copy to Clipboard Copied! Consultez les journaux du projet:
oc logs -n aws-load-balancer-operator deployment/aws-load-balancer-operator-controller-manager -c manager
$ oc logs -n aws-load-balancer-operator deployment/aws-load-balancer-operator-controller-manager -c manager
Copy to Clipboard Copied!
2.1.4. Désinstallation d’un opérateur AWS Load Balancer
Afin de désinstaller un opérateur AWS Load Balancer et d’effectuer un nettoyage global des ressources associées, effectuez la procédure suivante.
Procédure
- Nettoyez l’application d’échantillon en supprimant les balanceurs de charge créés et gérés par l’ALBO. En savoir plus sur la suppression des balanceurs de charge, voir Supprimer un balanceur de charge d’application.
- Nettoyez les balises AWS VPC en supprimant les balises VPC qui ont été ajoutées aux sous-réseaux pour découvrir les sous-réseaux et pour créer des balanceurs de charge d’applications (ALB). Cliquez ici pour plus d’informations sur Tag Basics.
- Nettoyez les composants AWS Load Balancer Operator en supprimant à la fois l’opérateur AWS Load Balancer et le contrôleur d’équilibre de charge de l’application. Consultez Supprimer les opérateurs d’un cluster pour plus d’informations.