mTLS-CA-Zertifikat für eingehenden Traffic ungültig

Sie lesen gerade die Dokumentation zu Apigee und Apigee Hybrid.
Für dieses Thema gibt es keine entsprechende Apigee Edge-Dokumentation.

Symptom

Ein ApigeeIssue mit Reason AIS_INGRESS_MTLS_CA_CERT_INVALID wird angezeigt, wenn Ressourcen im Namespace apigee angezeigt werden.

Fehlermeldungen

Nachdem kubectl -n apigee get apigeeissues ausgeführt wurde, wird ein Fehler wie der folgende angezeigt:

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

Mögliche Ursachen

Ursache Beschreibung
Das mTLS-CA-Zertifikat für eingehenden Traffic ist nicht PEM-codiert. Das konfigurierte mTLS-CA-Zertifikat für eingehenden Traffic ist nicht PEM-codiert.
mTLS-CA-Zertifikat für eingehenden Traffic ist fehlerhaft Das konfigurierte mTLS-CA-Zertifikat für eingehenden Traffic ist fehlerhaft.

Ursache: Ingress-mTLS-CA-Zertifikat ist nicht PEM-codiert

Im mTLS-CA-Zertifikat für eingehenden Traffic, das im Kubernetes-Secret gespeichert ist, auf das ein ApigeeRouteConfig verweist, fehlen die Textblöcke mit der PEM-Codierung (oder sind fehlerhaft).

Diagnose

Führen Sie dazu diesen Befehl aus:

kubectl -n apigee describe apigeeissue ISSUE_NAME

Dabei ist ISSUE_NAME der Name des Problems. Beispiel: ca-cert-invalid-my-org-my-virtualhost

Die Ausgabe sollte in etwa so aussehen:

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

Der Inhalt von Spec.Details erläutert den Namen der ApigeeRouteConfig, die auf das Kubernetes-Secret mit dem nicht PEM-codierten Ingress-mTLS-CA-Zertifikat verweist.

Lösung

  1. Verwenden Sie kubectl describe, um den Namen der ApigeeRouteConfig anzuzeigen, die das mTLS-CA-Zertifikat für eingehenden Traffic enthält, das nicht PEM-codiert ist:

    kubectl -n apigee describe apigeeissue ISSUE_NAME

    Dabei ist ISSUE_NAME der Name des Problems. Beispiel: ca-cert-invalid-my-org-my-virtualhost.

    In diesem Beispiel verweist ApigeeRouteConfig my-org-my-virtualhost auf das Secret my-org-my-virtualhost.

  2. Ermitteln Sie den virtualhost-Namen aus dem ApigeeRouteConfig.

    Der Name des ApigeeRouteConfig hat das Format <Apigee organization>-<virtualhost name>.

    In diesem Beispiel ist my-org die Apigee-Organisation und der Name des virtuellen Hosts my-virtualhost.

  3. Suchen Sie den entsprechenden virtuellen Host in Ihrem overrides.yaml.

    virtualhosts:
    ...
    - name: my-virtualhost
      selector:
        app: apigee-ingressgateway
      caCertPath: ./certs/ca.pem
      sslCertPath: ./certs/vhost.pem
      sslKeyPath: ./certs/vhost.key
    ...
  4. Validieren Sie den Inhalt der Datei, die über den in caCertPath angegebenen Pfad bereitgestellt wird. Der Inhalt muss die erforderlichen Start- und Endzertifikatblöcke enthalten. Beispiel:

    -----BEGIN CERTIFICATE-----
    MIIDYTCCAkmgAwIBAgIUSXeU0pQYRFzYlqZpKhNNJdBLFBIwDQYJKoZIhvcNAQEL
    ... <contents omitted> ...
    eWJyaWQuZTJlLmFwaWdlZWtzLm5ldDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
    MMM=
    -----END CERTIFICATE-----
  5. Sobald der Inhalt und das Format der Datei korrigiert wurden, wenden Sie die Änderung auf den virtuellen Host an:

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

Ursache: Ingress-mTLS-CA-Zertifikat ist fehlerhaft

Das eingehende mTLS-CA-Zertifikat für eingehenden Traffic, das im Kubernetes-Secret gespeichert ist, auf das ein ApigeeRouteConfig verweist, ist fehlerhaft.

Diagnose

Führen Sie dazu diesen Befehl aus:

kubectl -n apigee describe apigeeissue ISSUE_NAME

Dabei ist ISSUE_NAME der Name des Problems. Beispiel: ca-cert-invalid-my-org-my-virtualhost

Die Ausgabe sollte in etwa so aussehen:

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

Der Inhalt von Spec.Details erläutert den Namen der ApigeeRouteConfig, die auf das Kubernetes-Secret verweist, das das Ingress-mTLS-CA-Zertifikat für eingehenden Traffic enthält, das fehlerhaft ist und nicht geparst werden konnte.

Lösung

  1. Verwenden Sie kubectl describe, um den Namen der ApigeeRouteConfig anzuzeigen, die das fehlerhafte mTLS-CA-Zertifikat für eingehenden Traffic enthält:

    kubectl -n apigee describe apigeeissue ISSUE_NAME

    Dabei ist ISSUE_NAME der Name des Problems. Beispiel: ca-cert-invalid-my-org-my-virtualhost.

    In diesem Beispiel verweist ApigeeRouteConfig my-org-my-virtualhost auf das Secret my-org-my-virtualhost.

  2. Ermitteln Sie den virtualhost-Namen aus dem ApigeeRouteConfig.

    Der Name des ApigeeRouteConfig hat das Format <Apigee organization>-<virtualhost name>.

    In diesem Beispiel ist my-org die Apigee-Organisation und der Name des virtuellen Hosts my-virtualhost.

  3. Suchen Sie den entsprechenden virtuellen Host in Ihrem overrides.yaml.

    virtualhosts:
    ...
    - name: my-virtualhost
      selector:
        app: apigee-ingressgateway
      caCertPath: ./certs/ca.pem
      sslCertPath: ./certs/vhost.pem
      sslKeyPath: ./certs/vhost.key
    ...
  4. Validieren Sie den Inhalt der Datei, die über den in caCertPath angegebenen Pfad bereitgestellt wird. Achten Sie darauf, dass der Inhalt das gesamte Zertifikat enthält. Beispiel:

    -----BEGIN CERTIFICATE-----
    MIIDYTCCAkmgAwIBAgIUSXeU0pQYRFzYlqZpKhNNJdBLFBIwDQYJKoZIhvcNAQEL
    BQAwQDE+MDwGA1UEAww1bWF4bWlsbGlvbi1oeWJyaWQtc3RhZ2luZy1kZXYuaHli
    ... <contents omitted> ...
    0TPPaik8U9dtFXMGT1DJkjPRPO0Jw5rlU8DKlNA/Kkv52aKJZNwB/cwmvoa/BFji
    PIPa9wY=
    -----END CERTIFICATE-----
  5. Sobald der Inhalt und das Format der Datei korrigiert wurden, wenden Sie die Änderung auf den virtuellen Host an:

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

Erfassen von Diagnoseinformationen erforderlich

Wenn das Problem auch nach Befolgen der obigen Anweisungen weiterhin besteht, sammeln Sie die folgenden Diagnoseinformationen und wenden Sie sich dann an Google Cloud Customer Care:

  1. Die Google Cloud-Projekt-ID.
  2. Der Name der Apigee Hybrid-Organisation.
  3. Das Feld Spec.Details von ApigeeIssue.
  4. (Optional) Datei, auf die von caCertPath für den betroffenen virtuellen Host verwiesen wird.