כאן מוסבר איך להגדיר את Knative Serving לשימוש באישור SSL/TLS משלכם.
אפשר גם להשתמש בתכונה אישורי TLS מנוהלים, שיוצרת ומחדשת באופן אוטומטי אישורי TLS דרך Let's Encrypt
כדי להשתמש באישורים משלכם, אתם מאחסנים את אישורי ה-TLS ב-Kubernetes Secret ואז מגדירים את שער הכניסה של Cloud Service Mesh כך שישתמש ב-Secret הזה.
לפני שמתחילים
- במסגרת ההנחיות האלה, אנחנו מניחים שכבר קיבלתם את אישורי ה-TLS שלכם.
- צריך להגדיר דומיין מותאם אישית. פרטים נוספים זמינים במאמר בנושא מיפוי דומיינים מותאמים אישית.
- צריך להגדיר כל אחד משירותי Knative serving שמשתמשים בשער הכניסה כדי להציג תעבורה חיצונית. אם השירותים האלה שפונים החוצה לא מוגדרים להשתמש באישור ה-TLS שלכם, הם לא יוכלו לאמת חיבור HTTPS ולכן לא יגיעו למצב
ready.
אחסון אישורי TLS ב-Kubernetes Secret
כדי לאחסן את האישורים ב-Secret:
פותחים טרמינל ועוברים לספרייה שבה נמצאים אישורי ה-TLS.
משתמשים בפקודה הבאה כדי ליצור סוד שבו מאוחסנים האישורים:
kubectl create --namespace INGRESS_NAMESPACE secret tls SECRET_NAME \ --key PRIVATE_KEY.pem \ --cert FULL_CHAIN.pem
מחליפים את:
- INGRESS_NAMESPACE עם מרחב השמות של שירות הכניסה,
istio-ingressgateway. אם התקנתם את Cloud Service Mesh באמצעות הגדרת ברירת המחדל, צריך לציין את מרחב השמותistio-system. - SECRET_NAME בשם שרוצים להשתמש בו בשביל סוד Kubernetes.
- PRIVATE_KEY.pem מחליפים בשם של הקובץ שמכיל את המפתח הפרטי של האישור.
- FULL_CHAIN.pem מחליפים בשם של הקובץ שמכיל את האישור הציבורי.
- INGRESS_NAMESPACE עם מרחב השמות של שירות הכניסה,
עכשיו אפשר להגדיר את שער הכניסה כך שישתמש בסוד שיצרתם זה עתה עבור אישור ה-TLS.
הגדרת שער הכניסה לשימוש באישורים שלכם
משנים את שער הכניסה של Cloud Service Mesh כדי להשתמש בסוד שיצרתם לאישורי ה-TLS:
פותחים את קובץ ה-YAML של שער הכניסה במצב עריכה באמצעות הפקודה הבאה:
kubectl edit gateway knative-ingress-gateway --namespace knative-serving
דוגמה להגדרת ברירת המחדל של שער הכניסה:
apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: ... # other skipped configuration ... spec: selector: istio: ingressgateway servers: - hosts: - '*' port: name: http number: 80 protocol: HTTPכדי להגדיר את שער הכניסה כך שישתמש בסוד, מוסיפים את המאפיינים
hosts, portו-tlsלקובץ ה-YAML הקיים.כדי להגדיר את כל השירותים כך שישתמשו באותו סוד: מוסיפים את הקוד הבא להגדרות ה-YAML ומציינים את
"*"כערך של מאפייןhosts:... # other skipped configuration ... - hosts: - "*" port: name: https number: 443 protocol: HTTPS tls: mode: SIMPLE credentialName: SECRET_NAMEמחליפים את SECRET_NAME בשם הסוד שיצרתם.
כדי להגדיר כל אחד מהשירותים בנפרד: מוסיפים את הטקסט הבא להגדרות ה-YAML ומציינים את הערכים של מאפייני
hostsבאמצעות השם ומרחב השמות של השירות:לכל שירות מציינים ערכים למאפיינים
hosts,portו-tls:... # other skipped configuration ... - hosts: - SERVICE_NAME.SERVICE_NAMESPACE.CUSTOM_DOMAIN port: number: 443 name: https-SERVICE_NAME protocol: HTTPS tls: mode: SIMPLE credentialName: SECRET_NAMEמחליפים את:
- SERVICE_NAME מחליפים בשם של השירות של Knative. צריך להגדיר כל שירות בנפרד שמשתמש בשער הכניסה כדי להעביר תנועה חיצונית.
- SERVICE_NAMESPACE בשם של מרחב השמות שבו השירות פועל.
- CUSTOM_DOMAIN עם הדומיין המותאם אישית שהגדרתם בשירות.
- SECRET_NAME בשם הסוד שרוצים שהשירות ישתמש בו. אם יצרתם כמה סודות עבור קבוצות שונות של אישורי TLS, אתם יכולים לציין באיזה סוד כל שירות משתמש.
שומרים את השינויים.
עכשיו אפשר להשתמש בפרוטוקול HTTPS כדי לגשת לשירותי Knative serving שנפרסו.
דוגמאות
- הגדרת כל השירותים:
בדוגמה הזו מוסבר איך להגדיר את כל השירותים כך שישתמשו בסוד
TLSsecret:apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: ... # other skipped configuration ... spec: selector: istio: ingressgateway servers: - hosts: - "*" port: name: http number: 80 protocol: HTTP - hosts: - "*" port: name: https number: 443 protocol: HTTPS tls: mode: SIMPLE credentialName: TLSsecret- הגדרת שירותים ספציפיים:
בדוגמה הזו מוסבר איך להגדיר בנפרד את שלושת השירותים שמשרתים תנועה באינטרנט:
apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: ... # other skipped configuration ... spec: selector: istio: ingressgateway servers: - hosts: - "*" port: name: http number: 80 protocol: HTTP - hosts: - prodservice.prodnamespace.my-custom-domain.com port: number: 443 name: https-prodservice protocol: HTTPS tls: mode: SIMPLE credentialName: TLSsecret - hosts: - experiment.namespace.my-custom-domain.com port: number: 443 name: https-experiment protocol: HTTPS tls: mode: SIMPLE credentialName: TLSsecret - hosts: - fallbackservice.anothernamespace.my-custom-domain.com port: number: 443 name: https-fallbackservice protocol: HTTPS tls: mode: SIMPLE credentialName: anotherTLSsecret