הגדרת HTTPS Ingress

אתם יכולים לאבטח את שער הכניסה באמצעות HTTPS על ידי שימוש ב-TLS פשוט, ולאפשר חיבורי HTTPS לדפי אינטרנט ספציפיים. בנוסף, אתם יכולים להפנות חיבורי HTTP ל-HTTPS.

פרוטוקול HTTPS יוצר ערוץ מאובטח ברשת לא מאובטחת, ומגן מפני התקפות מסוג MITM (אדם בתווך) ומצפין את התנועה בין הלקוח לשרת. כדי להכין שרת אינטרנט לקבלת חיבורי HTTPS, מנהל מערכת צריך ליצור אישור של מפתח ציבורי לשרת. כדי שדפדפן האינטרנט יקבל את האישור ללא אזהרה, הוא צריך להיות חתום על ידי רשות אישורים מהימנה.

עורכים את השער בשם external-gateway במרחב השמות kf באמצעות כלי העריכה המובנה של Kubernetes:

kubectl edit gateway -n kf external-gateway
  1. בהנחה שיש לכם אישור ומפתח לשירות, יוצרים סוד ב-Kubernetes עבור שער הכניסה. מוודאים ששם הסוד לא מתחיל ב-istio או ב-prometheus. בדוגמה הזו, הסוד נקרא myapp-https-credential.
  2. פחות מ-servers:
    1. מוסיפים קטע ליציאה 443.
    2. בקטע tls:, מגדירים את credentialName לשם של ה-Secret שיצרתם.
    3. בקטע hosts:, מוסיפים את שם המארח של השירות שרוצים לאבטח באמצעות HTTPS. אפשר להגדיר את זה לכל הדומיין באמצעות תו כללי לחיפוש (למשל *.example.com) או להגביל את זה רק לשם מארח אחד (למשל myapp.example.com).
  3. צריך להיות כבר קטע מתחת ל-servers: עבור HTTP ביציאה 80. אם רוצים שכל תעבורת הנתונים תגיע כ-HTTP, משאירים את הקטע הזה בהגדרת השער.
  4. כדי להפנות HTTP ל-HTTPS, מוסיפים את הערך httpsRedirect: true בקטע tls של שרת ה-HTTP. למידע נוסף, אפשר לעיין בתיעוד של Istio Gateway. שימו לב: אם מוסיפים את הקוד הזה לקטע שבו hosts מוגדר כ-*, המשמעות היא שכל התנועה מופנית ל-HTTPS. אם רוצים להפנות אוטומטית מ-HTTP ל-HTTPS רק לאפליקציה או לדומיין אחד, צריך להוסיף קטע HTTP נפרד שבו מציינים את ההפניה האוטומטית.

בדוגמה הבאה מוצג שער spec שמגדיר HTTPS עבור myapp.example.com ומפנה HTTP ל-HTTPS עבור המארח הזה:

spec:
  selector:
    istio: ingressgateway
  servers:
  - hosts:
    - myapp.example.com
    port:
      name: https
      number: 443
      protocol: HTTPS
    tls:
      credentialName: myapp-https-credential
      mode: SIMPLE
  - hosts:
    - myapp.example.com
    port:
      name: http-my-app
      number: 80
      protocol: HTTP
    tls:
      httpsRedirect: true
  - hosts:
    - '*'
    port:
      name: http
      number: 80
      protocol: HTTP