הדף הזה רלוונטי ל-Apigee ול-Apigee Hybrid.
לעיון במסמכי התיעוד של Apigee Edge
תיאור הבעיה
בקשות Apigee hybrid API נכשלות עם שגיאות בחיבור TLS. בדרך כלל השגיאות האלה הן איפוסים של חיבורים ושל כשלים בהעברת נתוני ההתראה.
הודעות שגיאה
קריאות ל-API נכשלות עם TLS בדומה לשגיאה שמוצגת למטה, או עם שגיאות אחרות אבל לא זהות:
* TLSv1.2 (OUT), TLS handshake, Client hello (1): * LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to example.apis.com:443 * Closing connection 0 curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to example.apis.com:443
* (304) (OUT), TLS handshake, Client hello (1): * Recv failure: Connection reset by peer * LibreSSL/3.3.6: error:02FFF036:system library:func(4095):Connection reset by peer * Closing connection curl: (35) Recv failure: Connection reset by peer
* (304) (OUT), TLS handshake, Client hello (1): * LibreSSL/3.3.6: error:1404B410:SSL routines:ST_CONNECT:sslv3 alert handshake failure * Closing connection curl: (35) LibreSSL/3.3.6: error:1404B410:SSL routines:ST_CONNECT:sslv3 alert handshake failure
סיבות אפשריות
| מטרה | תיאור | הוראות לפתרון בעיות שרלוונטיות ל |
|---|---|---|
| חסר סוד של Ingress Kubernetes | הסוד של Kubernetes עבור org-envgroup חסר במרחב השמות של Apigee. |
Apigee Hybrid |
| אישור SSL בפורמט שגוי | הפורמט של אישור ה-SSL שאליו מפנה הקטע virtualhosts בקובץ ההחלפות שגוי. | Apigee Hybrid |
| המפתחות של ה-SSL לא תואמים לאישור ה-SSL | מפתחות ה-SSL לא תואמים לאישור ה-SSL שאליו מפנה הקטע [virtualhosts] בקובץ [overrides]. | Apigee Hybrid |
הסיבה: חסר סוד ב-Ingress Kubernetes
אבחון
- מנתחים את היומנים של תרמילי
apigee-watcherבמרחב השמות apigee כדי לראות אם יש שגיאות.
יכול להיות שתופיע שגיאה כמו זו שמוצגת בהמשך:
כאשר:NOT_FOUND: failed to get secret "MY_HYBRID_PROJECT-ENV_GROUP" in namespace "apigee": secrets "MY_HYBRID_PROJECT-ENV_GROUP" not found
-
MY_HYBRID_PROJECTהוא שם הארגון ב-Apigee Hybrid -
ENV_GROUPהוא השם של קבוצת הסביבות
apigee-watcherלא הצליח למצוא את הסוד של Kubernetes עבור קבוצת הסביבות שצוינה למעלה בארגון Apigee Hybrid. -
- כדי לוודא שהסודות של Kubernetes אכן חסרים, משתמשים בפקודה הבאה:
kubectl -n apigee get secrets | grep MY_HYBRID_PROJECT-ENV_GROUP
<no output>
בדוגמה הזו לא מוצגים סודות של Kubernetes עבורMY_HYBRID_PROJECT-ENV_GROUP. יכול להיות שהם נמחקו בטעות.
רזולוציה
אפשר ליצור מחדש את הסודות החסרים של Kubernetes באמצעות המידע על אישורי ה-TLS וקובצי המפתחות
מתוך קובץ overrides.yaml:
- מריצים את הפקודה הבאה כדי ליצור מחדש את הסודות החסרים באמצעות Helm:
הרצת בדיקה:
helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \ --namespace APIGEE_NAMESPACE \ --atomic \ --set envgroup=ENV_GROUP \ -f OVERRIDES_FILE \ --dry-run=server
חשוב לכלול את כל ההגדרות שמוצגות, כולל
--atomicכדי שהפעולה תבוטל אם היא תיכשל.יכול להיות שההתקנה שלכם הוגדרה באמצעות ENV_GROUP_RELEASE_NAME ששונה מ-ENV_GROUP, ויכול להיות שלא. מידע על ההגדרות מופיע במאמר בנושא התקנת Apigee hybrid באמצעות Helm.
מתקינים את התרשים:
helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \ --namespace APIGEE_NAMESPACE \ --atomic \ --set envgroup=ENV_GROUP \ -f OVERRIDES_FILE
- כדי לוודא שהסודות של Kubernetes נוצרו בהצלחה, משתמשים בפקודה הבאה:
kubectl -n apigee get secrets | grep MY_HYBRID_PROJECT-ENV_GROUP
הפלט של הפקודה הזו צריך להראות:
MY_HYBRID_PROJECT-ENV_GROUP Opaque 2 7s
אם הבעיה נמשכת, עוברים אל Must Gather Diagnostic Information.
הסיבה: אישור SSL בפורמט שגוי
אבחון
קודם כל, מוודאים שקובץ האישור הוא קובץ .PEM. כדי לבדוק אם אישור ה-SSL בפורמט הנכון נטען ל-apigee-ingressgateway, פועלים לפי השלבים הבאים.
אם הגדרתם TLS חד-כיווני באמצעות זוג מפתחות/אישור כמו שמתואר באפשרות 1: זוג מפתחות/אישור, מריצים את הפקודה:
openssl x509 -in $CERT_FILE -text -noout
פלט לדוגמה (ללא שגיאות):
Certificate:
Data:
Version: 1 (0x0)
Serial Number: 1 (0x1)
Signature Algorithm: sha1WithRSAEncryption
Issuer: C = US, O = xyz, OU = abc, CN = INTERIM-CN
Validity
Not Before: Dec 18 09:40:23 2023 GMT
Not After : May 1 09:40:23 2025 GMT
Subject: C = US, O = xyz, OU = abc, CN = shrey.example.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (2048 bit)
Modulus:
Trimmed
Exponent: 65537 (0x10001)
Signature Algorithm: sha1WithRSAEncryption
Trimmedאם הגדרתם TLS חד-כיווני באמצעות סוד של Kubernetes כמו שמתואר באפשרות 2: סוד של Kubernetes, מריצים את הפקודה:
kubectl -n apigee get secret <$SECRET_NAME> -o jsonpath='{.data.cert}'| base64 -d > certfile ;
openssl x509 -in certfile -text -noout
kubectl -n apigee get secret <$SECRET_NAME> -o jsonpath='{.data.cert}'| base64 -d | openssl x509 -noout -textפלט לדוגמה (ללא שגיאות):
Certificate:
Data:
Version: 1 (0x0)
Serial Number: 1 (0x1)
Signature Algorithm: sha1WithRSAEncryption
Issuer: C = US, O = xyz, OU = abc, CN = INTERIM-CN
Validity
Not Before: Dec 18 09:40:23 2023 GMT
Not After : May 1 09:40:23 2025 GMT
Subject: C = US, O = xyz, OU = abc, CN = shrey.example.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (2048 bit)
Modulus:
Trimmed
Exponent: 65537 (0x10001)
Signature Algorithm: sha1WithRSAEncryption
Trimmedאם הפלט של הפקודה שלמעלה נראה כך:
unable to load certificate 136613728412992:error:0D078095:asn1 encoding routines:asn1_item_embed_d2i:sequence not constructed:../crypto/asn1/tasn_dec.c:321:Type=X509 136613728412992:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:../crypto/pem/pem_oth.c:33:
לשגיאות כמו
error loading certificates 8360934016:error:09FFF066:PEM routines:CRYPTO_internal:bad end line
מידע נוסף זמין בקטע רזולוציה.
רזולוציה
השגיאות עשויות להיות שונות בהתאם לשגיאת הפורמט בקובץ האישור. אם צריך, מתקנים את השגיאה באישור.
אם הפלט מציג את האישור במקום שגיאה, יכול להיות שהסיבה היא שמפתחות ה-SSL לא תואמים לאישור ה-SSL.
הגורם: מפתחות ה-SSL לא תואמים לאישור ה-SSL
אבחון
אם הגדרתם TLS חד-כיווני באמצעות זוג אישורים/מפתחות כמו שמתואר ב אפשרות 1: זוג מפתחות/אישורים, מריצים את הפקודה:
diff -q <(openssl rsa -noout -modulus -in $KEY_FILE ) <(openssl x509 -noout -modulus -in $CERT_FILE)
פלט לדוגמה (ללא שגיאות):
diff -q <(openssl rsa -noout -modulus -in my_server.key ) <(openssl x509 -noout -modulus -in my_server.pem) <No output>
אם הגדרתם TLS חד-כיווני באמצעות סוד Kubernetes כמו שמתואר באפשרות 2: סוד Kubernetes, מריצים את הפקודה:
diff -q <(kubectl -n apigee get secrets $SECRET_NAME -o jsonpath='{.data.key}'| base64 -d | openssl rsa -noout -modulus) <(kubectl -n apigee get secrets $SECRET_NAME -o jsonpath='{.data.cert}'| base64 -d | openssl x509 -noout -modulus)פלט לדוגמה (ללא שגיאות):
diff -q <(kubectl -n apigee get secrets my-apigee-hybrid-env-grp -o jsonpath='{.data.key}'| base64 -d | openssl rsa -noout -modulus) <(kubectl -n apigee get secrets my-apigee-hybrid-env-grp -o jsonpath='{.data.cert}'| base64 -d | openssl x509 -noout -modulus)
<No output>אם הפלט של הפקודה שלמעלה מציג שגיאה כמו:
unable to load Private Key 133504499987776:error:09091064:PEM routines:PEM_read_bio_ex:bad base64 decode:../crypto/pem/pem_lib.c:949: Files /dev/fd/63 and /dev/fd/62 differ
אז מפתחות ה-SSL לא תואמים לאישור ה-SSL, וצריך לעיין בקטע פתרון.
רזולוציה
חשוב לוודא שאתם מספקים את המפתחות הפרטיים הנכונים ואת אישורי ה-SSL התואמים שלהם. צריך לפתור בעיות שקשורות למפתח הפרטי ולאישור ה-SSL.
אם לא מוצגת פלט של הפקודה, אישור ה-SSL והמפתח של ה-SSL תואמים.
איסוף פרטי אבחון
אם הבעיה נמשכת אחרי שמבצעים את ההוראות בדף הזה, צריך לאסוף את פרטי האבחון הבאים ולשלוח אותם לתמיכה של Apigee:
- הפלט המפורט המלא
curlשבו מופיעה השגיאה. - מצלמים צילום מסך של
tcpdumpבמחשב שבו מוצגות השגיאות, מסירים ממנו מידע רגיש וכתובות IP ומשתפים אותו. - אחרי התייעצות עם צוות הרשת, צריך להכין את הטופולוגיה המלאה של הרשת ואת זרימת הנתונים ברשת כדי לשתף אותם עם צוות התמיכה של Apigee.