שימוש באישורי TLS משלכם

כאן מוסבר איך להגדיר את 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:

  1. פותחים טרמינל ועוברים לספרייה שבה נמצאים אישורי ה-TLS.

  2. משתמשים בפקודה הבאה כדי ליצור סוד שבו מאוחסנים האישורים:

    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 מחליפים בשם של הקובץ שמכיל את האישור הציבורי.

עכשיו אפשר להגדיר את שער הכניסה כך שישתמש בסוד שיצרתם זה עתה עבור אישור ה-TLS.

הגדרת שער הכניסה לשימוש באישורים שלכם

משנים את שער הכניסה של Cloud Service Mesh כדי להשתמש בסוד שיצרתם לאישורי ה-TLS:

  1. פותחים את קובץ ה-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
    
  2. כדי להגדיר את שער הכניסה כך שישתמש בסוד, מוסיפים את המאפיינים 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, אתם יכולים לציין באיזה סוד כל שירות משתמש.

      לדוגמה

  3. שומרים את השינויים.

עכשיו אפשר להשתמש בפרוטוקול 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