Aperçu de la nouvelle installation et administration d'Apigee hybrid


Guide de l'utilisateur en version preview :
Version preview des nouvelles procédures d'installation et d'administration pour Apigee hybrid v1.8.


Dans ce document :

Aperçu


Ce document est destiné aux persona d'opérateur Apigee (utilisateurs qui installent, gèrent et administrent les installations d'Apigee hybrid). Pour pouvoir suivre les instructions de ce document, un prérequis nécessaire est de maîtriser l'installation d'Apigee hybrid sur l'une des plates-formes Kubernetes compatibles. Il est recommandé de créer une organisation Apigee d'évaluation pour tenter les étapes ci-dessous.

Commentaires

Envoyez vos commentaires sur ce processus à l'adresse Apigee-hybrid-install-preview@google.com.


Présentation

La nouvelle expérience d'installation d'Apigee hybrid installe les composants Apigee à l'aide de kubectl et intègre l'installation et la gestion d'Apigee hybrid avec des outils d'orchestration de configuration Kubernetes tels que Kustomize. Les validations améliorées et la visibilité des composants installés permettent un meilleur débogage et améliorent le processus global d'installation.

Un script d'installation, apigee-hybrid-setup.sh, fournit un outil simple pour l'installation de base. Vous pouvez l'utiliser pour créer votre installation hybride, puis la modifier en fonction de vos besoins avec kubectl, ou créer votre installation hybride à partir de zéro à l'aide de kubectl. Toutes les propriétés de configuration d'Apigee hybride sont stockées dans des fichiers YAML, un pour chaque composant principal. Cela permet un contrôle beaucoup plus précis de votre installation hybride sur votre environnement Kubernetes. Vous trouverez les fichiers de configuration et les scripts d'installation dans le dépôt GitHub.

Modifications apportées au nouveau processus d'installation

Apigee modifie le processus d'installation d'Apigee hybrid pour les raisons suivantes :

  • La nouvelle méthode d'installation d'Apigee hybrid peut être intégrée aux outils CI/CD Kubernetes existants tels qu'Argo, Flux ou Anthos Config Management qui n'utilisent pas de fichier de configuration overrides.yaml.
  • Apigee hybrid fournissait apigeectl, un outil de création de modèles personnalisés qui génère les fichiers manifestes Kubernetes (entre autres) servant à installer et gérer Apigee hybrid dans les clusters Kubernetes. Le nouveau processus d'installation et de gestion offre une expérience semblable à celle d'autres éditeurs de logiciels.
  • Le nouveau processus permet une installation de base rapide en créant automatiquement des comptes de service avec les autorisations, certificats TLS, valeurs par défaut et autres éléments de base requis.

Prérequis

Avant d'utiliser cette version preview, vous devez remplir les conditions préalables suivantes :

Version bêta

Cette preview est destinée à fonctionner avec la version 1.8.x d'Apigee hybrid. Les versions ultérieures d'Apigee hybrid ne sont pas compatibles.

Configuration d'Apigee hybrid

Avant de procéder à l'installation réelle d'Apigee hybrid, vous devez suivre les instructions indiquées dans les sections suivantes de la documentation :

  1. Configuration du projet et de l'organisation
  2. Configuration de l'environnement d'exécution hybride

Outils

En outre, vous devez télécharger et configurer les outils suivants sur votre poste de travail :

  • curl
  • docker est requis pour exécuter le script apigee-hybrid-setup.sh. Suivez les instructions de la section Obtenir Docker pour installer Docker.
  • envsubst devrait être disponible sur la plupart des systèmes Linux/UNIX. Pour macOS et autres systèmes, suivez les instructions de ce dépôt.
  • jq doit être installé. Téléchargez jq.
  • kpt Téléchargez kpt.

  • Version 1.23 ou ultérieure de kubectl. Consultez la section Installer les outils : kubectl dans la documentation de Kubernetes.

Variables communes utilisées dans ce guide

Ce guide utilise les variables d'environnement suivantes dans plusieurs des étapes réalisées. Vous pouvez les définir en ligne de commande ou avec un script, ou remplacer le texte des commandes lorsque vous les saisissez.

  • APIGEE_NAMESPACE : votre espace de noms Apigee. Par défaut, il s'agit de la valeur apigee. Cependant, vous pouvez utiliser un espace de noms différent.
  • CLUSTER_NAME : nom du cluster sur lequel vous installez Apigee hybrid. Il s'agit du cluster que vous créez à l'Étape 1 : Créer un cluster.
  • CLUSTER_LOCATION : région de votre cluster. Les procédures décrites dans ce guide partent du principe que vous utilisez un cluster régional. Si vous utilisez un cluster zonal, reportez-vous aux instructions de l'Étape 1 : Créer un cluster.
  • ENV_GROUP : nom du groupe d'environnements de votre installation Apigee hybrid. Il s'agit du groupe d'environnements que vous créez à l'Étape 3 : Créer un groupe d'environnements. Vous pouvez créer plusieurs groupes d'environnements.
  • ENV_NAME : nom du groupe d'environnements de votre installation Apigee hybrid. Il s'agit du groupe d'environnements que vous créez à l'Étape 3 : Créer un groupe d'environnements. Vous pouvez créer plusieurs groupes d'environnements.
  • INSTALL_DIR : répertoire dans lequel vous installez Apigee hybrid. Par défaut, il s'agit du sous-répertoire apigee-hybrid-install/ du répertoire dans lequel vous téléchargez le programme d'installation, par exemple : /myhybrid/apigee-hybrid-install/. Il s'agit du répertoire racine de la structure de fichiers décrite dans la Structure des dossiers de configuration d'Apigee hybrid.
  • INSTANCE_DIR : répertoire d'une instance Apigee hybrid spécifique. Par défaut, la première instance est nommée instance-1. Le répertoire d'instance est un sous-répertoire de ${INSTALL_DIR}/overlays/instances/. Vous pouvez spécifier n'importe quel nom pour vos instances hybrid. Consultez la section Installation multi-instances.
  • ORG_NAME : nom de votre organisation Apigee hybrid. Cette valeur doit être identique à l'ID du projet Google Cloud. Consultez l'Étape 2 : Créer une organisation.

Installation de base d'Apigee hybrid

Pour installer rapidement Apigee hybrid sans personnalisation intensive, vous pouvez utiliser la procédure suivante en deux étapes.


  • Un environnement unique
  • Un seul groupe d'environnements
  • Un seul compte de service Google Cloud est créé et utilisé pour tous les composants individuels.
  • Valeurs par défaut pour toutes les clés de chiffrement et tous les mots de passe.

  1. Télécharger les fichiers de configuration
  2. Exécuter la configuration

Télécharger les fichiers de configuration

Téléchargez et préparez les fichiers de configuration en clonant le dépôt GitHub disponible à l'adresse https://github.com/apigee/apigee-hybrid-install/releases/tag/preview-1 :

  1. Clonez le dépôt :

    git clone https://github.com/apigee/apigee-hybrid-install.git
    
  2. Accédez au répertoire du dépôt cloné :

    cd apigee-hybrid-install
    
  3. Créez une branche à partir du tag preview-1 :

    git branch preview-1 preview-1
    git checkout preview-1
    
  4. Rendez le script d'installation exécutable :

    chmod +x ./tools/apigee-hybrid-setup.sh
    

    Le dépôt cloné présente une structure semblable à celle décrite dans la section Structure des dossiers de configuration d'Apigee hybrid :

Exécuter la configuration

Exécutez le script shell apigee-hybrid-setup.sh situé dans le dossier tools/.

./tools/apigee-hybrid-setup.sh --cluster-name $CLUSTER_NAME --cluster-region $CLUSTER_LOCATION --org $ORG_NAME --setup-all

Si vous rencontrez des erreurs, essayez d'exécuter le script une seconde fois.


Vous pouvez également utiliser les options suivantes :

  • --env $ENV_NAME est le nom de l'environnement Apigee.
  • --envgroup $ENV_GROUP est le groupe d'environnements.
  • --ingress-domain $HOSTNAME est le nom d'hôte que vous avez fourni pour votre groupe d'environnements.
  • --gcp-project-id $PROJECT_ID est l'ID de votre projet Google Cloud.

Pour plus d'options, consultez la section Comprendre le script.

Toutes les erreurs d'exécution sont imprimées dans la sortie standard.

Une fois l'exécution du script terminée, vous avez réalisé l'installation de base d'hybrid. Vous pouvez tester votre installation en créant un exemple de proxy, comme indiqué dans la section Créer et déployer un proxy d'API.

Installation personnalisée d'Apigee hybrid

Pour les utilisateurs plus avancés souhaitant exercer un contrôle précis sur l'installation, vous pouvez suivre les étapes ci-dessous (pour la plupart des étapes indiquées ci-dessous, vous pouvez choisir d'effectuer l'étape manuellement ou d'utiliser le script shell pour l'automatiser) :



Télécharger les fichiers de configuration

Téléchargez et préparez les fichiers de configuration :

  1. Cloner le dépôt GitHub à l'emplacement https://github.com/apigee/apigee-hybrid-install/

    Le dépôt cloné présente une structure semblable à celle décrite dans la section Structure des dossiers de configuration d'Apigee hybrid :

  2. cd dans le répertoire apigee-hybrid-install/

  3. Rendez le script d'installation exécutable :

    chmod +x ./tools/apigee-hybrid-setup.sh
    

Créer un espace de noms

Créez un espace de noms Kubernetes dans votre cluster contenant tous les composants du cluster Apigee.

kubectl create namespace apigee


Si vous choisissez un autre nom pour l'espace de noms, vous pouvez choisir de suivre l'une des trois options ci-dessous :

  • (Option recommandée) Utilisez --namespace={YOUR_NAMESPACE_NAME} lors du pré-remplissage des valeurs de la section Modifier les fichiers YAML des ressources.
  • Exécutez les deux commandes suivantes :

    1. Utilisez le paramètre kpt pour spécifier l'espace de noms Apigee :

      kpt fn eval "${INSTALL_DIR}/overlays/" \
        --image gcr.io/kpt-fn/apply-setters:v0.2.0 -- \
        APIGEE_NAMESPACE="${APIGEE_NAMESPACE}"
      # This is for replacing the namespace in istio discoveryAddress which cannot be
      # achieved with kpt
      
    2. Utilisez sed pour remplacer l'espace de noms dans istio discoveryAddress :

      sed -i -E -e "s/(discoveryAddress: apigee-ingressgateway-manager\.).*(\.svc:15012)/\1${APIGEE_NAMESPACE}\2/" "${INSTALL_DIR}/overlays/controllers/istiod/apigee-istio-mesh-config.yaml"
      
  • Vous pouvez également modifier manuellement les ressources à créer individuellement dans l'espace de noms de votre choix.

Utiliser des images Docker à partir de dépôts privés (facultatif)

Vous pouvez choisir de ne pas utiliser les images hébergées publiquement et pouvez utiliser des images de vos propres dépôts privés :

  1. La première étape consiste à transférer toutes les images vers votre dépôt privé, en suivant les étapes décrites dans apigee-pull-push | Apigee X Par défaut, les images se voient attribuer un tag correspondant à la version Apigee hybrid associée. Il est recommandé de ne pas modifier ces tags. Nous vous conseillons également de ne pas modifier les noms des images afin que le chemin d'accès final de l'image puisse être créé comme expliqué dans la section Hub d'images.
  2. Définissez la valeur du champ imageHub présent dans le fichier apigee-hybrid-config.yaml sur le chemin d'accès à l'hôte du dépôt privé. (Consultez la page Image Hub pour plus de détails.)

    imageHub: "your.private.repo/apigee/hybrid"
    

Vous vous assurez ainsi que tous les composants Apigee hybrid utilisent les images de votre dépôt privé.

En outre, vous pouvez également utiliser une image privée pour le contrôleur et la passerelle d'entrée Apigee, pour lesquels vous devrez modifier les fichiers apigee-controller-deployment.yaml et apigee-ingressgateway-manager-deployment.yaml, et remplacer tous les champs image par l'image de leur dépôt privé.



Configurer imagePullSecrets (facultatif)

  1. Créez un secret Kubernetes contenant les identifiants permettant de s'authentifier auprès des dépôts privés. Consultez la section Extraire une image d'un registre privé pour comprendre comment créer le secret.
  2. Une fois le secret créé, il reste à y faire référence. Pour ce faire, modifiez le fichier apigee-hybrid-config.yaml et définissez la valeur du champ imagePullSecret sur le nom du secret créé précédemment et activez le composant imagePullSecret dans le fichier kustomization.yaml correspondant.

Si vous spécifiez imagePullSecrets aux deux emplacements, celui présent dans le fichier "apigee-controller-manager.yaml" aura la priorité.


Configurer le proxy de transfert (facultatif)

Les proxys de transfert peuvent être configurés en ajoutant le champ forwardProxy au fichier apigee-hybrid-config.yaml. Exemple :

  forwardProxy: |
    scheme: HTTP
    host: 10.12.0.47
    port: 3128

Spécifier des certificats TLS d'entrée

Utiliser le script

./tools/apigee-hybrid-setup.sh --create-ingress-tls-certs

Pour en savoir plus sur cette option, consultez la section Comprendre le script.

Manuel

Vous devez fournir des certificats TLS qui seront utilisés pour la passerelle d'entrée Istio. Vous pouvez :

Prenons l'exemple des certificats autosignés. Vous pouvez générer des certificats autosignés (en supposant que DOMAIN a été correctement défini et doit correspondre au nom d'hôte défini dans votre envgroup) :

openssl req -nodes -new -x509 -keyout ./tls.key -out ./tls.crt -subj '/CN='$DOMAIN'' -days 3650

Cela crée deux fichiers nommés tls.key et tls.crt.

Vous devez ensuite créer un secret au format suivant. Vous pouvez utiliser kubectl create ou kubectl apply, comme expliqué dans la section "Utiliser une paire certificat/clé personnalisée pour l'autorité de signature des certificats" (facultatif) :

apiVersion: v1
kind: Secret
metadata:
  name: "{ORG_NAME}-{ENV_GROUP_NAME}"
  namespace: {$APIGEE_NAMESPACE}
type: Opaque
data:
  cert: |
    {BASE64_ENCODED_TLS_CRT}
  key: |
    {BASE64_ENCODED_TLS_KEY}

---

Exemple de création du secret à l'aide de kubectl create :

kubectl create secret tls {ORG_NAME}-{ENV_GROUP_NAME} \
  --cert="tls.crt" \
  --key="tls.key" \
  -n {$APIGEE_NAMESPACE}


Mettre à jour le déploiement d'entrée

Pour créer/modifier des déploiements d'entrée, vous devez modifier le champ spec.components.ingressGateways dans la ressource personnalisée ApigeeOrganization dans bases/initialization/crds/customresourcedefinition-apigeeorganizations.apigee.cloud.google.com.yaml.

