Error de coincidencia de certificados de entrada

Estás consultando la documentación de Apigee y Apigee hybrid.
No hay documentación equivalente de Apigee Edge sobre este tema.

Síntoma

Se muestra un ApigeeIssue con Reason AIS_INGRESS_CERT_MISMATCH al ver los recursos del espacio de nombres apigee.

Mensajes de error

Después de ejecutar kubectl -n apigee get apigeeissues, se muestra el siguiente error:

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

Causa: discordancia de certificado de Ingress

La clave privada y el certificado almacenados en el secreto de Kubernetes al que hace referencia un ApigeeRouteConfig no coinciden.

Diagnóstico

Ejecuta el siguiente comando:

kubectl -n apigee describe apigeeissue ISSUE_NAME

Donde ISSUE_NAME es el nombre del problema. Por ejemplo, ingress-cert-mismatch-my-org-my-virtualhost.

Se devuelve algo similar a lo siguiente:

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

El contenido de Spec.Details explica el nombre de ApigeeRouteConfig, que hace referencia al secreto de Kubernetes que contiene el certificado de entrada y la clave privada.

Resolución

  1. Usa kubectl describe para mostrar el nombre del ApigeeRouteConfig que tiene un certificado y una clave de entrada que no coinciden:

    kubectl -n apigee describe apigeeissue ISSUE_NAME

    Donde ISSUE_NAME es el nombre del problema. Por ejemplo, ingress-cert-mismatch-my-org-my-virtualhost.

    En este ejemplo, ApigeeRouteConfig my-org-my-virtualhost hace referencia al secreto my-org-my-virtualhost.

  2. Determina el nombre de virtualhost a partir de ApigeeRouteConfig.

    El nombre de ApigeeRouteConfig tiene el siguiente formato: <Apigee organization>-<virtualhost name>.

    En este ejemplo, my-org es la organización de Apigee y el nombre del host virtual es my-virtualhost.

  3. Busca el host virtual correspondiente en el archivo overrides.yaml:

    virtualhosts:
    ...
    - name: my-virtualhost
      selector:
        app: apigee-ingressgateway
      sslCertPath: ./certs/vhost.pem
      sslKeyPath: ./certs/vhost.key
    ...
  4. Valida que los archivos de certificado y clave que se están usando coincidan.

    Con los valores sslCertPath y sslKeyPath del paso anterior, valida que las sumas MD5 coincidan con openssl:

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

    • Donde SSL_CERT_PATH es el sslCertPath del paso anterior. Por ejemplo, ./certs/vhost.pem.
    • Donde SSL_KEY_PATH es el sslKeyPath del paso anterior. Por ejemplo, ./certs/vhost.key.

    La salida de los dos comandos anteriores debe coincidir:

    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 la salida de los comandos anteriores no coincide, utilice uno de los siguientes métodos para corregir el problema:

    • Actualiza sslCertPath y sslKeyPath del host virtual para que apunten a las rutas de archivo correctas.
    • Corrige el contenido del archivo sslCertPath o sslKeyPath para que contenga el par de clave y certificado correcto.
  6. Aplica los cambios al virtualhost con Helm:

    helm upgrade ENV_GROUP_NAME apigee-virtualhost/ \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      --set envgroup=ENV_GROUP_NAME \
      -f OVERRIDES_FILE

    Asegúrate de incluir todos los ajustes que se muestran, incluido --atomic para que la acción se revierta si falla.

Debe recoger información de diagnóstico

Si el problema persiste incluso después de seguir las instrucciones anteriores, reúne la siguiente información de diagnóstico y ponte en contacto con el equipo de Asistencia de Google Cloud:

  1. El Google Cloud ID del proyecto.
  2. Nombre de la organización de Apigee Hybrid.
  3. El campo Spec.Details de ApigeeIssue.
  4. (Opcional) Archivos a los que hacen referencia sslCertPath y sslKeyPath para el virtualhost afectado.