El certificado de la AC de mTLS de entrada no es válido

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

Síntoma

Se muestra un ApigeeIssue con Reason AIS_INGRESS_MTLS_CA_CERT_INVALID cuando se visualizan los recursos en el espacio de nombres apigee.

Mensajes de error

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

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

Causas posibles

Causa Descripción
El certificado de la AC de mTLS de entrada no está codificado con PEM El certificado de la AC de mTLS de entrada configurado no está codificado con PEM.
El certificado de la AC de mTLS de entrada tiene un formato incorrecto El certificado de la AC de mTLS de entrada configurado tiene un formato incorrecto.

Causa: El certificado de la AC de mTLS de entrada no está codificado con PEM

Al certificado de la AC de mTLS de entrada almacenado en el Secret de Kubernetes al que hace referencia una ApigeeRouteConfig le faltan los bloques de texto con codificación PEM (o tienen un formato incorrecto).

Diagnóstico

Ejecuta el siguiente comando:

kubectl -n apigee describe apigeeissue ISSUE_NAME

En el que ISSUE_NAME es el nombre del problema. Por ejemplo:ca-cert-invalid-my-org-my-virtualhost

El resultado debería ser similar al siguiente:

Name:         ca-cert-invalid-my-org-my-virtualhost
Namespace:    apigee
Labels:       ais-reason=AIS_INGRESS_MTLS_CA_CERT_INVALID
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:        CA certificate in secret "my-org-my-virtualhost" for ApigeeRouteConfig "my-org-my-virtualhost" is not PEM encoded
  Documentation:  https://cloud.google.com/apigee/docs/hybrid/troubleshooting/AIS_INGRESS_MTLS_CA_CERT_INVALID
  Reason:         AIS_INGRESS_MTLS_CA_CERT_INVALID
  Severity:       ERROR
Events:           <none>
Spec:
  Details:        CA certificate in secret "my-org-my-virtualhost" for ApigeeRouteConfig "my-org-my-virtualhost" is not PEM encoded

El contenido de Spec.Details explica el nombre de ApigeeRouteConfig que hace referencia al Secret de Kubernetes que contiene el certificado de la AC de mTLS de entrada que no está codificado con PEM.

Solución

  1. Usa kubectl describe para mostrar el nombre de la ApigeeRouteConfig que tiene el certificado de la AC de mTLS de entrada que no está codificado con PEM:

    kubectl -n apigee describe apigeeissue ISSUE_NAME

    En el que ISSUE_NAME es el nombre del problema. Por ejemplo, ca-cert-invalid-my-org-my-virtualhost.

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

  2. Determina el nombre virtualhost 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 tu overrides.yaml.

    virtualhosts:
    ...
    - name: my-virtualhost
      selector:
        app: apigee-ingressgateway
      caCertPath: ./certs/ca.pem
      sslCertPath: ./certs/vhost.pem
      sslKeyPath: ./certs/vhost.key
    ...
  4. Valida el contenido del archivo que se proporcionó a través de la ruta de acceso declarada en caCertPath. Asegúrate de que el contenido tenga los bloques de certificado iniciales y finales necesarios. Por ejemplo:

    -----BEGIN CERTIFICATE-----
    MIIDYTCCAkmgAwIBAgIUSXeU0pQYRFzYlqZpKhNNJdBLFBIwDQYJKoZIhvcNAQEL
    ... <contents omitted> ...
    eWJyaWQuZTJlLmFwaWdlZWtzLm5ldDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
    MMM=
    -----END CERTIFICATE-----
  5. Una vez que se hayan corregido el contenido y el formato del archivo, aplica el cambio al host virtual:

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

Causa: El certificado de la AC de mTLS de entrada tiene un formato incorrecto

El certificado de la AC de mTLS de entrada almacenado en el Secret de Kubernetes al que hace referencia una ApigeeRouteConfig tiene un formato incorrecto.

Diagnóstico

Ejecuta el siguiente comando:

kubectl -n apigee describe apigeeissue ISSUE_NAME

En el que ISSUE_NAME es el nombre del problema. Por ejemplo:ca-cert-invalid-my-org-my-virtualhost

El resultado debería ser similar al siguiente:

Name:         ca-cert-invalid-my-org-my-virtualhost
Namespace:    apigee
Labels:       ais-reason=AIS_INGRESS_MTLS_CA_CERT_INVALID
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:        CA certificate in secret "my-org-my-virtualhost" for ApigeeRouteConfig "my-org-my-virtualhost" is invalid
  Documentation:  https://cloud.google.com/apigee/docs/hybrid/troubleshooting/AIS_INGRESS_MTLS_CA_CERT_INVALID
  Reason:         AIS_INGRESS_MTLS_CA_CERT_INVALID
  Severity:       ERROR
Events:           <none>
Spec:
  Details:        CA certificate in secret "my-org-my-virtualhost" for ApigeeRouteConfig "my-org-my-virtualhost" is invalid

El contenido de Spec.Details explica el nombre de la ApigeeRouteConfig que hace referencia al Secret de Kubernetes que contiene el certificado de la AC de mTLS de entrada que tiene un formato incorrecto y no se pudo analizar.

Solución

  1. Usa kubectl describe para mostrar el nombre de la ApigeeRouteConfig que tiene el certificado de la AC de mTLS de entrada que tiene un formato incorrecto:

    kubectl -n apigee describe apigeeissue ISSUE_NAME

    En el que ISSUE_NAME es el nombre del problema. Por ejemplo, ca-cert-invalid-my-org-my-virtualhost.

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

  2. Determina el nombre virtualhost 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 tu overrides.yaml.

    virtualhosts:
    ...
    - name: my-virtualhost
      selector:
        app: apigee-ingressgateway
      caCertPath: ./certs/ca.pem
      sslCertPath: ./certs/vhost.pem
      sslKeyPath: ./certs/vhost.key
    ...
  4. Valida el contenido del archivo que se proporcionó a través de la ruta de acceso declarada en caCertPath. Asegúrate de que el contenido incluya todo el certificado. Por ejemplo:

    -----BEGIN CERTIFICATE-----
    MIIDYTCCAkmgAwIBAgIUSXeU0pQYRFzYlqZpKhNNJdBLFBIwDQYJKoZIhvcNAQEL
    BQAwQDE+MDwGA1UEAww1bWF4bWlsbGlvbi1oeWJyaWQtc3RhZ2luZy1kZXYuaHli
    ... <contents omitted> ...
    0TPPaik8U9dtFXMGT1DJkjPRPO0Jw5rlU8DKlNA/Kkv52aKJZNwB/cwmvoa/BFji
    PIPa9wY=
    -----END CERTIFICATE-----
  5. Una vez que se hayan corregido el contenido y el formato del archivo, aplica el cambio al host virtual:

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

Se debe recopilar información de diagnóstico

Si el problema persiste incluso después de seguir las instrucciones anteriores, recopila la siguiente información de diagnóstico y, luego, comunícate con Asistencia de Apigee:

  1. El ID del proyecto de Google Cloud.
  2. El nombre de la organización de Apigee Hybrid
  3. El campo Spec.Details de ApigeeIssue.
  4. (Opcional) Archivo al que hace referencia caCertPath para el host virtual afectado.