Par défaut, nous créons un déploiement d'entrée avec les paramètres par défaut (les valeurs par défaut seront affichées dans la documentation de référence sur les RS ) :

ingressGateways:
- name: "prod-1"

Exemples :

A. Remplacer les champs du service d'entrée

ingressGateways:
- name: "prod-1"
  serviceSpec:
    annotations:
      {KEY}: ${VALUE}
    loadBalancerIP: ${IP}

B. Modifier le nombre minimal/maximal d'instances répliquées

ingressGateways:
- name: "prod-1"
  ​​autoScaler:
    minReplicas: 4
    maxReplicas: 10

C. Ajouter un déploiement d'entrée

ingressGateways:
- name: "prod-1"
- name: "prod-2"

Configurer des comptes de service Google Cloud personnalisés



Utiliser le script

./tools/apigee-hybrid-setup.sh --create-gcp-sa-and-secrets  --namespace APIGEE_NAMESPACE

APIGEE_NAMESPACE est votre espace de noms personnalisé. L'espace de noms par défaut est apigee.

Pour en savoir plus sur les options, consultez la section Comprendre le script.

Manuel

Les clés de compte de service Google Cloud doivent être stockées en tant que secrets dans le cluster. Le fichier YAML des secrets doit avoir la structure suivante :

apiVersion: v1
kind: Secret
metadata:
  name: "{NAME}"
  namespace: {APIGEE_NAMESPACE}
type: Opaque
data:
  client_secret.json: |
    {BASE64_ENCODED_SA_KEY}

Pour en savoir plus sur les éléments obligatoires pour tous les comptes de service et sur les noms des secrets, consultez la section Comptes de service Google Cloud.

Vous êtes libre de choisir un autre nom pour les secrets, mais vous devrez ensuite modifier en conséquence le composant où ce nom de secret a été utilisé. Par exemple, si vous décidez de remplacer le nom du secret du compte de service d'exécution de apigee-runtime-svc-account-${ORG_NAME}-${ENV_NAME} par my-runtime-svc, vous devez apporter une modification correspondante dans le fichier apigee-environment.yaml pour cet environnement.



Utiliser des identités de charge de travail


L'une des options consistant à configurer des comptes de service Google Cloud personnalisés ou à utiliser des identités de charge de travail est obligatoire.


Prérequis

Avant d'utiliser des identités de charge de travail, assurez-vous que la prise en charge est activée dans votre cluster GKE. Consultez la page Mettre à jour des pools de nœuds | Apigee X pour en savoir plus.

Activer workload-identity

Consultez la section Identités de la charge de travail sous Kustomize et Components pour savoir comment activer les identités de charge de travail avant l'installation.

Modifier les fichiers YAML des ressources

Certains emplacements des fichiers YAML des composants exigent la présence des noms corrects d'organisation, d'environnement et de groupe d'environnements. Vous pouvez définir ces valeurs manuellement ou utiliser le script shell pour les renseigner automatiquement.

Utiliser le script

./tools/apigee-hybrid-setup.sh --fill-values

Créer des ressources et un contrôleur d'initialisation

#Additional steps for openshift
kubectl apply -k ${INSTALL_DIR}/overlays/initialization/openshift
//apigee datastore
kubectl apply -f ${INSTANCE_DIR}/overlays/instances/${INSTANCE_DIR}/datastore/components/openshift-scc/scc.yaml
//telemetry
kubectl apply -f ${INSTANCE_DIR}/overlays/instances/${INSTANCE_DIR}/telemetry/components/openshift-scc/scc.yaml

#Create Apigee initialization kubernetes resources
kubectl apply -f ${INSTALL_DIR}/overlays/initialization/namespace.yaml
kubectl apply -k ${INSTALL_DIR}/overlays/initialization/certificates
kubectl apply --server-side --force-conflicts -k ${INSTALL_DIR}/overlays/initialization/crds
kubectl apply -k ${INSTALL_DIR}/overlays/initialization/webhooks
kubectl apply -k ${INSTALL_DIR}/overlays/initialization/rbac
kubectl apply -k ${INSTALL_DIR}/overlays/initialization/ingress

# Create controller config and controller
kubectl apply -k ${INSTALL_DIR}/overlays/controllers

# Wait for the controllers to be available
kubectl wait deployment/apigee-controller-manager deployment/apigee-ingressgateway-manager -n "${APIGEE_NAMESPACE}" --for=condition=available --timeout=2m

# Create the datastore and redis secrets first and then the rest of the secrets.
kubectl apply -f ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/datastore/secrets.yaml
kubectl apply -f ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/redis/secrets.yaml
kubectl apply -f ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/environments/${ENV_NAME}/secrets.yaml
kubectl apply -f ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/organization/secrets.yaml

Accorder des autorisations au compte de service du synchronisateur pour interagir avec le plan de contrôle

Suivez les étapes décrites dans la section Étape 8 : Activer l'accès au synchronisateur en remplaçant le nom du compte de service, apigee-non-prod ou apigee-synchronizer, par le nom apigee-all-sa du compte de service créé par le nouveau processus d'installation.


★ Important : Veillez à modifier le nom du compte de service dans les instructions sous Activer l'accès au synchronisateur. Sinon, l'activation de l'accès au synchronisateur échouera.


Créer les composants du plan de données Apigee

Si vous avez modifié le nom de l'une des ressources lors des étapes précédentes, vous devrez modifier en conséquence les autres fichiers YAML où cette ressource est référencée. Ensuite, utilisez les commandes de l'exemple suivant :

# Create the rest of the resources.
kubectl apply -k ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}

pour installer tous les composants.

Attendre que les ressources démarrent

kubectl wait "apigeedatastore/default" \
"apigeeredis/default" \
"apigeeenvironment/${ORG_NAME}-${ENV_NAME}" \
"apigeeorganization/${ORG_NAME}" \
"apigeetelemetry/apigee-telemetry" \
-n "${APIGEE_NAMESPACE}" --for="jsonpath=.status.state=running" --timeout=15m

Personnaliser l'installation pour cert-manager dans un espace de noms personnalisé

Personnalisez l'espace de noms dans lequel cert-manager s'exécute en procédant comme suit.

Si cert-manager est installé dans votre cluster dans un espace de noms autre que cert-manager, vous devez mettre à jour l'espace de noms utilisé pour créer le certificat racine Apigee.

  1. Modifiez le fichier customization.yaml pour créer le certificat : $INSTALL_DIR/overlays/initialization/certificates/kustomize.yaml
  2. Ajoutez les lignes suivantes à la fin du fichier :

    - patch: |-
    - op: replace
      path: /metadata/namespace
      value: "gk-cert-manager"
    target:
    group: cert-manager.io
    version: v1
    kind: Certificate
    name: apigee-root-certificate
    
  3. Enregistrez le fichier.

Kustomize et composants

Présentation

La nouvelle installation d'hybrid hérite de l'idéologie Kustomize de structuration des fichiers yaml sous la forme de bases et superpositions.

  • Les bases sont des fichiers fournis par Apigee, qui peuvent varier entre chaque nouvelle version d'hybrid. Vous n'êtes pas censé modifier ces fichiers. Ces fichiers contiennent certaines valeurs par défaut fournies par Apigee. Tous les fichiers situés sous le dossier de premier niveau bases/ contiennent ces bases.
  • Les superpositions contiennent la configuration utilisateur et permettent de modifier les valeurs par défaut spécifiées dans les bases. Tous les fichiers situés sous le dossier de premier niveau overlays/ contiennent ces superpositions.



Utiliser les composants

Les sous-dossiers du répertoire overlays/ de premier niveau ont été structurés de telle sorte que vous puissiez activer (ou désactiver) une fonctionnalité supplémentaire en ajoutant (supprimant) des commentaires à certaines lignes des fichiers kustomization.yaml.

Par exemple, voici à quoi ressemble la structure du dossier overlays/instances/{INSTANCE_NAME}/telemetry :

telemetry
├── components
   ├── http-proxy
   ├── imagepullsecret
   ├── logger
   ├── metrics
   ├── nodeselector
   ├── openshift-scc
   ├── workload-identity-logger
   └── workload-identity-metrics
├── apigee-telemetry.yaml
└── kustomization.yaml

Voici à quoi les fichiers telemetry/kustomization.yaml ressembleraient probablement par défaut :

resources:
- apigee-telemetry.yaml

components:
- ./components/metrics
# - ./components/workload-identity-metrics
# - ./components/logger
# - ./components/workload-identity-logger
# - ./components/http-proxy
# - ./components/nodeselector/
# - ./components/imagepullsecret
# - ./components/openshift-scc

Nous constatons que le ./components/logger a été commenté, ce qui signifie simplement que nous n'avons pas activé la journalisation de Google Cloud par défaut. Pour ce faire, vous pouvez simplement annuler la mise en commentaire de la ligne suivante :

components:

- ./components/logger

De même, pour désactiver les métriques, vous pouvez ajouter un commentaire à la ligne ./components/metrics :

...
components:
...
# - ./components/metrics
…

Les sections suivantes décrivent ces différents composants, quand les utiliser et comment les configurer.

OpenShift

Pour les utilisateurs qui souhaitent installer Apigee hybrid dans un cluster OpenShift, vous devrez peut-être activer quelques composants/ressources avant d'effectuer l'installation. (Champ obligatoire si vous n'utilisez pas le script pour effectuer l'installation.) Les fichiers à modifier sont les suivants :

  • overlays/initialization/openshift/kustomization.yaml . Dans la section resources:, annulez la mise en commentaire :

    # - ../../../bases/initialization/openshift/
    
  • overlays/instances/{INSTANCE_NAME}/datastore/kustomization.yaml Annulez la mise en commentaire :

    # - ./components/openshift-scc
    

    et annulez la mise en commentaire du champ "components:" s'il est toujours commenté.

  • overlays/instances/{INSTANCE_NAME}/telemetry/kustomization.yaml Annulez la mise en commentaire :

    # - ./components/openshift-scc
    

    et annulez la mise en commentaire du champ "components:" s'il est toujours commenté.

Vous pouvez ensuite suivre la procédure d'installation.

imagepullsecret

Ce composant peut être activé lorsque des images sont stockées dans votre dépôt privé. Pour extraire des images d'un dépôt privé, vous pouvez créer un secret Kubernetes contenant vos informations d'authentification, puis y référencer ce secret. Consultez la section Configurer imagePullSecrets (facultatif) pour obtenir des instructions. Consultez les sections Extraire une image d'un registre privé | Kubernetes dans la documentation Kubernetes pour en savoir plus.

Disponible en :

  • overlays/controllers/apigee-controller
  • overlays/controllers/istiod
  • overlays/instances/{INSTANCE_NAME}/datastore
  • overlays/instances/{INSTANCE_NAME}/environments/{ENV_NAME}
  • overlays/instances/{INSTANCE_NAME}/organization
  • overlays/instances/{INSTANCE_NAME}/redis
  • overlays/instances/{INSTANCE_NAME}/telemetry

Activation :

Annulez la mise en commentaire de la ligne "./components/imagepullsecret/" dans les fichiers kustomization.yaml respectifs, partout où cela s'avère nécessaire.

Modifications à effectuer :

  • components/imagepullsecret/patch.yaml
    • OBLIGATOIRE : ajoutez les noms de secrets pertinents à la liste dans spec.template.spec.imagePullSecrets.

Utilisation :

  1. Si vous n'avez pas encore installé Apigee hybrid, vous pouvez continuer la procédure d'installation. Ces modifications seront appliquées lors du processus.
  2. Si vous avez déjà installé Apigee hybrid, vous devrez appliquer ces nouvelles modifications à l'aide de la commande suivante :

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

nodeselector

Ce composant vous permet de planifier des pods pour une ressource Apigee sur des nœuds spécifiques. Pour en savoir plus, consultez Affecter des pods à des nœuds | Kubernetes.

Disponible en :

  • overlays/controllers/apigee-controller
  • overlays/controllers/istiod
  • overlays/instances/{INSTANCE_NAME}/datastore
  • overlays/instances/{INSTANCE_NAME}/environments/{ENV_NAME}
  • overlays/instances/{INSTANCE_NAME}/organization
  • overlays/instances/{INSTANCE_NAME}/redis
  • overlays/instances/{INSTANCE_NAME}/telemetry

Activation :

Annulez la mise en commentaire de la ligne "./components/nodeselector" dans les fichiers kustomization.yaml respectifs, partout où cela s'avère nécessaire.

Modifications à effectuer :

  • components/nodeselector/patch.yaml
    • FACULTATIF : remplacez la valeur apigee-runtime ou apigee-data du libellé du sélecteur de nœud par la valeur souhaitée.

Utilisation :

  1. Si vous n'avez pas encore installé Apigee hybrid, vous pouvez continuer la procédure d'installation. Ces modifications seront appliquées lors du processus.
  2. Si vous avez déjà installé Apigee hybrid, vous devrez appliquer ces nouvelles modifications à l'aide de la commande suivante :

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

workload-identity

