בדף הזה מוסבר איך להפעיל יציאת Secure Sockets Layer (SSL) כשפורסים את Extensible Service Proxy (ESP) באמצעות Google Kubernetes Engine, Kubernetes או Compute Engine. במקרים מסוימים, כדאי להפעיל יציאת SSL בשירות Endpoints שפרסתם. לדוגמה, אם אתם משתמשים בתכונת הטרנסקוד של gRPC, יכול להיות שתרצו שהשירות שלכם יקבל בקשות HTTP 1.1 ו-gRPC באותו פורט.
לפני שמתחילים, חשוב לעיין במדריכים לסוג השירות ולסביבה שבחרתם, ולוודא שאתם יודעים איך לפרוס את ESP בלי SSL.
הגדרת מפתחות ואישורים של SSL
כדי להגדיר את יציאת ה-SSL לטיפול בבקשות HTTPS, פועלים לפי השלבים הבאים:
בודקים שקובץ מפתח ה-SSL נקרא
nginx.keyוקובץ האישור נקראnginx.crt. לצורך בדיקה, אפשר ליצורnginx.keyו-nginx.certבחתימה עצמית באמצעות OpenSSL עם הפקודה הבאה:openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout ./nginx.key -out ./nginx.crt
מציינים גם את
CNוגם אתsubjectAltNameבאישור השרת. הערך של המאפיינים האלה צריך להיות זהה ל-DNS או ל-IP שמשמשים את הלקוחות כדי להתקשר לשירות שלכם. אחרת, לחיצת היד של ה-SSL תיכשל.
הפעלת SSL עבור ESP ב-Kubernetes
כדי להפעיל את יציאת ה-SSL עבור ESP ב-Kubernetes:
יוצרים סוד של Kubernetes עם מפתח ואישור SSL:
kubectl create secret generic nginx-ssl \ --from-file=./nginx.crt --from-file=./nginx.key
עורכים את קובצי התצורה של Kubernetes, למשל
esp_echo_gke.yaml, כמו שמוצג בקטע הקוד הבא:הערה: בדוגמה להגדרה מוצגות השורות שצריך לערוך. כדי לפרוס את הקובץ ב-Cloud Endpoints, צריך את קובץ התצורה המלא.
מעתיקים את הסודות של Kubernetes שיצרתם כנפחים, לפי ההוראות בדף בנושא נפחים ב-Kubernetes.
מפעילים את ESP כמו שמתואר במאמר ציון אפשרויות הפעלה ל-ESP, אבל מוסיפים את דגל ההפעלה
--ssl_portכדי להפעיל את יציאת ה-SSL. (הערה: יציאת ה-SSL שמוגדרת כברירת מחדל היא 443).מפעילים את השירות עם קובץ התצורה המעודכן של Kubernetes באמצעות
kubectl.kubectl apply -f esp_echo_gke.yaml
עדכון אישורי SSL
חשוב לעדכן את אישורי ה-SSL מדי פעם. כדי לעדכן את אישורי ה-SSL, צריך לבצע את השלבים הבאים:
- יוצרים אישורים חדשים, כמו שמתואר בשלב 1 למעלה.
- מטמיעים את האישורים החדשים בסודות של Kubernetes, כמו שמתואר בשלב 3 למעלה.
- מעדכנים את פריסת ה-ESP Kubernetes, כמו שמתואר בשלב 5 למעלה.
הפעלת SSL עבור ESP ב-Compute Engine
כדי להפעיל SSL ב-Compute Engine, קודם מעתיקים את הקבצים nginx.key ו-nginx.crt לתיקייה /etc/nginx/ssl של מופע Compute Engine, באמצעות השלבים הבאים:
מריצים את הפקודה הבאה ומחליפים את INSTANCE_NAME בשם של מכונת Compute Engine:
gcloud compute scp nginx.* INSTANCE-NAME
מתחברים למופע באמצעות
ssh.gcloud compute ssh INSTANCE-NAME
בתיבה של מכונת ה-VM של המופע, יוצרים את הספרייה ומעתיקים אליה את הקבצים:
sudo mkdir -p /etc/esp/sslsudo cp server.* /etc/esp/ssl/פועלים לפי ההוראות לסוג השירות כדי לבצע פריסה באמצעות Docker. כשמריצים את קובץ ה-Docker של ESP, משתמשים בפקודה הזו:
sudo docker run --name=esp \ --detach \ --publish=443:443 \ --net=esp_net \ --volume=/etc/nginx/ssl:/etc/nginx/ssl \ --link=echo:echo \ gcr.io/endpoints-release/endpoints-runtime:1 \ --service=SERVICE_NAME \ --rollout_strategy=managed \ --backend=echo:8080 \ --ssl_port=443
בהשוואה לפקודה
docker runשאינה SSL, הגרסה של הפקודה שכוללת SSL יוצרת הגדרה שונה. לדוגמה, פקודת ה-SSL:- מבצעים Mount לתיקייה עם קובצי המפתח וה-CRT אל הקונטיינר באמצעות
--volume - השימוש ב-
--ssl_port=443נועד להורות ל-ESP להפעיל SSL ביציאה443. - משנה את דגל מיפוי היציאות
--publish.
- מבצעים Mount לתיקייה עם קובצי המפתח וה-CRT אל הקונטיינר באמצעות
עדכון אישורי SSL
חשוב לעדכן את אישורי ה-SSL מדי פעם. כדי לעדכן את אישורי ה-SSL, צריך לבצע את השלבים הבאים:
- יוצרים אישורים חדשים ומעתיקים אותם למכונות וירטואליות, כמו שמתואר בשלב 1 למעלה.
- מעתיקים את האישורים החדשים לספרייה
/etc/esp/ssl, כמו שמתואר בשלב 3 למעלה. - עוצרים ומפעילים מחדש את מאגר ה-ESP באמצעות הפקודה
sudo docker run, כפי שמתואר בשלב 4 למעלה.
בדיקת יציאת ה-SSL
כדי להקל על הבדיקה, מגדירים את משתני הסביבה הבאים:
מגדירים את IP_ADDRESS לכתובת ה-IP של מכונת Compute Engine עם אישור ה-SSL החדש.
מגדירים את ENDPOINTS_KEY למפתח API תקין.
אחרי שמפעילים את יציאת ה-SSL, אפשר להשתמש ב-HTTPS כדי לשלוח בקשות ל-Extensible Service Proxy. אם האישור שלכם הוא בחתימה עצמית, משתמשים ב--k כדי להפעיל את האפשרות הלא מאובטחת ב-curl:
curl -k -d '{"message":"hello world"}' -H "content-type:application/json" \
https://IP_ADDRESS:443/echo?key=ENDPOINTS_KEYלחלופין, אפשר ליצור את האישור בפורמט pem ולהשתמש באפשרות --cacert כדי להשתמש באישור עם חתימה עצמית ב-curl, כמו שמוצג בהמשך:
openssl x509 -in nginx.crt -out nginx.pem -outform PEMcurl --cacert "./nginx.pem" -d '{"message":"hello world"}' -H "content-type:application/json" \ https://IP_ADDRESS:443/echo?key=ENDPOINTS_KEY