Certificat CA d'entrée mTLS non valide

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_MTLS_CA_CERT_INVALID s'affiche lorsque vous consultez les ressources de l'espace de noms apigee.

Messages d'erreur

Une fois kubectl -n apigee get apigeeissues exécuté, une erreur semblable à celle-ci s'affiche :

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

Causes possibles

Cause Description
Le certificat CA d'entrée mTLS n'est pas encodé au format PEM Le certificat CA d'entrée mTLS configuré n'est pas encodé au format PEM.
Le certificat CA d'entrée mTLS est incorrect Le certificat CA d'entrée mTLS configuré est incorrect.

Cause: Le certificat CA mTLS d'entrée n'est pas encodé au format PEM

Le certificat CA d'entrée mTLS stocké dans le secret Kubernetes référencé par un ApigeeRouteConfig ne contient pas les blocs de texte encodés au format PEM (ou ils sont incorrects).

Diagnostic

Exécutez la commande suivante :

kubectl -n apigee describe apigeeissue ISSUE_NAME

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

Le résultat doit ressembler à ce qui suit :

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

Le contenu de Spec.Details explique le nom du ApigeeRouteConfig qui fait référence au secret Kubernetes contenant le certificat CA d'entrée mTLS qui n'est pas encodé au format PEM.

Solution

  1. Utilisez kubectl describe pour afficher le nom du ApigeeRouteConfig contenant le certificat CA d'entrée mTLS qui n'est pas encodé au format PEM:

    kubectl -n apigee describe apigeeissue ISSUE_NAME

    ISSUE_NAME est le nom du problème. Par exemple, ca-cert-invalid-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
      caCertPath: ./certs/ca.pem
      sslCertPath: ./certs/vhost.pem
      sslKeyPath: ./certs/vhost.key
    ...
  4. Validez le contenu du fichier fourni via le chemin d'accès déclaré dans caCertPath. Vérifiez que le contenu contient les blocs de certificats de début et de fin requis. Exemple :

    -----BEGIN CERTIFICATE-----
    MIIDYTCCAkmgAwIBAgIUSXeU0pQYRFzYlqZpKhNNJdBLFBIwDQYJKoZIhvcNAQEL
    ... <contents omitted> ...
    eWJyaWQuZTJlLmFwaWdlZWtzLm5ldDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
    MMM=
    -----END CERTIFICATE-----
  5. Une fois le contenu et le format du fichier corrigés, appliquez la modification à l'hôte virtuel:

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

Cause: Le certificat CA d'entrée mTLS est incorrect

Le certificat CA d'entrée mTLS stocké dans le secret Kubernetes référencé par un ApigeeRouteConfig est incorrect.

Diagnostic

Exécutez la commande suivante :

kubectl -n apigee describe apigeeissue ISSUE_NAME

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

Le résultat doit ressembler à ce qui suit :

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

Le contenu de Spec.Details explique le nom du ApigeeRouteConfig qui fait référence au secret Kubernetes contenant le certificat CA d'entrée mTLS dont le format est incorrect et n'a pas pu être analysé.

Solution

  1. Utilisez kubectl describe pour afficher le nom du ApigeeRouteConfig dont le certificat CA d'entrée mTLS est incorrect:

    kubectl -n apigee describe apigeeissue ISSUE_NAME

    ISSUE_NAME est le nom du problème. Par exemple, ca-cert-invalid-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
      caCertPath: ./certs/ca.pem
      sslCertPath: ./certs/vhost.pem
      sslKeyPath: ./certs/vhost.key
    ...
  4. Validez le contenu du fichier fourni via le chemin d'accès déclaré dans caCertPath. Assurez-vous que le contenu contient l'intégralité du certificat. Exemple :

    -----BEGIN CERTIFICATE-----
    MIIDYTCCAkmgAwIBAgIUSXeU0pQYRFzYlqZpKhNNJdBLFBIwDQYJKoZIhvcNAQEL
    BQAwQDE+MDwGA1UEAww1bWF4bWlsbGlvbi1oeWJyaWQtc3RhZ2luZy1kZXYuaHli
    ... <contents omitted> ...
    0TPPaik8U9dtFXMGT1DJkjPRPO0Jw5rlU8DKlNA/Kkv52aKJZNwB/cwmvoa/BFji
    PIPa9wY=
    -----END CERTIFICATE-----
  5. Une fois le contenu et le format du fichier corrigés, appliquez la modification à l'hôte virtuel:

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

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) Fichier référencé par caCertPath pour l'hôte virtuel concerné.