Plusieurs conteneurs de l'écosystème Apigee hybrid nécessitent des autorisations pour effectuer certains appels d'API au plan de contrôle/gestion Apigee. Workload Identity consiste à accorder ces autorisations aux pods (et aux conteneurs qu'ils contiennent). Voici des ressources utiles pour en savoir plus : Présentation de Workload Identity : une meilleure authentification pour vos applications GKE | Blog Google Cloud -Utiliser Workload Identity | Documentation Kubernetes Engine | Google Cloud

Disponible en :

  • overlays/instances/{INSTANCE_NAME}/datastore
  • overlays/instances/{INSTANCE_NAME}/environments/{ENV_NAME}
  • overlays/instances/{INSTANCE_NAME}/organization
  • overlays/instances/{INSTANCE_NAME}/redis
  • overlays/instances/{INSTANCE_NAME}/telemetry

Conditions préalables :

Avant de pouvoir utiliser Workload Identity, vous devez accorder les autorisations appropriées dans votre projet Google Cloud à l'aide de la commande suivante :

    gcloud iam service-accounts add-iam-policy-binding \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:${ORG_NAME}.svc.id.goog[${APIGEE_NAMESPACE}/${KSA_NAME}]" \
        ${GSA_NAME}@${ORG_NAME}.iam.gserviceaccount.com

où :  - ${ORG_NAME} est le nom de votre organisation Apigee.  - ${APIGEE_NAMESPACE} est l'espace de noms Kubernetes dans lequel les composants Apigee ont été installés. En général, il s'agit de apigee, sauf indication explicite de l'utilisateur lors de l'installation.  - ${KSA_NAME} est le nom de l'espace de noms Kubernetes. Vous devez exécuter cette commande pour chaque compte de service Kubernetes mentionné dans les comptes de service Kubernetes.  - ${GSA_NAME} est le nom du compte de service Google Cloud. Si vous n'avez apporté aucune modification lors de l'installation, cette valeur est apigee-all-sa. Si vous configurez plusieurs comptes de service Google Cloud pour des composants individuels, vous devez faire correspondre le KSA_NAME avec le GSA_NAME. Vous pouvez comparer les tableaux des comptes de service Google Cloud avec les comptes de service Kubernetes pour trouver les équivalents.

Activation :

Annulez la mise en commentaire de la ligne ./components/workload-identity dans les fichiers kustomization.yaml respectifs, partout où cela s'avère nécessaire. Notez qu'au sein de la télémétrie, il y a des modules complémentaires Workload Identity distincts pour les composants metrics et logger. Ils peuvent être activés individuellement.

Utilisation :

  1. Si vous n'avez pas encore installé Apigee hybrid, vous pouvez simplement activer workload-identity, comme indiqué dans la section précédente, et passer à l'installation qui utilisera automatiquement workload-identity.
  2. Si vous avez déjà installé Apigee hybrid, vous devrez appliquer ces nouvelles modifications à l'aide de la commande suivante :

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

http-proxy

Vous pouvez configurer un serveur proxy dans chacun des composants suivants afin que le trafic de ce composant passe par le proxy HTTP configuré pour ce composant. Vous pouvez configurer le proxy pour chaque composant Apigee individuellement.

Disponible en :

  • overlays/instances/{INSTANCE_NAME}/datastore
  • overlays/instances/{INSTANCE_NAME}/environments/{ENV_NAME}
  • overlays/instances/{INSTANCE_NAME}/organization
  • overlays/instances/{INSTANCE_NAME}/telemetry

Activation :

Annulez la mise en commentaire de la ligne "./components/http-proxy/" dans les fichiers kustomization.yaml respectifs, partout où cela s'avère nécessaire.

Modifications à effectuer :

  • components/http-proxy/patch.yaml Les paramètres suivants peuvent être configurés sous spec.httpForwardProxy
    • scheme : OBLIGATOIRE HTTP ou HTTPS
    • host : OBLIGATOIRE Adresse hôte de votre proxy
    • port : OBLIGATOIRE Numéro de port
    • username : FACULTATIF Nom d'utilisateur associé à votre proxy
    • password : FACULTATIF Mot de passe pour accéder au proxy

Utilisation :

  1. Si vous n'avez pas encore installé Apigee hybrid, vous pouvez continuer la procédure d'installation. Ces modifications seront appliquées lors du processus.
  2. Si vous avez déjà installé Apigee hybrid, vous devrez appliquer ces nouvelles modifications à l'aide de la commande suivante :

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

logger et metrics

Vous pouvez activer ou désactiver individuellement les métriques dans overlays/instances/{INSTANCE_NAME}/telemetry. Par défaut, Logger est désactivé et les métriques activées. Pour les activer ou les désactiver, il suffit de supprimer ou ajouter des commentaires dans les lignes correspondantes dans le fichier telemetry/kustomization.yaml.

gcs-backup et gcs-restore

Ce composant Kustomize peut être utilisé pour effectuer une sauvegarde et une restauration de la base de données Cassandra sur Google Cloud Storage.

Disponible en :

  • overlays/instances/{INSTANCE_NAME}/datastore

Conditions préalables :

  1. Téléchargez les clés des comptes de service Google Cloud pour un compte doté du rôle "Administrateur des objets de l'espace de stockage".

    • Si vous avez utilisé le script pour effectuer l'installation et que vous n'avez pas utilisé workload-identities, vous pouvez réutiliser les clés téléchargées disponibles dans le dossier "service-accounts" créé par le script.
    • Vous pouvez également utiliser le script create-service-account.sh pour créer un compte de service et télécharger ses clés :

      ./tools/create-service-accounts=.sh --env prod --profile apigeecassandra
      
  2. Une fois les clés téléchargées, vous devez créer un secret Kubernetes nommé apigee-cassandra-backup-and-restore-gcp-sa-key à l'aide de la commande suivante :

    kubectl create secret generic "apigee-cassandra-backup-and-restore-gcp-sa-key" \
              --from-file="dbbackup_key.json=${PATH_TO_SA_KEY}" \
              -n "${APIGEE_NAMESPACE}"
    

    Où :

    • ${PATH_TO_SA_KEY} : chemin d'accès au fichier contenant les clés du compte de service.
    • ${APIGEE_NAMESPACE} : espace de noms Kubernetes dans lequel les composants Apigee ont été installés. En règle générale, cette valeur est apigee, sauf si elle a été explicitement modifiée lors de l'installation.

Vous pouvez également utiliser le fichier de modèle templates/secret-apigee-cassandra-backup-and-restore-gcp-sa-key.yaml pour créer ce secret.

Activation :

  • Si vous souhaitez activer la sauvegarde, annulez la mise en commentaire de la ligne "./components/gcs-backup" dans le fichier kustomization.yaml du datastore.
  • Si vous souhaitez restaurer une sauvegarde, annulez la mise en commentaire de la ligne "./components/gcs-restore" dans le fichier kustomization.yaml du datastore.

Modifications pour la sauvegarde uniquement

  • components/gcs-backup/apigee-datastore-patch.yaml
    • OBLIGATOIRE Modifiez la valeur de la variable d'environnement DATABASE_STORAGE_BUCKET, pour qu'elle soit au format gs://BUCKET_NAME, et qu'elle pointe vers le bucket Google Cloud Storage où les données doivent être sauvegardées. La description correspond à dbStorageBucket décrit ici.
  • components/gcs-backup/cron-patch.yaml
    • OBLIGATOIRE : Modifiez "spec.schedule" pour spécifier la fréquence de la sauvegarde. Le champ accepte le format de planification Crontab standard. La description correspond au calendrier décrit ici.
    • OBLIGATOIRE Modifiez la valeur de la variable d'environnement DATABASE_STORAGE_BUCKET, pour qu'elle soit au format gs://BUCKET_NAME, et qu'elle pointe vers le bucket Google Cloud Storage où les données doivent être sauvegardées. La description correspond à dbStorageBucket décrit ici.
    • FACULTATIF : modifiez la valeur de HTTP_PROXY_URL pour qu'elle pointe vers un proxy configuré. Le format peut être le suivant :
      • http://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • https://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS>:${HOST_PORT}

Effectuer une sauvegarde

Vous pouvez effectuer la sauvegarde à l'aide de la commande suivante :

kubectl apply -k overlays/instances/{INSTANCE_NAME}

Pour appliquer les modifications et activer la sauvegarde, procédez comme suit :

Modifications pour la restauration uniquement

  • components/gcs-restore/apigee-datastore-patch.yaml
    • OBLIGATOIRE Modifiez la valeur de la variable d'environnement DATABASE_STORAGE_BUCKET, pour qu'elle soit au format gs://BUCKET_NAME, et qu'elle pointe vers le bucket Google Cloud Storage où les données doivent être sauvegardées. La description correspond à dbStorageBucket décrit ici.
  • components/gcs-restore/job-patch.yaml
    • OBLIGATOIRE Modifiez la valeur de la variable d'environnement DATABASE_STORAGE_BUCKET, pour qu'elle soit au format gs://BUCKET_NAME, et qu'elle pointe vers le bucket Google Cloud Storage où les données doivent être sauvegardées.
    • OBLIGATOIRE Modifiez la valeur de la variable d'environnement BACKUP_SNAPSHOT_TIMESTAMP. La description correspond à restore:snapshotTimestamp décrit ici.
    • FACULTATIF : modifiez la valeur de HTTP_PROXY_URL pour qu'elle pointe vers un proxy configuré. Le format peut être le suivant :
      • http://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • https://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS}:${HOST_PORT}

Exécutez la restauration :

Pour en savoir plus sur la restauration des sauvegardes, consultez la section Restaurer des sauvegardes | Apigee X | Google Cloud

  1. Créez un cluster Kubernetes avec un nouvel espace de noms dans lequel restaurer le déploiement de l'environnement d'exécution hybrid. Vous ne pouvez pas utiliser les mêmes cluster et espace de noms que ceux utilisé pour l'installation hybrid d'origine.
  2. Installez Apigee hybrid dans le nouveau cluster avec les paramètres configurés ci-dessus, en plus des autres paramètres de votre choix :

    • Vous pouvez utiliser l'installation de base et installer hybrid dans le nouvel espace de noms :
    ./tools/apigee-hybrid-setup.sh \
    --cluster-name $CLUSTER_NAME \
    --cluster-region $CLUSTER_LOCATION \
    --namespace ${NEW_APIGEE_NAMESPACE}
    
  3. Une fois la restauration terminée, toutes les ressources de l'ancien espace de noms peuvent être supprimées et basculées vers le nouvel espace de noms.

Pour en savoir plus, consultez la section Restaurer des sauvegardes.

non-gcs-backup et non-gcs-restore

Ce composant Kustomize peut être utilisé pour effectuer une sauvegarde et une restauration de la base de données Cassandra sur Google Cloud Storage.

Disponible en :

  • overlays/instances/{INSTANCE_NAME}/datastore

Conditions préalables :

  1. Vous pouvez utiliser les étapes de la documentation existante sur la configuration du serveur et de SSH.
  2. À partir des étapes ci-dessus, vous devez utiliser la clé privée SSH disponible dans le fichier "ssh_key" généré en suivant les étapes précédentes. Nous allons ensuite créer un secret Kubernetes nommé "apigee-cassandra-backup-and-restore-gcp-sa-key" contenant cette clé SSH privée.



    Vous pouvez créer le secret Kubernetes à l'aide de la commande suivante :

    kubectl create secret generic "apigee-cassandra-backup-and-restore-key-file" \
            --from-file="key=${PATH_TO_SSH_PRIVATE_KEY}" \
            -n "${APIGEE_NAMESPACE}"
    

    Où :

    • ${PATH_TO_SSH_PRIVATE_KEY} : chemin d'accès au fichier contenant la clé privée SSH
    • ${APIGEE_NAMESPACE} : espace de noms Kubernetes dans lequel les composants Apigee ont été installés. En règle générale, cette valeur est apigee, sauf si elle a été explicitement modifiée lors de l'installation.

    Vous pouvez également utiliser le fichier de modèle templates/secret-apigee-cassandra-backup-and-restore-key-file.yaml pour créer ce secret.

Activation :

  • Si vous souhaitez activer la sauvegarde, annulez la mise en commentaire de la ligne "./components/non-gcs-backup" dans le fichier kustomization.yaml du datastore.
  • Si vous souhaitez restaurer une sauvegarde, annulez la mise en commentaire de la ligne "./components/non-gcs-restore" dans le fichier kustomization.yaml du datastore.

Modifications pour la sauvegarde uniquement

  • components/non-gcs-backup/apigee-datastore-patch.yaml
    • OBLIGATOIRE Modifiez la valeur de BACKUP_SERVER_IP. La description correspond à BACKUP_SERVER_IP décrit ici.
    • OBLIGATOIRE Modifiez la valeur de BACKUP_STORAGE_DIR. La description correspond à BACKUP_STORAGE_DIR décrit ici.
  • components/non-gcs-backup/cron-patch.yaml
    • OBLIGATOIRE : Modifiez "spec.schedule" pour spécifier la fréquence de la sauvegarde. Le champ accepte le format de planification Crontab standard. La description correspond au calendrier décrit ici.
    • OBLIGATOIRE Modifiez la valeur de BACKUP_SERVER_IP. La description correspond à BACKUP_SERVER_IP décrit ici.
    • OBLIGATOIRE Modifiez la valeur de BACKUP_STORAGE_DIR. La description correspond à BACKUP_STORAGE_DIR décrit ici.
    • FACULTATIF : modifiez la valeur de HTTP_PROXY_URL pour qu'elle pointe vers un proxy configuré. Le format peut être le suivant :
      • http://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • https://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS}:${HOST_PORT}

Effectuer une sauvegarde

Vous pouvez effectuer la sauvegarde à l'aide de la commande suivante :

kubectl apply -k overlays/instances/{INSTANCE_NAME}

Pour appliquer les modifications et activer la sauvegarde, procédez comme suit :

Modifications pour la sauvegarde uniquement

  • components/non-gcs-restore/apigee-datastore-patch.yaml
    • OBLIGATOIRE Modifiez la valeur de BACKUP_SERVER_IP. La description correspond à BACKUP_SERVER_IP décrit ici.
    • OBLIGATOIRE Modifiez la valeur de BACKUP_STORAGE_DIR. La description correspond à BACKUP_STORAGE_DIR décrit ici.
  • components/non-gcs-restore/job-patch.yaml
    • OBLIGATOIRE Modifiez la valeur de la variable d'environnement BACKUP_SNAPSHOT_TIMESTAMP. La description correspond à restore:snapshotTimestamp décrit ici.
    • OBLIGATOIRE Modifiez la valeur de BACKUP_SERVER_IP. La description correspond à BACKUP_SERVER_IP décrit ici.
    • OBLIGATOIRE Modifiez la valeur de BACKUP_STORAGE_DIR. La description correspond à BACKUP_STORAGE_DIR décrit ici.
    • FACULTATIF : remplacez la valeur de HTTP_PROXY_URL par un proxy configuré. Le format peut être le suivant :
      • http://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • https://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS}:${HOST_PORT}

Exécutez la restauration :

Pour en savoir plus sur la restauration de sauvegardes, consultez la page Présentation de la restauration Cassandra.

  1. Créez un cluster Kubernetes avec un nouvel espace de noms dans lequel restaurer le déploiement de l'environnement d'exécution hybrid. Vous ne pouvez pas utiliser les mêmes cluster et espace de noms que ceux utilisé pour l'installation hybrid d'origine.
  2. Installez Apigee hybrid dans le nouveau cluster avec les paramètres configurés ci-dessus en plus des autres paramètres de votre choix. Vous pouvez utiliser l'installation de base et installer un environnement hybride dans le nouvel espace de noms :

    ./tools/apigee-hybrid-setup.sh \
      --cluster-name $CLUSTER_NAME \
      --cluster-region $CLUSTER_LOCATION \
      --namespace ${NEW_APIGEE_NAMESPACE}
    

    Vous pouvez également suivre l'installation Apigee hybrid personnalisée pour configurer les éléments selon votre choix.

  3. Une fois la restauration terminée, toutes les ressources de l'ancien espace de noms peuvent être supprimées et basculées vers le nouvel espace de noms.

    Pour en savoir plus, consultez la section Planifier des sauvegardes sur un serveur distant.

http-client

Pour obtenir des instructions, consultez l'article Activer les clients HTTP | Apigee

Disponible en :

  • overlays/instances/${INSTANCE_NAME}/route-config/${ENV_GROUP}

Activation :

Annulez la mise en commentaire de la ligne "./components/http-client" dans le fichier route-config/${ENV_GROUP}/kustomization.yaml correspondant

Modifications à effectuer :

  • Aucune modification obligatoire n'est requise.

Utilisation :

  1. Si vous n'avez pas encore installé Apigee hybrid, vous pouvez continuer la procédure d'installation. Ces modifications seront appliquées lors du processus.
  2. Si vous avez déjà installé Apigee hybrid, vous devrez appliquer ces nouvelles modifications à l'aide de la commande suivante :

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

non-sni-client

Équivalent de Comment configurer un client non SNI | Apigee déjà existant

Disponible en :

  • overlays/instances/${INSTANCE_NAME}/route-config/${ENV_GROUP}

Activation :

Annulez la mise en commentaire de la ligne "./components/non-sni-client" dans le fichier route-config/${ENV_GROUP}/kustomization.yaml correspondant

Modifications à effectuer :

  • components/non-sni-client/apigee-route.yaml
    • OBLIGATOIRE La description de credentialName correspond à celle de credential_name décrite ici.

Utilisation :

  1. Si vous n'avez pas encore installé Apigee hybrid, vous pouvez continuer la procédure d'installation. Ces modifications seront appliquées lors du processus.
  2. Si vous avez déjà installé Apigee hybrid, vous devrez appliquer ces nouvelles modifications à l'aide de la commande suivante :

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

http-and-non-sni-client

Pour obtenir des instructions, consultez la section Activer la compatibilité avec les clients non SNI et HTTP | Apigee :

Activation :

Annulez la mise en commentaire de la ligne "./components/http-and-non-sni-client" dans le fichier route-config/${ENV_GROUP}/kustomization.yaml correspondant

Modifications à effectuer :

  • components/http-and-non-sni-client/apigee-route.yaml
    • OBLIGATOIRE La description de credentialName correspond à celle de credential_name décrite ici.

Utilisation :

  1. Si vous n'avez pas encore installé Apigee hybrid, vous pouvez continuer la procédure d'installation. Ces modifications seront appliquées lors du processus.
  2. Si vous avez déjà installé Apigee hybrid, vous devrez appliquer ces nouvelles modifications à l'aide de la commande suivante :

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

multirégional

Ce composant peut être utilisé lors de la configuration d'un déploiement Cassandra multirégional. Pour en savoir plus, consultez Déploiement multirégional sur GKE et GKE On-Prem.

Activation :

Annulez la mise en commentaire de la ligne "./components/multi-region" dans le fichier datastore/kustomization.yaml

Modifications à effectuer :

  • components/multi-region/cassandra-data-replication.yaml

    • OBLIGATOIRE source.region Nom du centre de données Cassandra source à partir duquel les données seront répliquées. Vous pouvez l'identifier à l'aide de la commande suivante dans le cluster source :
    kubectl get apigeedatastore -n ${APIGEE_NAMESPACE} -o=jsonpath='{.items[*].spec.components.cassandra.properties.datacenter}'
    
  • components/multi-region/patch.yaml

    • OBLIGATOIRE spec.components.properties.multiRegionSeedHost IP de l'un des pods Cassandra source. Nous pouvons utiliser :
    kubectl get pods -n ${APIGEE_NAMESPACE} -o wide
    
    • Pour répertorier tous les pods et obtenir l'adresse IP de n'importe quel pod Cassandra, utilisez la commande suivante :
    kubectl get pods -o wide -n apigee
    

    Le résultat doit se présenter sous la forme suivante :

    NAME                      READY   STATUS      RESTARTS   AGE   IP          NODE                                          NOMINATED NODE
    apigee-cassandra-default-0        1/1     Running     0          5d    10.0.0.11   gke-k8s-dc-2-default-pool-a2206492-p55d
    apigee-cassandra-default-1        1/1     Running     0          5d    10.0.2.4    gke-k8s-dc-2-default-pool-e9daaab3-tjmz
    apigee-cassandra-default-2        1/1     Running     0          5d    10.0.3.5    gke-k8s-dc-2-default-pool-e589awq3-kjch
    

Pour plus d'informations, consultez la section Conditions préalables à l'utilisation de GKE dans la section "Déploiement multirégional sur GKE, GKE On-Prem et AKS" :

Utilisation :

L'utilisation de ce composant est surtout pertinente lorsque vous configurez Apigee hybrid dans un nouveau cluster et que vous avez déjà une autre configuration de fonctionnement pour Apigee hybrid.

  1. Le cluster nouveau et le cluster existant doivent utiliser les mêmes certificats TLS pour garantir une communication appropriée entre les pods Cassandra. Nous devons donc copier le secret apigee-root-certificate du cluster existant et l'utiliser également dans le cluster le plus récent :
  2. Exécutez la commande suivante :

    kubectl config get-contexts
    
    • Pour obtenir la liste de tous les contextes Kubernetes, exécutez la commande suivante :
    kubectl config use-context SOURCE_CLUSTER_CONTEXT
    

    SOURCE_CLUSTER_CONTEXT est le nom du cluster Kubernetes source.

  3. Stockez le secret du certificat racine dans un fichier :

    kubectl get secret/apigee-root-certificate -n cert-manager -o yaml > apigee-root-certificate.yaml
    
  4. Basculez le contexte du cluster vers le nouveau cluster sur lequel vous installez Apigee hybrid.

    kubectl config use-context ${NEW_CLUSTER_CONTEXT}
    
  5. Créez le secret racine dans le nouveau cluster :

    kubectl -n cert-manager apply -f apigee-root-certificate.yaml
    
  6. Désactive la création d'un certificat racine. Cela nous permet de ne pas créer de apigee-root-certificate et de ne pas écraser celui que nous avons créé à l'étape précédente.

  7. Annulez la mise en commentaire des lignes suivantes dans le fichier overlays/initialization/certificates/kustomization.yaml :

    # components:
    # - ./components/disable-apigee-root-certificate-generation
    
  8. Poursuivez l'installation d'Apigee hybrid à l'aide de l'installation de base d'Apigee hybrid ou de l'installation personnalisée d'Apigee hybrid. Par exemple, en suivant l'installation Apigee hybrid de base, vous pouvez exécuter la commande suivante :

    ./tools/apigee-hybrid-setup.sh --cluster-name $CLUSTER_NAME --cluster-region $CLUSTER_LOCATION
    
  9. Vérifiez l'état de la recompilation à l'aide de la commande suivante.



    kubectl -n ${APIGEE_NAMESPACE} get apigeeds -o json | jq ".items[].status.cassandraDataReplication"
    
  10. Vérifiez les processus de recompilation des journaux. Vérifiez également la taille des données à l'aide de la commande "nodetool status" :

    kubectl logs apigee-cassandra-default-0 -f -n ${APIGEE_NAMESPACE}
    kubectl exec apigee-cassandra-default-0 -n ${APIGEE_NAMESPACE}  -- nodetool -u ${JMX_USER} -pw ${JMX_PASSWORD} status
    
  11. Vérifiez l'état de la recompilation à l'aide de la commande suivante.



    kubectl -n apigee get apigeeds -o json | jq ".items[].status.cassandraDataReplication"
    

    Les résultats doivent ressembler à ceci :

    {
    "rebuildDetails": {
    "apigee-cassandra-default-0": {
      "state": "complete",
      "updated": 1623105760
    },
    "apigee-cassandra-default-1": {
      "state": "complete",
      "updated": 1623105765
    },
    "apigee-cassandra-default-2": {
      "state": "complete",
      "updated": 1623105770
    }
    },
    "state": "complete",
    "updated": 1623105770
    }
    

    Voir également : Déploiement multirégional.

  12. Supprimez les lignes suivantes de components/multi-region/patch.yaml :

      properties:
        multiRegionSeedHost: {IP_ADDRESS} # To be modified. REQUIRED
    
  13. Appliquez les modifications :

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

Concepts

Hub d'image

Les images de conteneur Docker sont généralement spécifiées au format suivant :

${REGISTRY_HOST_PATH}/${IMAGE_NAME}:${IMAGE_TAG}

ou celles qui utilisent un condensé se présentent comme suit :

${REGISTRY_HOST_PATH}/${IMAGE_NAME}@${DIGEST}

Apigee utilise le concept "Hub image", qui, dans les formats ci-dessus, fait référence au ${REGISTRY_HOST_PATH}. La valeur par défaut du hub d'image est gcr.io/apigee-release/hybrid/.

(Les images utilisant le condensé DIGEST doivent être définies individuellement dans chaque sous-composant.)

Apigee crée le chemin d'accès final de l'image en combinant la valeur suivante :

  • "Image Hub" pouvant être remplacé dans apigee-hybrid-config.yaml (consultez la section Utiliser les images Docker à partir de dépôts privés pour obtenir des instructions détaillées sur la manière de remplacer la valeur Image Hub).
  • La valeur de IMAGE_TAG est obtenue à partir du champ version, qui figure dans le fichier yaml pour chacun des composants individuels (par exemple, apigee-organization.yaml. Apigee assigne des tags aux images avec la version Apigee hybrid : IMAGE_TAG est la version 1.8 pour Apigee hybride version 1.8.
  • IMAGE_NAME est déterminé implicitement à partir du nom du conteneur dans lequel l'image sera utilisée. Par exemple, pour le conteneur apigee-runtime, IMAGE_NAME sera apigee-runtime.

Ainsi, un exemple complet de chemin d'accès d'image serait gcr.io/apigee-release/hybrid/apigee-runtime:1.8.0.

De cette manière, le chemin d'accès de l'image finale est construit. Il sera ensuite utilisé dans chacun des conteneurs de leurs pods respectifs.

Comptes de service Google Cloud

Les comptes de service Google Cloud sont des comptes utilisés par les applications pour effectuer des appels autorisés aux API Google. Il est possible de télécharger les clés de compte de service Google Cloud, qui peuvent ensuite être utilisées à des fins d'authentification. Apigee s'attend à ce que l'utilisateur fournisse des clés de compte de service en créant des secrets. Voici les noms des composants et le nom par défaut du secret dans lequel il recherche les clés de compte de service :

Composant Sous-composant Nom de secret Kubernetes par défaut contenant la clé du compte de service
organisation
connectAgent apigee-connect-agent-gcp-sa-key-${ORG_NAME}
watcher apigee-watcher-gcp-sa-key-${ORG_NAME}
mart apigee-mart-gcp-sa-key-${ORG_NAME}
udca apigee-udca-gcp-sa-key-${ORG_NAME}
ingressGateways N/A
environment
runtime apigee-runtime-gcp-sa-key-${ORG_NAME}-${ENV_NAME}
udca apigee-udca-gcp-sa-key-${ORG_NAME}-${ENV_NAME}
Synchronisateur apigee-synchronizer-gcp-sa-key-${ORG_NAME}-${ENV_NAME}
telemetry
métrique apigee-metrics-gcp-sa-key
containerLogs apigee-logger-gcp-sa-key

Comptes de service Kubernetes

Les comptes de service Kubernetes fournissent des identités aux pods de votre cluster. Par défaut, le contrôleur Apigee les crée pour vous. Toutefois, si vous souhaitez ignorer la création (par exemple, lorsque vous utilisez les identités de charge de travail), vous pouvez spécifier le champ podServiceAccountName dans les différents sous-composants.

Liste des composants et de leurs sous-composants respectifs où le compte de service Kubernetes peut être spécifié avec le nom par défaut du compte de service k8s lorsque vous activez le correctif Workload Identity pour ces composants.

Composant Sous-composant Nom par défaut (disponible lorsque vous avez activé le correctif Workload Identity)
organisation
connectAgent apigee-connect-agent-svc-account-${ORG_NAME}
watcher apigee-watcher-svc-account-${ORG_NAME}
mart apigee-mart-svc-account-${ORG_NAME}
udca apigee-udca-svc-account-${ORG_NAME}
environment
Synchronisateur apigee-synchronizer-svc-account-${ORG_NAME}-${ENV_NAME}
udca apigee-udca-svc-account-${ORG_NAME}-${ENV_NAME}
runtime apigee-runtime-svc-account-${ORG_NAME}-${ENV_NAME}
datastore
cassandra apigee-datastore-svc-account
telemetry
metricsApp apigee-metricsApp-svc-account
metricsProxy apigee-metricsProxy-svc-account
metricsAdapter apigee-metricsAdapter-svc-account
containerLogs apigee-container-logs-svc-account

Identités des charges de travail

Les identités de charge de travail permettent aux pods (qui utilisent des comptes de service Kubernetes) exécutés dans GKE de s'authentifier directement auprès des API Google Cloud sans avoir besoin de clés de compte de service Google Cloud.

Ajouter un nouvel environnement

.
├── ...
├── instances/instance1/components
│   ├── ...
│   ├── environments
│   │   ├── dev
│   │   │   └── apigee-environment.yaml
│   │   │   └── secrets.yaml
│   │   └── new-env-name (new)
│   │       └── apigee-environment.yaml (new)
│   │       └── secrets.yaml (new)
└── ...

Il est facile d'ajouter un nouvel environnement :

  1. Création d'un dossier dans le répertoire des environnements (ou à l'emplacement correspondant à votre propre structure de dossiers)
  2. Copie du fichier apigee-environment.yaml de n'importe quel environnement existant dans le nouveau dossier.
  3. Si vous souhaitez créer un compte de service et des clés de chiffrement pour le nouvel environnement, copiez l'élément secrets.yaml dans le nouveau dossier et renommez les secrets de manière appropriée pour les distinguer des autres environnements existants (généralement en ajoutant le nom du environnement en tant que suffixe).
  4. Réalisation des modifications appropriées de apigee-environment.yaml, par exemple :
    • Changement du nom de l'environnement.
    • Si des comptes de service et des clés de chiffrement doivent être créés, ils doivent être correctement référencés dans le fichier YAML.
  5. Application des fichiers yaml :
kubectl apply -f components/environments/new-env-name/secrets.yaml
kubectl apply -f components/environments/new-env-name/apigee-environment.yaml

Utiliser la suppression forcée dans Apigee Datastore

Si la suppression du datastore ne progresse pas pour une raison quelconque, il est désormais possible de forcer la suppression d'un datastore Apigee à l'aide des commandes suivantes, quel que soit l'état actuel du cluster.





  1. Supprimez l'objet apigeeds dans l'espace de noms apigee :

    Kubectl delete -n apigee apigeeds default
    

    Si cette étape se bloque, vous pouvez l'arrêter en appuyant sur CTRL+C.

  2. Modifiez un nouveau apigeeds :

    Kubectl edit -n apigee apigeeds default
    
  3. Ajout/mise à jour d'un champ forceDelete dans la spécification de datastore apigee

    spec:
    forceDelete: true
    
  4. Enregistrez et fermez le fichier.

Attendez maintenant que le datastore soit supprimé. La suppression de toutes les ressources Cassandra peut prendre quelques minutes.

Comprendre le script

Le script apigee-hybrid-setup.sh effectue certaines validations de base et vous aide à automatiser les étapes que vous devriez sinon effectuer vous-même si vous souhaitez une personnalisation plus détaillée, comme documenté dans la section Installation personnalisée d'Apigee hybrid. Même avec l'installation personnalisée, vous pouvez toujours utiliser partiellement le script pour effectuer certaines tâches.

Vous pouvez exécuter ./tools/apigee-hybrid-setup.sh --help pour afficher la liste des options compatibles et obtenir une aide supplémentaire concernant le script. Les options suivantes sont acceptées pour le moment :

  • --namespace Par défaut, le script installe tous les composants dans l'espace de noms apigee. Vous pouvez modifier ce comportement en spécifiant le nom de l'espace de noms à l'aide de cette option.
  • --org : permet de fournir le nom de l'organisation Apigee. Si ce champ n'est pas spécifié, la valeur par défaut est définie sur le projet Google Cloud actuellement sélectionné dans gcloud.
  • --envgroup : Permet de fournir le nom du groupe d'environnements au sein de votre organisation. Si cette option n'est pas spécifiée, une tentative est effectuée pour interroger les API du plan de contrôle pour déterminer le nom du groupe d'environnements. Si plusieurs groupes d'environnement sont détectés, une erreur est renvoyée et le script se ferme.
  • --env : Permet de fournir le nom de l'environnement au sein de votre organisation. Si ce n'est pas le cas, une tentative est effectuée pour interroger les API du plan de contrôle afin de déterminer le nom de l'environnement. Si plusieurs environnements sont détectés ou si l'environnement ne fait pas partie du groupe d'environnements, une erreur est renvoyée et le script se ferme.
  • --cluster-name Nom du cluster Kubernetes.
  • --cluster-region Région dans laquelle se trouve le cluster Kubernetes.
  • --gcp-project-id : ID du projet Google Cloud dans lequel se trouve le cluster Kubernetes.
  • --ingress-domain Nom d'hôte/nom de domaine qui sera utilisé pour générer les certificats TLS autosignés pour la passerelle d'entrée Istio. Si aucune valeur n'est spécifiée, une tentative est effectuée pour déterminer la valeur en interrogeant les API du plan de contrôle afin d'obtenir la valeur de l'envgroup. Si des problèmes sont survenus lors de la détermination de l'environnement ou si plusieurs noms d'hôte ont été configurés pour l'environnement, une erreur est renvoyée et le script se ferme.
  • --generate-internal-tls-certs Cette opération génère un secret Kubernetes nommé apigee-ca et contenant un certificat et une paire de clés générés par nous.
  • --create-ingress-tls-certs Cette opération génère un secret nommé {ORG_NAME}-{ENV_GROUP_NAME} (dérivé de l'organisation et du nom du groupe d'environnements) dans l'espace de noms istio-system qui contiendra un certificat et une paire de clés qui seront utilisés pour la communication TLS. Le nom de domaine utilisé pour générer ces certificats est dérivé de la valeur trouvée dans la configuration du groupe d'environnements. En cas de conflit (par exemple, lorsque plusieurs domaines sont détectés), des messages d'erreur appropriés s'affichent.
  • --create-gcp-sa-and-secrets : Crée un compte de service Google Cloud unique dans le projet Google Cloud, télécharge les clés, puis crée les secrets Kubernetes contenant la clé. Vous trouverez les noms des secrets dans Comptes de service Google Cloud.
  • --fill-values Remplace les valeurs de l'organisation, de l'environnement, du groupe d'environnements et des autres noms partout où elles sont requises dans les différents fichiers yaml.
  • --apply-configuration Les émetteurs de certificats, les définitions de ressources personnalisées, les webhooks, les rôles et la ressource de contrôleur seront créés. Les ressources seront créées dans le bon ordre, et la commande sera bloquée jusqu'à ce que toutes soient saines.
  • -- rename-directories Renomme l'environnement et le groupe d'environnements en utilisant les noms de l'environnement et du groupe d'environnement corrects.
  • --verbose Affiche une sortie détaillée pour le débogage.
  • --help Affiche des informations d'utilisation.
  • --setup-all Cette action exécutera toutes les tâches pouvant être effectuées par ce script.

Structure du dossier de configuration d'Apigee hybrid

Le dossier apigee-hybrid-setup présente par défaut la structure hiérarchique suivante :

.
├── bases
   ├── controllers
      ├── apigee-controller
         ├── apigee-controller-deployment.yaml
         └── kustomization.yaml
      └── apigee-ingressgateway-manager
          ├── apigee-ingressgateway-manager-deployment.yaml
          └── kustomization.yaml
   ├── datastore
      └── backup-and-restore
          ├── backup
             ├── cronjob.yaml
             └── kustomization.yaml
          ├── common
             ├── kustomization.yaml
             ├── rbac.yaml
             └── tls-certificate.yaml
          └── restore
              ├── job.yaml
              └── kustomization.yaml
   └── initialization
       ├── certificates
          ├── certificates-and-issuers.yaml
          └── kustomization.yaml
       ├── crds
          ├── customresourcedefinition-apigeedatastores.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeedeployments.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeeenvironments.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeeorganizations.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeeredis.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeerouteconfigs.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeeroutes.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeetelemetries.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-cassandradatareplications.apigee.cloud.google.com.yaml
          └── kustomization.yaml
       ├── openshift
          ├── kustomization.yaml
          └── scc.yaml
       ├── rbac
          ├── apigee-controller
             ├── kustomization.yaml
             └── rbac.yaml
          └── apigee-embedded-ingress-controller
              ├── cluster-role-bindings.yaml
              ├── cluster-roles.yaml
              ├── kustomization.yaml
              └── service-account.yaml
       └── webhooks
           ├── kustomization.yaml
           ├── mutatingwebhookconfiguration.yaml
           └── validatingwebhookconfiguration.yaml
├── CONTRIBUTING.md
├── docs
   └── api_references
       ├── v1alpha1.md
       └── v1alpha2.md
├── kokoro
   ├── build.sh
   ├── common.cfg
   ├── continuous.cfg
   ├── presubmit.cfg
   └── release.cfg
├── LICENSE
├── overlays
   ├── controllers
      ├── apigee-controller
         ├── apigee-hybrid-config.yaml
         ├── components
            ├── imagepullsecret
               ├── kustomization.yaml
               └── patch.yaml
            └── nodeselector
                ├── kustomization.yaml
                └── patch.yaml
         └── kustomization.yaml
      ├── apigee-ingressgateway-manager
         ├── apigee-ingressgateway-manager-deployment-patch.yaml
         ├── apigee-istio-mesh-config.yaml
         ├── components
            ├── imagepullsecret
               ├── kustomization.yaml
               └── patch.yaml
            └── nodeselector
                ├── kustomization.yaml
                └── patch.yaml
         └── kustomization.yaml
      └── kustomization.yaml
   ├── initialization
      ├── certificates
         ├── apigee-ingressgateway-manager-certificate-patch.yaml
         ├── apigee-serving-cert-patch.yaml
         ├── components
            └── disable-apigee-root-certificate-generation
                └── kustomization.yaml
         └── kustomization.yaml
      ├── crds
         └── kustomization.yaml
      ├── ingress
         ├── envoyfilter-1.11.yaml
         └── kustomization.yaml
      ├── namespace.yaml
      ├── openshift
         ├── kustomization.yaml
         └── scc.yaml
      ├── rbac
         ├── apigee-controller
            └── kustomization.yaml
         ├── apigee-ingressgateway-manager
            └── kustomization.yaml
         └── kustomization.yaml
      └── webhooks
          ├── kustomization.yaml
          ├── mutatingwebhookconfiguration.yaml
          └── validatingwebhookconfiguration.yaml
   └── instances
       └── instance1
           ├── datastore
              ├── apigee-datastore.yaml
              ├── components
                 ├── gcs-backup
                    ├── apigee-datastore-patch.yaml
                    ├── cron-patch.yaml
                    ├── kustomization.yaml
                    └── tls-certificate-patch.yaml
                 ├── gcs-restore
                    ├── apigee-datastore-patch.yaml
                    ├── job-patch.yaml
                    ├── kustomization.yaml
                    └── tls-certificate-patch.yaml
                 ├── http-proxy
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── imagepullsecret
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── multi-region
                    ├── cassandra-data-replication.yaml
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── nodeselector
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── non-gcs-backup
                    ├── apigee-datastore-patch.yaml
                    ├── cron-patch.yaml
                    ├── kustomization.yaml
                    └── tls-certificate-patch.yaml
                 ├── non-gcs-restore
                    ├── apigee-datastore-patch.yaml
                    ├── job-patch.yaml
                    ├── kustomization.yaml
                    └── tls-certificate-patch.yaml
                 ├── openshift-scc
                    ├── kustomization.yaml
                    └── scc.yaml
                 └── workload-identity
                     ├── kustomization.yaml
                     ├── patch.yaml
                     └── service-accounts.yaml
              ├── kustomization.yaml
              └── secrets.yaml
           ├── environments
              ├── kustomization.yaml
              └── test
                  ├── apigee-environment.yaml
                  ├── components
                     ├── http-proxy
                        ├── kustomization.yaml
                        └── patch.yaml
                     ├── imagepullsecret
                        ├── kustomization.yaml
                        └── patch.yaml
                     ├── nodeselector
                        ├── kustomization.yaml
                        └── patch.yaml
                     └── workload-identity
                         ├── kustomization.yaml
                         ├── patch.yaml
                         └── service-accounts.yaml
                  ├── kustomization.yaml
                  └── secrets.yaml
           ├── kustomization.yaml
           ├── organization
              ├── apigee-organization.yaml
              ├── components
                 ├── http-proxy
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── imagepullsecret
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── nodeselector
                    ├── kustomization.yaml
                    └── patch.yaml
                 └── workload-identity
                     ├── kustomization.yaml
                     ├── patch.yaml
                     └── service-accounts.yaml
              ├── kustomization.yaml
              └── secrets.yaml
           ├── redis
              ├── apigee-redis.yaml
              ├── components
                 ├── imagepullsecret
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── nodeselector
                    ├── kustomization.yaml
                    └── patch.yaml
                 └── workload-identity
                     ├── kustomization.yaml
                     ├── patch.yaml
                     └── service-accounts.yaml
              ├── kustomization.yaml
              └── secrets.yaml
           ├── route-config
              ├── kustomization.yaml
              └── test-envgroup
                  ├── apigee-route-config.yaml
                  ├── components
                     ├── http-and-non-sni-client
                        ├── apigee-route.yaml
                        └── kustomization.yaml
                     ├── http-client
                        ├── apigee-route.yaml
                        └── kustomization.yaml
                     └── non-sni-client
                         ├── apigee-route.yaml
                         └── kustomization.yaml
                  └── kustomization.yaml
           └── telemetry
               ├── apigee-telemetry.yaml
               ├── components
                  ├── http-proxy
                     ├── kustomization.yaml
                     └── patch.yaml
                  ├── imagepullsecret
                     ├── kustomization.yaml
                     └── patch.yaml
                  ├── logger
                     ├── kustomization.yaml
                     └── patch.yaml
                  ├── metrics
                     ├── kustomization.yaml
                     └── patch.yaml
                  ├── nodeselector
                     ├── kustomization.yaml
                     └── patch.yaml
                  ├── openshift-scc
                     ├── kustomization.yaml
                     └── scc.yaml
                  ├── workload-identity-logger
                     ├── kustomization.yaml
                     ├── patch.yaml
                     └── service-accounts.yaml
                  └── workload-identity-metrics
                      ├── kustomization.yaml
                      ├── patch.yaml
                      └── service-accounts.yaml
               └── kustomization.yaml
├── README.md
├── templates
   ├── certificate-org-envgroup.yaml
   ├── secret-apigee-cassandra-backup-and-restore-gcp-sa-key.yaml
   ├── secret-apigee-cassandra-backup-and-restore-key-file.yaml
   ├── secret-gcp-sa-key.yaml
   └── secret-ingress-tls-cert-key.yaml
└── tools
    ├── apigee-hybrid-setup.sh
    ├── apigee-pull-push.sh
    ├── common.sh
    ├── create-service-account.sh
    └── dump_kubernetes.sh

Une version des fichiers ci-dessus est disponible dans le tag preview-1 du dépôt GitHub à l'adresse suivante : https://github.com/apigee/apigee-hybrid-install/releases/tag/preview-1.

Le dossier ci-dessus contient des fichiers manifestes Kubernetes pour l'environnement d'exécution Apigee hybrid et utilise Kustomize pour la gestion de la configuration. Les fichiers manifestes sont organisés en fonction du concept de bases et superpositions Kustomize. Le dossier de base contient la configuration minimale requise pour chaque composant Apigee. Le dossier de superposition contient plusieurs fonctionnalités supplémentaires (configurations) définies en tant que composants. Un composant peut être activé en annulant la mise en commentaire de sa référence dans le fichier kustomization.yaml.

Exemple : Pour activer le gcs-backup pour le datastore apigee, le composant gcs-backup a vu sa mise en commentaire annulé dans le fichier customization.yaml ci-dessous.

Chemin d'accès : ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/datastore/kustomization.yaml

namespace: "apigee" # kpt-set: ${APIGEE_NAMESPACE}

resources:
- apigee-datastore.yaml

components:
# - ./components/http-proxy
# - ./components/nodeselector/
# - ./components/imagepullsecret
# - ./components/workload-identity
# - ./components/openshift-scc
- ./components/gcs-backup (uncommented)
# - ./components/gcs-restore
# - ./components/non-gcs-backup
# - ./components/non-gcs-restore

Toute valeur nécessitant des personnalisations doit être définie dans le fichier patch.yaml correspondant pour gcs-backup. Dans le fichier ci-dessous, la valeur de CLOUD_STORAGE_BUCKET_PATH doit être définie par l'utilisateur.

Chemin d'accès : $INSTALL_DIR/overlays/instances/$INSTANCE_DIR/datastore/components/gcs-backup/cron-patch.yaml

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: apigee-cassandra-backup
  namespace: apigee
spec:
  schedule: "${YOUR_BACKUP_SCHEDULE_CODE}" # To be modified
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: apigee-cassandra-backup
            env:
            - name: APIGEE_CLOUDPROVIDER
              value: "GCP"
            - name: DATABASE_STORAGE_BUCKET
              value: "${CLOUD_STORAGE_BUCKET_PATH}" # To be modified. REQUIRED
            volumeMounts:
            - name: apigee-cassandra-backup
              mountPath: /var/secrets/google
          volumes:
          - name: apigee-cassandra-backup
            secret:
              secretName: "apigee-cassandra-backup-and-restore-svc-account"

De même, toute fonctionnalité/configuration nécessitant des personnalisations peut être activée en annulant la mise en commentaire du composant dans le fichier kustomization.yaml du composant Apigee. De plus, comme requis, les valeurs correspondantes des champs du fichier patch.yaml du composant doivent être définies en conséquence.

Brève explication des dossiers et des fichiers :

bases

Ce dossier contient les modèles avec une configuration minimale minimale requise par chacun des composants Apigee. Il ne serait pas nécessaire de modifier les fichiers manifestes de ce dossier.

overlays

Ce dossier contient les modèles de composants Kustomize pour les configurations supplémentaires

initialization

namespaces.yaml

Espace de noms dans lequel les composants du plan de données Apigee seront installés. Le nom de l'espace de noms par défaut est apigee.

certificats

Contient les ressources Issuer et Certificate utilisées pour émettre des certificats aux webhooks. Contient également le Issuer utilisé pour émettre des certificats à différents pods pour la communication TLS.

rbac

Contient les Role, ClusterRole, RoleBinding et ClusterRoleBinding qui seront utilisés par divers composants.

crds
    Contains the definition of all the CRDs which are used by Apigee.
webhooks

Contient ValidatingWebhookConfiguration et MutatingWebhookConfiguration qui seront utilisés pour effectuer des validations sur les ressources personnalisées.

ingress

Contient une configuration applicable à tous les Pods d'entrée. Par exemple, Modification d'en-tête courante, vérification de l'état, etc.

openshift

Contient la définition openshift SecurityContextConstraints.

Contrôleurs

apigee-controller
apigee-hybrid-config.yaml

Contient un ConfigMap qui est fourni en tant qu'entrée dans apigee-controller-manager.yaml. Ce fichier ConfigMap contient des configurations telles que imageHub, imagePullSecrets et forwardProxy.

apigee-controller-deployment.yaml

Contient deux services pour le contrôleur et le webhook, ainsi que le déploiement pour le contrôleur. Si vous souhaitez utiliser une image privée pour le contrôleur, c'est ici que vous devez effectuer la modification.

istiod

Apigee-istio-mesh-config.yaml Contient la configuration de maillage pour Istio utilisée par Apigee. Cela ne s'applique pas aux autres installations d'ASM/Istio dans le cluster.

apigee-ingressgateway-manager-deployment-patch.yaml

Contient un service et un déploiement d'Istiod. Il s'agit d'un Istiod privé utilisé uniquement pour les cas d'utilisation d'Apigee.

instances/{instanceName}

datastore
apigee-datastore.yaml

Contient la ressource personnalisée ApigeeDatastore qui gère Cassandra.

secrets.yaml

Contient les identifiants par défaut du datastore.

redis
apigee-redis.yaml

Contient la ressource personnalisée ApigeeRedis qui gère Redis.

secrets.yaml

Contient les identifiants par défaut du datastore.

organisation
apigee-organization.yaml

Contient la ressource personnalisée ApigeeOrganization qui gère d'autres sous-composants tels que connectAgent, watcherAndSynchronizer, MART,UDCA et Ingress.

secrets.yaml

Contient les Secret référencés dans le fichier apigee-organization.yaml. Certains secrets sont mis en commentaire au fur et à mesure qu'ils sont générés par le script. Si vous désactivez leur génération, vous devrez les créer manuellement.

environments

Inclut tous les environnements de votre organisation. Nous vous recommandons de créer un dossier distinct pour chaque environnement en copiant celui qui vous est déjà fourni et en le configurant conformément aux besoins.

dev
apigee-environment.yaml

Contient la ressource personnalisée ApigeeEnvironment qui gère d'autres sous-composants tels que l'environnement d'exécution.

secrets.yaml

Contient les Secret référencés dans le fichier apigee-environment.yaml. Certains secrets sont mis en commentaire au fur et à mesure qu'ils sont générés par le script. Si vous désactivez leur génération, vous devrez les créer manuellement.

telemetry
apigee-telemetry.yaml

Contient la ressource personnalisée ApigeeTelemetry.

secrets.yaml

Contient les Secret référencés dans le fichier apigee-telemetry.yaml. Certains secrets sont mis en commentaire au fur et à mesure qu'ils sont générés par le script. Si vous désactivez leur génération, vous devrez les créer manuellement.

route-config
dev-envgroup
apigee-route-config.yaml

Contient la ressource personnalisée ApigeeRouteConfig.

secrets.yaml

Contient un Secret référencé dans le fichier apigee-route-config.yaml. Elle est mise en commentaire car elle est générée automatiquement par le script apigee-hybrid-setup.sh et est conservée ici pour fournir un exemple de ce à quoi doit ressembler le secret si vous décidez de le créer manuellement.

diagnostic

diagnostic-collector.yaml

Ressources utilisées pour le déploiement de diagnostic

outils

apigee-hybrid-setup.sh
apigee-create-service-account.sh
dump-kubernetes.sh
apigee-pull-push.sh

Stocker les clés de compte de service dans des vaults externes

Vault (créé par Hashicorp) est un système de gestion de secrets populaire qui inclut plusieurs intégrations de magasins de secrets fournis par Google, Azure, AWS et d'autres fournisseurs. Hashicorp Vault vous permet de récupérer des secrets à partir d'une source externe, puis de les utiliser dans des ressources Kubernetes. Il existe plusieurs façons d'utiliser Vault pour créer des secrets sources. Les étapes suivantes servent d'exemple de base pour utiliser le fournisseur CSI Vault afin d'installer des clés de compte de service Google Cloud stockées dans un moteur de secrets fourni par Vault.



  1. Nous utilisons Helm pour installer les ressources associées à Vault dans votre cluster. Suivez les étapes indiquées dans la section Installer Helm pour savoir comment configurer Helm dans votre système.
  2. Suivez la procédure décrite dans la section graphique d'installation de Helm Vault, à savoir :

    1. Ajouter le dépôt Hashicorp à Helm

      helm repo add hashicorp https://helm.releases.hashicorp.com
      
    2. Mettre à jour les dépôts Helm

      helm repo update
      
    3. Installer Vault

      helm install vault hashicorp/vault \
      --set "server.dev.enabled=true" \
      --set "injector.enabled=false" \
      --set "csi.enabled=true"
      
  3. Nous allons maintenant stocker le secret dans Vault.

    1. Obtenir une interface système dans le pod de développement Vault

      kubectl exec -it vault-0 -- /bin/sh
       ```
      
    2. Dans cet exemple, nous allons utiliser le moteur de secrets clé/valeur pour stocker les données.

      vault kv put secret/runtime-gcp-sa-key key="${BASE_64_ENCODED_KEY}"
      
    3. Pour vérifier que la clé a bien été stockée, utilisez :

      vault kv get secret/runtime-gcp-sa-key
      
  4. Configurez l'authentification pour permettre au pod d'exécution d'extraire la clé. Comme indiqué dans la section Comptes de service Kubernetes, les comptes de service Kubernetes fournissent une identité aux pods et leur permettent de s'authentifier auprès d'autres systèmes.

    1. Obtenir une interface système dans le pod de développement Vault

      kubectl exec -it vault-0 -- /bin/sh
      
    2. Activer la méthode d'authentification Kubernetes

      vault auth enable kubernetes
      
    3. Écrire la configuration d'authentification

      vault write auth/kubernetes/config \
      issuer="https://kubernetes.default.svc.cluster.local" \
      token_reviewer_jwt="$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" \
      kubernetes_host="https://$KUBERNETES_PORT_443_TCP_ADDR:443" \
      kubernetes_ca_cert=@/var/run/secrets/kubernetes.io/serviceaccount/ca.crt \
      disable_iss_validation=true
      
    4. Créer la règle d'authentification

      vault policy write apigee-runtime-app - <<EOF
      path "secret/data/runtime-gcp-sa-key" {
      capabilities = ["read"]
      }
      EOF
      
    5. Lier la stratégie au compte de service

      vault write auth/kubernetes/role/apigee-runtime-role \
      bound_service_account_names=apigee-runtime-sa \
      bound_service_account_namespaces=${APIGEE_NAMESPACE} \
      policies=apigee-runtime-app \
      ttl=20m
      

    Ici, nous supposons que le compte de service se trouve dans l'espace de noms apigee. Si vous disposez d'un autre espace de noms pour installer Apigee, vous utiliserez ce nom.

    1. Quitter l'interface système dans vault-0 ?

      exit
      
  5. Installer le pilote CSI du magasin de secrets

    # Add repo to helm
    helm repo add secrets-store-csi-driver https://raw.githubusercontent.com/kubernetes-sigs/secrets-store-csi-driver/master/charts
    # Install driver in cluster
    helm install csi secrets-store-csi-driver/secrets-store-csi-driver
    
  6. Créer une ressource Kubernetes SecretProviderClass qui référence le secret que vous avez créé dans Vault

    cat > spc-vault.yaml <<EOF
    apiVersion: secrets-store.csi.x-k8s.io/v1alpha1
    kind: SecretProviderClass
    metadata:
    name: vault-apigee-runtime-gcp-sa-key
    spec:
    provider: vault
    parameters:
      vaultAddress: "http://vault.default:8200"
      roleName: "apigee-runtime-role"
      objects: |
        - objectName: "client_secret.json"
          secretPath: "secret/data/runtime-gcp-sa-key"
          secretKey: "key"
    EOF
    
  7. Appliquer la fonctionyaml

    kubectl apply -f spc-vault.yaml
    
  8. Créez le compte de service Kubernetes auquel nous avons attribué les autorisations à l'étape 4.e.

    kubectl create serviceaccount -n ${APIGEE_NAMESPACE} apigee-runtime-sa
    
  9. Modifiez le fichier apigee-environment.yaml pour l'environnement et ajoutez les lignes suivantes :

    apiVersion: apigee.cloud.google.com/v1alpha2
    kind: ApigeeEnvironment
    # existing content
    spec:
    name: {ENV_NAME}
    organizationRef: {ORG_NAME}
    components:
     runtime:
    # existing content
       pod
       containers:
       - name: apigee-runtime
         podServiceAccountName: apigee-runtime-sa
    # existing content
         volumeMounts:
         - name: secrets-store-inline
           mountPath: "/opt/apigee/sa"
           readOnly: true
       volumes:
       - name: secrets-store-inline
         csi:
           driver: secrets-store.csi.k8s.io
           readOnly: true
           volumeAttributes:
             secretProviderClass: "vault-apigee-runtime-gcp-sa-key"
    
  10. Appliquez les modifications :

    kubectl apply -k ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/environments/$ENV_NAME
    

Mise à niveau d'Apigee hybrid



Vous devez satisfaire toutes les exigences mentionnées dans la section Prérequis. En outre, il est recommandé d'effectuer un redémarrage progressif de tous les composants pour vérifier que le cluster est opérationnel. L'ordre de redémarrage est Cassandra, Redis, ApigeeOrganization et ApigeeEnvironment.

Créer une sauvegarde

  1. Créez une copie de sauvegarde de la configuration actuelle d'hybrid. La sauvegarde sera nécessaire si vous êtes amené à effectuer un rollback de la mise à niveau vers la version actuelle.

    tar -czvf apigee-hybrid-install.v-X.Y.Z.tar.gz $HYBRID_INSTALL_BASE_DIR
    
  2. Créez une sauvegarde de la base de données Cassandra. Les sauvegardes Cassandra constituent une mesure importante de protection contre les scénarios de catastrophe.

Mettre à niveau votre plate-forme Kubernetes si nécessaire

Cette étape n'est pas obligatoire à chaque fois, mais vous devrez mettre à niveau votre plate-forme Kubernetes telle que Kubernetes, OpenShift et les composants tels que cert-manager, cassandra, etc., si la version n'est plus compatible avec une version plus récente d'Apigee hybrid. La documentation contient les versions compatibles des plates-formes et des composants.

Télécharger les fichiers de configuration

Téléchargez le dépôt et remplacez les dossiers bases et tools de la configuration Apigee hybrid existante par un dossier plus récent :

  1. Clonez le tag preview-1 du dépôt GitHub à l'adresse https://github.com/apigee/apigee-hybrid-install/releases/tag/preview-1.

    Le dépôt cloné présente une structure semblable à celle décrite dans la section Structure des dossiers de configuration d'Apigee hybrid :

  2. Remplacez le dossier d'initialisation, des outils et du contrôleur dans la configuration Apigee hybrid existante.

    export HYBRID_INSTALL_HOME=PATH_TO_PREVIOUS_HYBRID_INSTALL_DIRECTORY
    mv -f bases $HYBRID_INSTALL_HOME/bases
    mv -f tools $HYBRID_INSTALL_HOME/tools
    

Mettre à jour les autorisations de compte de service si nécessaire

Cette étape n'est pas non plus nécessaire à chaque fois. Vous devez toutefois créer un nouveau compte de service ou mettre à jour les autorisations des comptes de service existants si nécessaire. Le guide de mise à niveau fournit des informations sur les comptes de service à modifier ou à créer, ainsi que sur les rôles à ajouter.

  • Si vous devez modifier les autorisations des comptes de service existants, utilisez la commande gcloud appropriée. Le guide de mise à niveau contiendra les commandes et les rôles détaillés à ajouter.

    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member="serviceAccount:apigee-component@$PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/$NEW_ROLE"
    
  • Si la version la plus récente d'Apigee hybrid peut nécessiter un compte de service supplémentaire pour les composants nouveaux / existants, vous devez les créer. Vous pouvez utiliser le script apigee-create-service-account.sh fourni dans le dossier de l'outil pour créer les nouveaux comptes de service. Comme le script sera déjà mis à jour dans le cadre de l'étape 4, il contiendra les détails et le nouveau profil requis pour la création du nouveau compte de service.

    Le nom du compte de service que vous venez de créer doit être référencé dans la ressource personnalisée du composant correspondant.

    ./tools/create-service-account --env prod --profile apigee-component
    

Mettre à niveau le contrôleur

Remplacez les champs de version des composants listés dans ${INSTALL_DIR}/overlays/instances/$INSTANCE_DIR/kustomization.yaml par la version hybride appropriée.

Voici un exemple de fichier $INSTALL_DIR/overlays/instances/$INSTANCE_DIR/kustomization.yaml. La valeur du champ de version doit être mise à jour vers la version appropriée.

resources:
- datastore/
- environments/
- organization/
- redis/
- route-config/
- telemetry/

patches:
- target:
    group: apigee.cloud.google.com
    version: v1alpha1
    kind: ApigeeDatastore
  patch: |-
    - op: add
      path: /spec/version
      value: 1-6-1 (Modify the version)
- target:
    group: apigee.cloud.google.com
    version: v1alpha2
    kind: ApigeeEnvironment
  patch: |-
    - op: add
      path: /spec/version
      value: 1-6-1 (Modify the version)

Suivez les mêmes étapes que celles fournies dans la section Créer des ressources et un contrôleur d'initialisation dans le workflow d'installation d'Apigee hybrid. Vous pouvez utiliser un script ou suivre les étapes manuelles fournies pour mettre à niveau les ressources et le contrôleur d'initialisation.

Mettre à jour les composants Kubernetes d'Apigee

Vous devrez apporter les modifications suivantes :  - En cas de modification de l'architecture, d'introduction de nouveaux champs ou d'abandon d'anciens champs, vous devrez modifier les ressources personnalisées avec les modifications appropriées, conformément aux instructions du guide de mise à niveau.  - Au minimum, vous devrez mettre à jour les champs de version dans les ressources personnalisées (qui indiqueront la version d'Apigee hybrid installée) vers la version la plus récente d'Apigee hybrid.

Appliquez les modifications aux ressources personnalisées Apigee. Pour les environnements non production, vous pouvez appliquer simultanément toutes les modifications aux composants Apigee.

kubectl apply -f ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}

Effectuer un rollback d'Apigee hybrid

  1. Restaurer apigee-hybrid-setup

    Accédez au répertoire contenant la version précédente de la configuration Apigee hybrid. Si cette version n'est pas disponible, restaurez-la à partir du fichier ZIP créé à l'étape 1 [lien] lors de la mise à niveau d'Apigee hybrid.

  2. Effectuer un rollback des composants Kubernetes

    Appliquez les modifications aux RS Apigee.

    kubectl apply -k ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}
    
  3. Rollback du contrôleur

    Suivez les mêmes étapes que celles fournies dans la section Créer des ressources et un contrôleur d'initialisation dans le workflow d'installation d'Apigee hybrid. Vous pouvez utiliser un script ou suivre les étapes manuelles fournies pour effectuer le rollback des ressources et du contrôleur d'initialisation.

  4. Nettoyage

    Vous devrez nettoyer toutes les nouvelles ressources supplémentaires créées lors de la mise à niveau, comme les nouveaux composants ou les comptes de service introduits dans la nouvelle version d'hybrid. Toutes les ressources à nettoyer et les étapes à suivre pour le faire seront fournies dans le guide de mise à niveau.

Supprimer un environnement



Voici les étapes à suivre pour supprimer toutes les ressources associées à un environnement de votre cluster Kubernetes :

  1. Obtenez le nom de la RS de l'environnement. Pour ce faire, récupérez tous les environnements :

    kubectl get env -n ${APIGEE_NAMESPACE}
    

    Stockez le nom de la ressource dans la variable d'environnement APIGEE_ENV.

  2. Supprimez les clés de chiffrement de l'environnement. Par exemple, si vous n'avez pas modifié le nom des clés de chiffrement, vous pouvez les supprimer en utilisant :

    kubectl delete secret -n ${APIGEE_NAMESPACE} $APIGEE_ENV-encryption-keys
    
  3. Supprimez les codes secrets du compte de service Google Cloud :

    kubectl delete secret -n ${APIGEE_NAMESPACE} $(kubectl get env $APIGEE_ENV -n ${APIGEE_NAMESPACE} -o=jsonpath='{.spec.components.*.appServiceAccountSecretName}')
    
  4. Supprimez les comptes de service Kubernetes :

    kubectl delete secret -n ${APIGEE_NAMESPACE} $(kubectl get env $APIGEE_ENV -n ${APIGEE_NAMESPACE} -o=jsonpath='{.spec.components.*.podServiceAccountName}')
    
  5. Supprimez la ressource personnalisée de l'environnement Apigee :

    kubectl -n ${APIGEE_NAMESPACE} delete env $APIGEE_ENV
    

Supprimer une configuration hybride



Voici les étapes à suivre pour supprimer de votre cluster Kubernetes toutes les ressources liées à Apigee hybrid :

  1. Vous devez supprimer les tâches de configuration d'utilisateur et de schéma Apigee.

    # To list all jobs in ${APIGEE_NAMESPACE}
    kubectl -n ${APIGEE_NAMESPACE} get jobs
    # To delete all jobs in ${APIGEE_NAMESPACE}
    kubectl -n ${APIGEE_NAMESPACE} delete jobs $(kubectl -n ${APIGEE_NAMESPACE} get jobs -o custom-columns=':.metadata.name')
    
  2. Vous devez supprimer les composants Apigee hybrid déployés dans le plan de données. Exécutez la commande suivante pour supprimer tous les composants :

    kubectl delete -k ${INSTALL_DIR}/overlays/instances/$INSTANCE_NAME
    
  3. Cette étape n'est requise que si vous n'avez pas utilisé le nom par défaut pour les secrets de compte de service Kubernetes, les secrets de compte de service Google Cloud, etc. Si vous avez utilisé les noms par défaut, ils seront supprimés à l'étape suivante. Sinon, vous devrez les supprimer manuellement avec les commandes suivantes :

    kubectl delete secret -n ${APIGEE_NAMESPACE} $(kubectl get ${APIGEE_COMPONENT} ${APIGEE_COMPONENT_NAME} -n ${APIGEE_NAMESPACE} -o=jsonpath='{.spec.components.*.appServiceAccountSecretName}')
    kubectl delete secret -n ${APIGEE_NAMESPACE} $(kubectl get ${APIGEE_COMPONENT} ${APIGEE_COMPONENT_NAME} -n ${APIGEE_NAMESPACE} -o=jsonpath='{.spec.components.*.podServiceAccountName}')
    
  4. Avec openshift, vous devez supprimer les contraintes SCC (Security Context Constraints) créées lors de l'installation d'Apigee hybrid.

    kubectl delete scc ${SECURITY_CONTEXT_CONSTRAINTS_NAME}
    
  5. Exécutez la commande ci-dessous pour supprimer les rôles, liaisons de rôles, CRD, déploiements de contrôleurs, etc.

    kubectl delete -k ${INSTALL_DIR}/overlays/initialization/ingress
    kubectl delete -k ${INSTALL_DIR}/overlays/initialization/rbac
    kubectl delete -k ${INSTALL_DIR}/overlays/initialization/webhooks
    kubectl delete -k ${INSTALL_DIR}/overlays/initialization/crds
    kubectl delete -k ${INSTALL_DIR}/overlays/initialization/certificates
    
  6. Exécutez la commande ci-dessous pour supprimer l'espace de noms Apigee.

    kubectl delete -f ${INSTALL_DIR}/overlays/initialization/namespace.yaml
    

    Vous pouvez également utiliser la commande suivante :

    kubectl delete $APIGEE_NAMESPACE
    

Installation multi-instances

La configuration multi-instances fait référence à la configuration hybride qui peut s'étendre sur plusieurs régions ou dans les mêmes régions. Apigee recommande d'organiser les configurations de la deuxième instance dans une structure de répertoires distincte, car les configurations de l'environnement (instances répliquées, etc.) sont invariablement différentes entre les instances. Les configurations de chaque instance sont découplées et organisées indépendamment dans leurs structures de dossiers respectives.

Par exemple, pour une configuration active/passive dans un scénario multirégional, vous pouvez configurer une deuxième région de secours dans un modèle tiède, avec des configurations et des dimensionnements différents.

Dans la structure de dossiers ci-dessous, vous pouvez créer une copie du répertoire instance1 appelée instance2 et modifier les configurations du datastore et d'entrée si nécessaire.

Structure du dossier apigee-hybrid-setup pour la configuration multi-instance.

.
├── bases
   ├── controllers
      ├── apigee-controller
         ├── apigee-controller-deployment.yaml
         └── kustomization.yaml
      └── istiod
          ├── apigee-ingressgateway-manager-deployment.yaml
          └── kustomization.yaml
   └── initialization
       ├── certificates
          ├── certificates-and-issuers.yaml
          └── kustomization.yaml
       ├── crds
          ├── customresourcedefinition-apigeedatastores.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeedeployments.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeeenvironments.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeeorganizations.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeeredis.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeerouteconfigs.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeeroutes.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeetelemetries.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-cassandradatareplications.apigee.cloud.google.com.yaml
          └── kustomization.yaml
       ├── ingress
          ├── envoyfilter-1.11.yaml
          └── kustomization.yaml
       ├── openshift
          ├── kustomization.yaml
          └── scc.yaml
       ├── rbac
          ├── apigee-controller
             ├── kustomization.yaml
             └── rbac.yaml
          └── apigee-embedded-ingress-controller
              ├── cluster-role-bindings.yaml
              ├── cluster-roles.yaml
              ├── kustomization.yaml
              └── service-account.yaml
       └── webhooks
           ├── kustomization.yaml
           ├── mutatingwebhookconfiguration.yaml
           └── validatingwebhookconfiguration.yaml
├── instances
   └── instance1 (Add the 2nd instance under instances directory similar to instance1)
       ├── datastore
          ├── apigee-datastore.yaml
          ├── components
             ├── http-proxy
                ├── kustomization.yaml
                └── patch.yaml
             ├── imagepullsecret
                ├── kustomization.yaml
                └── patch.yaml
             ├── nodeselector
                ├── kustomization.yaml
                └── patch.yaml
             └── workload-identity
                 ├── apigee-workload-identities.yaml
                 ├── kustomization.yaml
                 └── patch.yaml
          ├── kustomization.yaml
          └── secrets.yaml
       ├── environments
          ├── kustomization.yaml
          └── test
              ├── apigee-environment.yaml
              ├── components
                 ├── http-proxy
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── imagepullsecret
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── nodeselector
                    ├── kustomization.yaml
                    └── patch.yaml
                 └── workload-identity
                     ├── apigee-workload-identities.yaml
                     ├── kustomization.yaml
                     └── patch.yaml
              ├── kustomization.yaml
              └── secrets.yaml
       ├── kustomization.yaml
       ├── organization
          ├── apigee-organization.yaml
          ├── components
             ├── http-proxy
                ├── kustomization.yaml
                └── patch.yaml
             ├── imagepullsecret
                ├── kustomization.yaml
                └── patch.yaml
             ├── nodeselector
                ├── kustomization.yaml
                └── patch.yaml
             └── workload-identity
                 ├── apigee-workload-identities.yaml
                 ├── kustomization.yaml
                 └── patch.yaml
          ├── kustomization.yaml
          └── secrets.yaml
       ├── redis
          ├── apigee-redis.yaml
          ├── components
             ├── imagepullsecret
                ├── kustomization.yaml
                └── patch.yaml
             ├── nodeselector
                ├── kustomization.yaml
                └── patch.yaml
             └── workload-identity
                 ├── apigee-workload-identities.yaml
                 ├── kustomization.yaml
                 └── patch.yaml
          ├── kustomization.yaml
          └── secrets.yaml
       ├── route-config
          ├── kustomization.yaml
          └── test-env-group
              ├── apigee-route-config.yaml
              ├── components
                 ├── http-and-non-sni-client
                    ├── apigee-route.yaml
                    └── kustomization.yaml
                 ├── http-client
                    ├── apigee-route.yaml
                    └── kustomization.yaml
                 └── non-sni-client
                     ├── apigee-route.yaml
                     └── kustomization.yaml
              └── kustomization.yaml
       └── telemetry
           ├── apigee-telemetry.yaml
           ├── components
              ├── http-proxy
                 ├── kustomization.yaml
                 └── patch.yaml
              ├── imagepullsecret
                 ├── kustomization.yaml
                 └── patch.yaml
              ├── logger
                 ├── kustomization.yaml
                 └── patch.yaml
              ├── metrics
                 ├── kustomization.yaml
                 └── patch.yaml
              ├── nodeselector
                 ├── kustomization.yaml
                 └── patch.yaml
              ├── workload-identity-logger
                 ├── apigee-workload-identities.yaml
                 ├── kustomization.yaml
                 └── patch.yaml
              └── workload-identity-metrics
                  ├── apigee-workload-identities.yaml
                  ├── kustomization.yaml
                  └── patch.yaml
           └── kustomization.yaml
├── overlays
   ├── controllers
      ├── apigee-controller
         ├── apigee-hybrid-config.yaml
         ├── components
            ├── imagepullsecret
               ├── kustomization.yaml
               └── patch.yaml
            └── nodeselector
                ├── kustomization.yaml
                └── patch.yaml
         └── kustomization.yaml
      ├── istiod
         ├── apigee-ingressgateway-manager-deployment-patch.yaml
         ├── apigee-istio-mesh-config.yaml
         ├── components
            ├── imagepullsecret
               ├── kustomization.yaml
               └── patch.yaml
            └── nodeselector
                ├── kustomization.yaml
                └── patch.yaml
         └── kustomization.yaml
      └── kustomization.yaml
   ├── initialization
      ├── certificates
         ├── apigee-ingressgateway-manager-certificate.yaml
         └── kustomization.yaml
      ├── crds
         └── kustomization.yaml
      ├── ingress
         └── kustomization.yaml
      ├── namespace.yaml
      ├── openshift
         ├── kustomization.yaml
         └── scc.yaml
      ├── rbac
         ├── apigee-controller
            └── kustomization.yaml
         ├── apigee-embedded-ingress-controller
            └── kustomization.yaml
         └── kustomization.yaml
      └── webhooks
          ├── kustomization.yaml
          ├── mutatingwebhookconfiguration.yaml
          └── validatingwebhookconfiguration.yaml
   └── instances
       └── instance1
           ├── datastore
              ├── apigee-datastore.yaml
              ├── components
                 ├── http-proxy
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── imagepullsecret
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── nodeselector
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── openshift-scc
                    ├── kustomization.yaml
                    └── scc.yaml
                 └── workload-identity
                     ├── apigee-workload-identities.yaml
                     ├── kustomization.yaml
                     └── patch.yaml
              ├── kustomization.yaml
              └── secrets.yaml
           ├── environments
              ├── kustomization.yaml
              └── test
                  ├── apigee-environment.yaml
                  ├── components
                     ├── http-proxy
                        ├── kustomization.yaml
                        └── patch.yaml
                     ├── imagepullsecret
                        ├── kustomization.yaml
                        └── patch.yaml
                     ├── nodeselector
                        ├── kustomization.yaml
                        └── patch.yaml
                     └── workload-identity
                         ├── apigee-workload-identities.yaml
                         ├── kustomization.yaml
                         └── patch.yaml
                  ├── kustomization.yaml
                  └── secrets.yaml
           ├── kustomization.yaml
           ├── organization
              ├── apigee-organization.yaml
              ├── components
                 ├── http-proxy
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── imagepullsecret
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── nodeselector
                    ├── kustomization.yaml
                    └── patch.yaml
                 └── workload-identity
                     ├── apigee-workload-identities.yaml
                     ├── kustomization.yaml
                     └── patch.yaml
              ├── kustomization.yaml
              └── secrets.yaml
           ├── redis
              ├── apigee-redis.yaml
              ├── components
                 ├── imagepullsecret
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── nodeselector
                    ├── kustomization.yaml
                    └── patch.yaml
                 └── workload-identity
                     ├── apigee-workload-identities.yaml
                     ├── kustomization.yaml
                     └── patch.yaml
              ├── kustomization.yaml
              └── secrets.yaml
           ├── route-config
              ├── kustomization.yaml
              └── test-envgroup
                  ├── apigee-route-config.yaml
                  ├── components
                     ├── http-and-non-sni-client
                        ├── apigee-route.yaml
                        └── kustomization.yaml
                     ├── http-client
                        ├── apigee-route.yaml
                        └── kustomization.yaml
                     └── non-sni-client
                         ├── apigee-route.yaml
                         └── kustomization.yaml
                  └── kustomization.yaml
           └── telemetry
               ├── apigee-telemetry.yaml
               ├── components
                  ├── http-proxy
                     ├── kustomization.yaml
                     └── patch.yaml
                  ├── imagepullsecret
                     ├── kustomization.yaml
                     └── patch.yaml
                  ├── logger
                     ├── kustomization.yaml
                     └── patch.yaml
                  ├── metrics
                     ├── kustomization.yaml
                     └── patch.yaml
                  ├── nodeselector
                     ├── kustomization.yaml
                     └── patch.yaml
                  ├── openshift-scc
                     ├── kustomization.yaml
                     └── scc.yaml
                  ├── workload-identity-logger
                     ├── apigee-workload-identities.yaml
                     └── kustomization.yaml
                  └── workload-identity-metrics
                      ├── apigee-workload-identities.yaml
                      ├── kustomization.yaml
                      └── patch.yaml
               └── kustomization.yaml
├── README.md
├── templates
   ├── ingress-certificate.yaml
   ├── ingress-cert-secret.yaml
   └── service-account-key-secret.yaml
└── tools
    ├── apigee-hybrid-setup.sh
    ├── common.sh
    ├── create-service-account.sh
    └── dump_kubernetes.sh

Configuration multi-instances sur GKE

Prérequis

Avant de configurer plusieurs instances d'hybrid, vous devez remplir les conditions préalables suivantes :

  • Configurer des clusters Kubernetes dans plusieurs régions (identiques ou différentes) avec des blocs CIDR différents
  • Configurez la communication interrégionale
  • Ouvrez les ports Cassandra 7 000 et 7 001 entre les clusters Kubernetes dans toutes les régions (le port 7 000 peut être utilisé comme option de sauvegarde lors du dépannage). Consultez également la section Configurer les ports.

Vous pouvez utiliser un outil tel que ntpdate pour vérifier que les heures du serveur sont synchronisées.


Configurer l'hôte source multirégional

  1. Créez une copie du dossier $INSTANCE_NAME à partir de votre instance existante, puis ajoutez-le dans le dossier des instances.
  2. Modifiez la valeur du champ "namespace" si elle diffère de l'espace de noms instance1.
  3. Suivez les étapes spécifiées dans Spécifier des certificats TLS d'entrée pour modifier la configuration d'entrée de l'autre instance.
  4. Consultez la section Gérer la passerelle d'entrée Apigee pour en savoir plus sur la configuration de l'adresse IP de l'équilibreur de charge pour l'autre instance.



  5. Définissez le contexte kubectl sur le cluster d'origine avant de récupérer le nom source.

    kubectl config use-context original-cluster-name
    
  6. Exécutez la commande kubectl suivante pour identifier une adresse d'hôte source pour Cassandra dans la région actuelle.

    kubectl get pods -o wide -n apigee -l app=apigee-cassandra
    
  7. Toutes les adresses IP de pod renvoyées par la commande précédente peuvent être considérées comme les hôtes sources multirégionaux.

  8. Dans la deuxième instance, configurez la valeur de multiRegionSeedHost dans le RS de datastore apigee sous ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/datastore/apigee-datastore.yaml

Configurer la nouvelle instance

  1. Définir le contexte du cluster de configuration

    kubectl config use-context existing-cluster-name
    
  2. Exporter le secret apigee-ca vers un fichier

    kubectl -n cert-manager get secret apigee-root-certificate -o yaml > apigee-root-certificate.yaml
    
  3. Définissez le contexte sur le nom du cluster de la nouvelle région :

    kubectl config use-context NEW_CLUSTER_NAME
    
  4. Importer le secret dans le nouveau cluster

    kubectl -n cert-manager apply -f apigee-root-certificate.yaml
    
  5. Installez la version hybride dans la nouvelle instance (région) en suivant les étapes décrites dans la section Créer des ressources et un contrôleur d'initialisation.

  6. Configurez Cassandra sur tous les pods des nouveaux centres de données. Obtenez apigeeorg à partir du cluster à l'aide de la commande suivante :

    kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
    
  7. Créez un fichier de ressource personnalisée pour la réplication de données Cassandra (YAML). Le fichier peut porter n'importe quel nom. Dans les exemples suivants, le fichier sera nommé datareplication.yaml. Le fichier doit contenir les éléments suivants :

    apiVersion: apigee.cloud.google.com/v1alpha1
    kind: CassandraDataReplication
    metadata:
    name: REGION_EXPANSION
    namespace: NAMESPACE
    spec:
    organizationRef: APIGEEORG_VALUE
    force: false
    source:
      region: SOURCE_REGION
    

    Où :

    • REGION_EXPANSION est le nom que vous attribuez à ces métadonnées. Vous pouvez choisir un nom tel que "cassandra-data-replication".
    • NAMESPACE est le même espace de noms que celui choisi pour la deuxième instance. Il s'agit généralement de "apigee".
    • APIGEEORG_VALUE APIGEEORG_VALUE est le résultat de la valeur de la commande kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name" de l'étape précédente.
    • SOURCE_REGION est la valeur de la valeur du centre de données cassandra à partir de l'état de l'outil de nœud dans le cluster source.
  8. Appliquez l'instance CassandraDataReplication à l'aide de la commande suivante :

    kubectl apply -f datareplication.yaml
    
  9. Vérifiez l'état de la recompilation à l'aide de la commande suivante.



    kubectl -n apigee get apigeeds -o json | jq ".items[].status.cassandraDataReplication"
    

    Le résultat doit ressembler à ceci :

    {
    "rebuildDetails": {
      "apigee-cassandra-default-0": {
        "state": "complete",
        "updated": 1623105760
      },
      "apigee-cassandra-default-1": {
        "state": "complete",
        "updated": 1623105765
      },
      "apigee-cassandra-default-2": {
        "state": "complete",
        "updated": 1623105770
      }
    },
    "state": "complete",
    "updated": 1623105770
    }
    
  10. Vérifiez les processus de recompilation des journaux. Vérifiez également la taille des données à l'aide de la commande "nodetool status" :

    kubectl logs apigee-cassandra-default-0 -f -n apigee
    

    Reportez-vous au fichier datastore/secrets.yaml pour JMX_user et JMX_password.

    kubectl exec apigee-cassandra-default-0 -n apigee  -- nodetool -u JMX_user -pw JMX_password status
    
  11. Supprimez multiRegionSeedHost de la ressource personnalisée de datastore apigee et exécutez la commande ci-dessous pour appliquer la modification.

    kubectl apply k apply -k ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/datastore
    
  12. Vérifier l'état du cluster Cassandra

    La commande suivante permet de voir si la configuration du cluster a réussi dans deux centres de données. La commande vérifie l'état de nodetool pour les deux régions.

    kubectl exec apigee-cassandra-default-0 -n apigee  -- nodetool -u JMX_user -pw JMX_password status
    
    
    Datacenter: us-central1
    =======================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
    UN  10.12.1.45  112.09 KiB  256          100.0%            3c98c816-3f4d-48f0-9717-03d0c998637f  ra-1
    UN  10.12.4.36  95.27 KiB  256          100.0%            0a36383d-1d9e-41e2-924c-7b62be12d6cc  ra-1
    UN  10.12.5.22  88.7 KiB   256          100.0%            3561f4fa-af3d-4ea4-93b2-79ac7e938201  ra-1
    Datacenter: us-west1
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
    UN  10.0.4.33   78.69 KiB  256          100.0%               a200217d-260b-45cd-b83c-182b27ff4c99  ra-1
    UN  10.0.0.21   78.68 KiB  256          100.0%               9f3364b9-a7a1-409c-9356-b7d1d312e52b  ra-1
    UN  10.0.1.26   15.46 KiB  256          100.0%               1666df0f-702e-4c5b-8b6e-086d0f2e47fa  ra-1
    

Dépannage

Guide de compatibilité, de diagnostic et de dépannage

https://cloud.google.com/apigee/docs/api-platform/troubleshoot/playbooks/troubleshooting-apigee-hybrid.

Nettoyage manuel après l'utilisation de la fonction forceDelete dans une configuration Apigee hybrid multirégionale

  • L'exemple suivant comporte deux régions : us-east1 et us-west1.
  • Dans la région us-west1, le datastore apigee a été supprimé à l'aide de la suppression forcée.
  • Dans la région us-east1, Cassandra est toujours opérationnel.
  • Vérifiez que apigeeds est supprimé à l'aide de la commande.

    kubectl get apigeeds -n apigee
    No resources found in apigee namespace.
    
  • Remplacez le contexte kubectl par l'autre région dans laquelle le cluster Cassandra est toujours opérationnel (ici us-east1).

  • Vérifiez que le datastore est en cours d'exécution.

    kubectl get apigeeds -n apigee
    NAME      STATE     AGE
    default      running    23h
    
  • Exécutez dans l'un des pods Cassandra de la région (ici us-east1).

    kubectl exec -it -n apigee apigee-cassandra-default-0 -- bash
    apigee@apigee-cassandra-default-0:~$
    
  • Vérifiez l'état de nodetool. Tous les nœuds indisponibles seront affichés dans la région supprimée (ici us-west1).

    apigee@apigee-cassandra-default-0:~$ nodetool -u ${APIGEE_JMX_USER} -pw ${APIGEE_JMX_PASSWORD} status
    
    Datacenter: us-east1
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --     Address         Load           Tokens   Owns    Host ID                                                           Rack
    UN  10.52.0.212   685.01 KiB  256          ?         e1aa61e3-4eae-4549-9b58-506d495d87ab   ra-1
    UN  10.52.0.72     606.75 KiB  256          ?         477dfc03-f93e-40ea-810a-d15769822ad5     ra-1
    UN  10.52.0.104   648.3 KiB    256          ?         a8854cff-c2e3-4f0c-a342-e692787efcab        ra-1
    Datacenter: us-west1
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --     Address         Load             Tokens   Owns     Host ID                                                           Rack
    DN  10.60.0.143   567.06 KiB    256          ?           355d6ace-ab77-42cb-8138-9993bfd62d0e    ra-1
    DN  10.60.0.40     535.99 KiB    256          ?           4ed2c903-ff56-40fa-a15e-80a3de3cb22d      ra-1
    DN  10.60.0.17     573.08 KiB    256          ?           f9a50d19-c04a-4d0d-a088-612384bed9f5     ra-1
    
  • Supprimez tous les nœuds de la région supprimée (ici us-west1).

    apigee@apigee-cassandra-default-0:~$ nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD removenode 355d6ace-ab77-42cb-8138-9993bfd62d0e
    apigee@apigee-cassandra-default-0:~$ nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD removenode 4ed2c903-ff56-40fa-a15e-80a3de3cb22d
    apigee@apigee-cassandra-default-0:~$ nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD removenode f9a50d19-c04a-4d0d-a088-612384bed9f5
    
  • Vérifiez qu'aucun nœud de la région supprimée (ici us-west1) ne reste.

    apigee@apigee-cassandra-default-0:~$ nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD status
    
    
    Datacenter: us-east1
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --     Address         Load             Tokens  Owns   Host ID                                                           Rack
    UN  10.52.0.212   699.71 KiB    256          ?        e1aa61e3-4eae-4549-9b58-506d495d87ab  ra-1
    UN  10.52.0.72     586.77 KiB    256          ?        477dfc03-f93e-40ea-810a-d15769822ad5    ra-1
    UN  10.52.0.104   623.6 KiB      256          ?        a8854cff-c2e3-4f0c-a342-e692787efcab       ra-1
    
  • Une fois l'opération terminée, supprimez le job de configuration de l'utilisateur dans la région (ici us-east1). Le job est recréé automatiquement en quelques secondes.

    kubectl get jobs -n apigee
    
    
    ​​NAME                                                                                    COMPLETIONS   DURATION   AGE
    apigee-cassandra-schema-setup-apigee--0d2504c                    0/1           5m54s      5m54s
    apigee-cassandra-user-setup--apigee--0d2504c                          0/1            7s         7s
    
    
    kubectl delete job apigee-cassandra-user-setup--apigee--0d2504c
    
  • Attendez que la tâche de configuration de l'utilisateur soit terminée.

    kubectl get jobs -n apigee
    
    ​​NAME                                                                                    COMPLETIONS   DURATION   AGE
    apigee-cassandra-schema-setup-apigee--0d2504c                    1/1           5m54s      5m54s
    apigee-cassandra-user-setup--apigee--0d2504c                      1/1           7m                7m
    
  • Vérifiez que les espaces de clés ne possèdent pas la région supprimée.

  • Créez un pod de débogage Cassandra.

    • Suivez la version 1.5 ou ultérieure d'Apigee hybrid, suivez la documentation du guide de dépannage de Cassandra (par exemple, pour une version hybrid 1.5 : lien ; hybrid 1.6 : lien), puis exécutez sur le pod créé.
  • Connectez-vous à cqlsh dans le pod de débogage à l'aide de la commande

    apigee@cassandra-debug-client:~$ cqlsh apigee-cassandra-default-0.apigee-cassandra-default.apigee.svc.cluster.local -u ddl_user --ssl
    Password:
    
  • Vérifiez que la région us-west1 est supprimée de tous les espaces de clés.

    ddl_user@cqlsh> SELECT * FROM system_schema.keyspaces;
    
    keyspace_name              | durable_writes | replication
    ---------------------------+----------------+-----------------------------------------------------------------------------------
    cache_prince_hybrid_hybrid |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
      rtc_prince_hybrid_hybrid |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
                    system_auth |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
                  system_schema |           True |                            {'class': 'org.apache.cassandra.locator.LocalStrategy'}
    quota_prince_hybrid_hybrid |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
      kms_prince_hybrid_hybrid |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
             system_distributed |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
                         system |           True |                            {'class': 'org.apache.cassandra.locator.LocalStrategy'}
                         perses |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
      kvm_prince_hybrid_hybrid |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
                  system_traces |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
    (11 rows)