אישור CA של mTLS לתעבורת נתונים נכנסת לא חוקי

הדף הזה רלוונטי ל-Apigee ול-Apigee Hybrid.

אין תיעוד מקביל ב-Apigee Edge בנושא הזה.

תיאור הבעיה

הסמל ApigeeIssue עם Reason AIS_INGRESS_MTLS_CA_CERT_INVALID מוצג כשמציגים משאבים במרחב השמות apigee.

הודעות שגיאה

אחרי שמריצים את הפקודה kubectl -n apigee get apigeeissues, מוצגת שגיאה כמו זו שבהמשך:

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

סיבות אפשריות

מטרה תיאור
אישור CA של mTLS Ingress לא מקודד ב-PEM אישור ה-CA של mTLS לכניסה שהוגדר לא מקודד ב-PEM.
אישור CA של mTLS Ingress פגום הפורמט של אישור ה-CA של mTLS שמוגדר לכניסה שגוי.

הסיבה: אישור CA של mTLS Ingress לא מקודד ב-PEM

חסרים בלוקים של טקסט בקידוד PEM באישור CA של mTLS לכניסה, שמאוחסן בסוד של Kubernetes שאליו יש הפניה באמצעות ApigeeRouteConfig (או שהבלוקים פגומים).

אבחון

מריצים את הפקודה הבאה:

kubectl -n apigee describe apigeeissue ISSUE_NAME

כאשר ISSUE_NAME הוא שם הבעיה. לדוגמה, ca-cert-invalid-my-org-my-virtualhost.

הפלט אמור להיראות כך:

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

התוכן של Spec.Details מסביר את השם של ApigeeRouteConfig שמתייחס לסוד של Kubernetes שמכיל את אישור CA של mTLS של הכניסה, שלא מקודד ב-PEM.

רזולוציה

  1. משתמשים ב-kubectl describe כדי להציג את השם של ApigeeRouteConfig שיש לו אישור CA של mTLS לכניסה שלא מקודד ב-PEM:

    kubectl -n apigee describe apigeeissue ISSUE_NAME

    כאשר ISSUE_NAME הוא שם הבעיה. לדוגמה, ca-cert-invalid-my-org-my-virtualhost.

    בדוגמה הזו, ApigeeRouteConfig my-org-my-virtualhost מפנה לסוד my-org-my-virtualhost.

  2. קובעים את השם של virtualhost מתוך ApigeeRouteConfig.

    השם של ApigeeRouteConfig הוא בפורמט: <Apigee organization>-<virtualhost name>.

    בדוגמה הזו, my-org הוא הארגון ב-Apigee ושם המארח הווירטואלי הוא my-virtualhost.

  3. מאתרים את ה-virtualhost המתאים ב-overrides.yaml.

    virtualhosts:
    ...
    - name: my-virtualhost
      selector:
        app: apigee-ingressgateway
      caCertPath: ./certs/ca.pem
      sslCertPath: ./certs/vhost.pem
      sslKeyPath: ./certs/vhost.key
    ...
  4. מאמתים את התוכן של הקובץ שצוין בנתיב שהוגדר ב-caCertPath. מוודאים שהתוכן כולל את בלוקי האישור הנדרשים של ההתחלה והסיום. לדוגמה:

    -----BEGIN CERTIFICATE-----
    MIIDYTCCAkmgAwIBAgIUSXeU0pQYRFzYlqZpKhNNJdBLFBIwDQYJKoZIhvcNAQEL
    ... <contents omitted> ...
    eWJyaWQuZTJlLmFwaWdlZWtzLm5ldDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
    MMM=
    -----END CERTIFICATE-----
  5. אחרי שמתקנים את התוכן והפורמט של הקובץ, מחילים את השינוי על ה-virtualhost:

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

הסיבה: אישור CA של mTLS ב-Ingress פגום

אישור ה-CA של mTLS לכניסה שמאוחסן בסוד של Kubernetes שאליו יש הפניה על ידי ApigeeRouteConfig פגום.

אבחון

מריצים את הפקודה הבאה:

kubectl -n apigee describe apigeeissue ISSUE_NAME

כאשר ISSUE_NAME הוא שם הבעיה. לדוגמה, ca-cert-invalid-my-org-my-virtualhost.

הפלט אמור להיראות כך:

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

התוכן של Spec.Details מסביר את השם של ApigeeRouteConfig שמתייחס לסוד של Kubernetes שמכיל את אישור ה-CA של mTLS של הכניסה, שהוא פגום והניתוח שלו נכשל.

רזולוציה

  1. משתמשים בפקודה kubectl describe כדי להציג את השם של ApigeeRouteConfig שכולל את אישור ה-CA של mTLS לכניסה, שהוא פגום:

    kubectl -n apigee describe apigeeissue ISSUE_NAME

    כאשר ISSUE_NAME הוא שם הבעיה. לדוגמה, ca-cert-invalid-my-org-my-virtualhost.

    בדוגמה הזו, ApigeeRouteConfig my-org-my-virtualhost מפנה לסוד my-org-my-virtualhost.

  2. קובעים את השם של virtualhost מתוך ApigeeRouteConfig.

    השם של ApigeeRouteConfig הוא בפורמט: <Apigee organization>-<virtualhost name>.

    בדוגמה הזו, my-org הוא הארגון ב-Apigee ושם המארח הווירטואלי הוא my-virtualhost.

  3. מאתרים את ה-virtualhost המתאים ב-overrides.yaml.

    virtualhosts:
    ...
    - name: my-virtualhost
      selector:
        app: apigee-ingressgateway
      caCertPath: ./certs/ca.pem
      sslCertPath: ./certs/vhost.pem
      sslKeyPath: ./certs/vhost.key
    ...
  4. מאמתים את התוכן של הקובץ שצוין בנתיב שהוגדר ב-caCertPath. מוודאים שהתוכן כולל את כל האישור. לדוגמה:

    -----BEGIN CERTIFICATE-----
    MIIDYTCCAkmgAwIBAgIUSXeU0pQYRFzYlqZpKhNNJdBLFBIwDQYJKoZIhvcNAQEL
    BQAwQDE+MDwGA1UEAww1bWF4bWlsbGlvbi1oeWJyaWQtc3RhZ2luZy1kZXYuaHli
    ... <contents omitted> ...
    0TPPaik8U9dtFXMGT1DJkjPRPO0Jw5rlU8DKlNA/Kkv52aKJZNwB/cwmvoa/BFji
    PIPa9wY=
    -----END CERTIFICATE-----
  5. אחרי שמתקנים את התוכן והפורמט של הקובץ, מחילים את השינוי על ה-virtualhost:

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

צריך לאסוף פרטי אבחון

אם הבעיה נמשכת גם אחרי שמבצעים את ההוראות שלמעלה, צריך לאסוף את נתוני האבחון הבאים ואז לפנות אל Cloud Customer Care:

  1. מזהה הפרויקט Google Cloud .
  2. השם של הארגון ב-Apigee Hybrid.
  3. השדה Spec.Details של ApigeeIssue.
  4. (אופציונלי) קובץ שאליו יש הפניה באמצעות caCertPath עבור המארח הווירטואלי המושפע.