Incohérence du certificat Ingress

Vous consultez la documentation d'Apigee et d'Apigee hybrid.
Il n'existe pas de documentation Apigee Edge équivalente pour ce sujet.

Symptôme

Un ApigeeIssue avec Reason AIS_INGRESS_CERT_MISMATCH s'affiche lorsque vous consultez les ressources de l'espace de noms apigee.

Messages d'erreur

L'erreur suivante s'affiche après l'exécution de kubectl -n apigee get apigeeissues :

NAME                                          SEVERITY   REASON                      DOCUMENTATION                                                                           AGE
ingress-cert-mismatch-my-org-my-virtualhost   ERROR      AIS_INGRESS_CERT_MISMATCH   https://cloud.google.com/apigee/docs/hybrid/troubleshooting/AIS_INGRESS_CERT_MISMATCH   5h18m

Cause : incohérence du certificat Ingress

La clé privée et le certificat stockés dans le secret Kubernetes référencé par un ApigeeRouteConfig ne correspondent pas.

Diagnostic

Exécutez la commande suivante :

kubectl -n apigee describe apigeeissue ISSUE_NAME

ISSUE_NAME est le nom du problème. Par exemple, ingress-cert-mismatch-my-org-my-virtualhost.

Un résultat semblable au suivant s'affiche :

Name:         ingress-cert-mismatch-my-org-my-virtualhost
Namespace:    apigee
Labels:       ais-reason=AIS_INGRESS_CERT_MISMATCH
Annotations:  <none>
API Version:  apigee.cloud.google.com/v1alpha1
Kind:         ApigeeIssue
Metadata:
  Creation Timestamp:  2023-06-12T17:03:43Z
  Generation:          1
  Owner References:
    API Version:     apigee.cloud.google.com/v1alpha2
    Kind:            ApigeeOrganization
    Name:            my-org
    UID:             7e83a52c-ce00-4bed-98be-55835ada1817
  Resource Version:  3281563
  UID:               adc775c2-376d-4bf9-9860-500b2b2b8273
Spec:
  Details:        Ingress cert and private key in secret "my-org-my-virtualhost" for ApigeeRouteConfig "my-org-my-virtualhost" do not match
  Documentation:  https://cloud.google.com/apigee/docs/hybrid/troubleshooting/AIS_INGRESS_CERT_MISMATCH
  Reason:         AIS_INGRESS_CERT_MISMATCH
  Severity:       ERROR
Events:           <none>
Spec:
  Details:        Ingress cert and private key in secret "my-org-my-virtualhost" for ApigeeRouteConfig "my-org-my-virtualhost" do not match

Le contenu de Spec.Details explique le nom de ApigeeRouteConfig qui fait référence au secret Kubernetes contenant le certificat Ingress et la clé privée.

Solution

  1. Utilisez kubectl describe pour afficher le nom de ApigeeRouteConfig qui possède le certificat Ingress et la clé non concordants:

    kubectl -n apigee describe apigeeissue ISSUE_NAME

    ISSUE_NAME est le nom du problème. Par exemple, ingress-cert-mismatch-my-org-my-virtualhost.

    Dans cet exemple, ApigeeRouteConfig my-org-my-virtualhost fait référence au secret my-org-my-virtualhost.

  2. Déterminez le nom virtualhost à partir de ApigeeRouteConfig.

    Le nom de la fonction ApigeeRouteConfig est au format suivant : <Apigee organization>-<virtualhost name>.

    Dans cet exemple, my-org est l'organisation Apigee et le nom de l'hôte virtuel est my-virtualhost.

  3. Recherchez l'hôte virtuel correspondant dans votre overrides.yaml.

    virtualhosts:
    ...
    - name: my-virtualhost
      selector:
        app: apigee-ingressgateway
      sslCertPath: ./certs/vhost.pem
      sslKeyPath: ./certs/vhost.key
    ...
  4. Vérifiez que les fichiers de certificat et de clé utilisés correspondent.

    À l'aide des valeurs sslCertPath et sslKeyPath de l'étape précédente, validez la correspondance des sommes MD5 à l'aide de openssl :

    openssl x509 -noout -modulus -in SSL_CERT_PATH | openssl md5
    openssl rsa -noout -modulus -in SSL_KEY_PATH | openssl md5

    • SSL_CERT_PATH correspond à la valeur sslCertPath de l'étape précédente. Exemple : ./certs/vhost.pem.
    • SSL_KEY_PATH correspond à la valeur sslKeyPath de l'étape précédente. Exemple : ./certs/vhost.key.

    Le résultat des deux commandes ci-dessus doit correspondre :

    openssl x509 -noout -modulus -in ./certs/vhost.pem | openssl md5
    MD5(stdin)= 40ba189dbe9d6fbfbdde1a8ef803d2d4
    openssl rsa -noout -modulus -in ./certs/vhost.key | openssl md5
    MD5(stdin)= 40ba189dbe9d6fbfbdde1a8ef803d2d4
  5. Si les résultats des commandes précédentes ne correspondent pas, utilisez l'une des méthodes suivantes pour corriger le problème :

    • Mettez à jour les fichiers sslCertPath et sslKeyPath de l'hôte virtuel pour qu'ils pointent vers les chemins de fichiers corrects.
    • Corrigez le contenu du fichier sslCertPath ou sslKeyPath pour qu'il contienne la paire de clés et le certificat correspondants.
  6. Appliquez les modifications à l'hôte virtuel :

    Helm

    helm upgrade ENV_GROUP_NAME apigee-virtualhost/ \
      --namespace apigee \
      --set envgroup=ENV_GROUP_NAME \
      -f overrides.yaml

    apigeectl

    apigeectl apply -f overrides.yaml --settings virtualhosts

Vous devez collecter des informations de diagnostic

Si le problème persiste, même après avoir suivi les instructions ci-dessus, rassemblez les informations de diagnostic suivantes, puis contactez Google Cloud Customer Care :

  1. ID de projet Google Cloud
  2. Nom de l'organisation Apigee Hybrid
  3. Champ Spec.Details de ApigeeIssue
  4. (Facultatif) Fichiers référencés par sslCertPath et sslKeyPath pour l'hôte virtuel concerné