הגדרת כתובות IP חיצוניות ל-Google Distributed Cloud (תוכנה בלבד) ל-VMware באמצעות מאזני עומסים F5 BIG-IP

ההתקנה של Cloud Service Mesh שמוגדרת כברירת מחדל ב-Google Distributed Cloud (תוכנה בלבד) ל-VMware מניחה שכתובות IP חיצוניות מוקצות באופן אוטומטי לשירותי LoadBalancer. הדבר לא נכון לגבי Google Distributed Cloud (תוכנה בלבד) ל-VMware עם מאזני עומסים של F5 BIG-IP. לכן, צריך להקצות כתובת IP חיצונית אחת או יותר, בהתאם להגדרת Service mesh:

  • כתובת IP חיצונית אחת למשאב Cloud Service Mesh ingress Gateway, לדוגמה, השער שבו הלקוחות משתמשים כדי לגשת לעומסי העבודה שלכם מכל מקום באינטרנט.
  • כתובת IP חיצונית נוספת לאשכולות כדי לתקשר ביניהם אם הם נמצאים ברשתות שונות בתוך Service mesh. זה נקרא שער מזרח-מערב.

הגדרת כתובת ה-IP של שער הכניסה

כדי להגדיר כתובת IP חיצונית לשער הכניסה, פועלים לפי ההוראות באחד מהקטעים הבאים, בהתאם למצב איזון העומסים של Google Distributed Cloud (תוכנה בלבד) ל-VMware:

    מצב משולב

  1. מבצעים תיקון (patch) של ההגדרה של שירות istio-ingressgateway באמצעות כתובת ה-IP החיצונית של שער הכניסה:
    kubectl patch svc istio-ingressgateway -n istio-system --type='json' -p '[{"op": "add", "path": "/spec/loadBalancerIP", "value": "INGRESS_GATEWAY_IP"}]'
  2. מצב ידני

  3. כדי לראות את ההגדרה של שירות istio-ingressgateway במעטפת:
    kubectl get svc -n istio-system istio-ingressgateway -o yaml
    מוצגים כל הפורטים של השערים של Cloud Service Mesh. פלט הפקודה אמור להיראות כך:
      ...
      ports:
      - name: status-port
        nodePort: 30391
        port: 15020
        protocol: TCP
        targetPort: 15020
      - name: http2
        nodePort: 31380
        port: 80
        protocol: TCP
        targetPort: 80
      - name: https
        nodePort: 31390
        port: 443
        protocol: TCP
        targetPort: 443
      - name: tcp
        nodePort: 31400
        port: 31400
        protocol: TCP
        targetPort: 31400
      - name: https-kiali
        nodePort: 31073
        port: 15029
        protocol: TCP
        targetPort: 15029
      - name: https-prometheus
        nodePort: 30253
        port: 15030
        protocol: TCP
        targetPort: 15030
      - name: https-grafana
        nodePort: 30050
        port: 15031
        protocol: TCP
        targetPort: 15031
      - name: https-tracing
        nodePort: 31204
        port: 15032
        protocol: TCP
        targetPort: 15032
      - name: tls
        nodePort: 30158
        port: 15443
        protocol: TCP
        targetPort: 15443
      ...
  4. צריך לחשוף את הפורטים האלה דרך מאזן העומסים.

    לדוגמה, ליציאת השירות שנקראת http2 יש port 80 ו-nodePort 31380. נניח שכתובות הצמתים של אשכול המשתמשים הן ‫192.168.0.10, 192.168.0.11 ו-192.168.0.12, וכתובת ה-VIP של מאזן העומסים היא 203.0.113.1.

    מגדירים את מאזן העומסים כך שהתעבורה שנשלחת אל 203.0.113.1:80 תועבר אל 192.168.0.10:31380, 192.168.0.11:31380 או 192.168.0.12:31380. אפשר לבחור את יציאות השירות שרוצים לחשוף בכתובת ה-VIP הזו.

מוודאים שהוקצתה ל-ingress gateway כתובת IP חיצונית. יכול להיות שתהיה השהיה קלה שתחייב אתכם לחזור על הפקודה הזו עד שתראו את התוצאה הצפויה:

kubectl --context="${CTX_CLUSTER1}" get svc istio-ingressgateway -n istio-system

הפלט הצפוי:

NAME                    TYPE           CLUSTER-IP    EXTERNAL-IP    PORT(S)   AGE
istio-ingressgateway   LoadBalancer   10.80.6.124   34.75.71.237   ...       51s

הגדרת כתובת ה-IP של השער לתנועה אופקית

כדי להגדיר כתובת IP חיצונית לשער תעבורה אופקית, פועלים לפי ההוראות באחד מהקטעים הבאים, בהתאם למצב איזון העומסים ב-Google Distributed Cloud (תוכנה בלבד) ל-VMware:

    מצב משולב

  1. מבצעים תיקון (patch) בהגדרה של שירות istio-eastwestgateway באמצעות כתובת ה-IP החיצונית של השער east-west:
    kubectl patch svc istio-eastwestgateway -n istio-system --type='json' -p '[{"op": "add", "path": "/spec/loadBalancerIP", "value": "EAST_WEST_GATEWAY_IP"}]'
  2. מצב ידני

  3. כדי לראות את ההגדרה של שירות istio-eastwestgateway במעטפת:
    kubectl get svc -n istio-system istio-eastwestgateway -o yaml
    מוצגים כל הפורטים של השערים של Cloud Service Mesh. פלט הפקודה אמור להיראות כך:
      ports:
      - name: status-port
        nodePort: 31781
        port: 15021
        protocol: TCP
        targetPort: 15021
      - name: tls
        nodePort: 30498
        port: 15443
        protocol: TCP
        targetPort: 15443
      - name: tls-istiod
        nodePort: 30879
        port: 15012
        protocol: TCP
        targetPort: 15012
      - name: tls-webhook
        nodePort: 30336
        port: 15017
        protocol: TCP
        targetPort: 15017
      ...
  4. צריך לחשוף את הפורטים האלה דרך מאזן העומסים.

    לדוגמה, ליציאת השירות שנקראת http2 יש port 80 ו-nodePort 31380. נניח שכתובות הצמתים של אשכול המשתמשים הן ‫192.168.0.10, 192.168.0.11 ו-192.168.0.12, וכתובת ה-VIP של מאזן העומסים היא 203.0.113.1.

    מגדירים את מאזן העומסים כך שהתעבורה שנשלחת אל 203.0.113.1:80 תועבר אל 192.168.0.10:31380, 192.168.0.11:31380 או 192.168.0.12:31380. אפשר לבחור את יציאות השירות שרוצים לחשוף בכתובת ה-VIP הזו.

מוודאים שהוקצתה ל-east-west gateway כתובת IP חיצונית. יכול להיות שיהיה עיכוב קל ותצטרכו להריץ את הפקודה הזו שוב עד שתראו את התוצאה הצפויה:

kubectl --context="${CTX_CLUSTER1}" get svc istio-eastwestgateway -n istio-system

הפלט הצפוי:

NAME                    TYPE           CLUSTER-IP    EXTERNAL-IP    PORT(S)   AGE
istio-eastwestgateway   LoadBalancer   10.80.6.124   34.75.71.237   ...       51s

מה השלב הבא?