העברת הגדרות של מאזן עומסים F5 BIG-IP

‫1.29: תצוגה מקדימה
‫1.28: לא זמין

במאמר הזה מוסבר איך להעביר את הגדרות התצורה של השילוב של מאזן העומסים F5 BIG-IP למצב איזון עומסים ידני באשכולות בגרסה 1.29. אם האשכולות שלכם הם בגרסה 1.30 ומעלה, מומלץ לפעול לפי ההוראות במאמר תכנון העברת אשכול לתכונות מומלצות.

שימוש ב-F5 BIG-IP במצב איזון עומסים ידני מאפשר לכם לשדרג את סוכני F5 באופן עצמאי בלי להשפיע על הפונקציונליות של מאזן העומסים של F5 או על שירותי Kubernetes. אם תעברו להגדרה ידנית, תוכלו לקבל עדכונים ישירות מ-F5 כדי להבטיח ביצועים ואבטחה אופטימליים.

ההעברה הזו נדרשת בנסיבות הבאות:

  • אתם רוצים להפעיל תכונות חדשות כמו Controlplane V2 וגם צריכים גישה ל-F5.

  • אתם צריכים יכולות שזמינות בגרסה של BIG-IP CIS Container Ingress Services (CIS) Controller שגבוהה מגרסה v1.14.

אם אף אחת מהנסיבות שלמעלה לא רלוונטית לגביכם, תוכלו להמשיך להשתמש בהגדרה החבילה לאיזון עומסים של F5 BIG-IP.

בכל מקרה, אנחנו ממשיכים לתמוך רשמית ב-F5 כפתרון לאיזון עומסים.

תמיכה במאזן העומסים F5 BIG-IP

אנחנו תומכים בשימוש ב-F5 BIG-IP עם סוכני איזון עומסים, שכוללים את שני הבקרים הבאים:

  • ‫F5 Controller (קידומת ה-pod: ‏ load-balancer-f5): מבצע התאמה בין שירותי Kubernetes מסוג LoadBalancer לבין פורמט F5 Common Controller Core Library (CCCL) ConfigMap.

  • ‫F5 BIG-IP CIS Controller v1.14 (pod prefix: k8s-bigip-ctlr-deployment): מתרגם ConfigMaps להגדרות של מאזן העומסים F5.

הסוכנים האלה מייעלים את ההגדרה של מאזני עומסים של F5 באשכול Kubernetes. כשיוצרים שירות מסוג LoadBalancer, הבקרים מגדירים באופן אוטומטי את מאזן העומסים F5 להפניית תעבורה לצמתי האשכול.

עם זאת, לפתרון המשולב יש מגבלות:

  • הגמישות של Service API מוגבלת. אי אפשר להגדיר את בקר BIG-IP איך שרוצים, או להשתמש בתכונות מתקדמות של F5. חברת F5 כבר מספקת תמיכה משופרת ב-Service API באופן מקורי.

  • ההטמעה משתמשת ב-API של CCCL ConfigMap מדור קודם וב-CIS בגרסה 1.x. עם זאת, חברת F5 מספקת עכשיו את AS3 ConfigMap API החדש יותר ואת 2.x CIS.

הבקר של CIS בחבילת Google Distributed Cloud נשאר בגרסה v1.14 בגלל בעיות תאימות להנחיות השדרוג של F5 ל-CIS v2.x. לכן, כדי לאפשר לכם גמישות בטיפול בנקודות חולשה באבטחה ובגישה לתכונות העדכניות, אנחנו מעבירים את סוכני F5 מלהיות רכיבים בחבילה להתקנה עצמאית. אם תבצעו מיגרציה, תוכלו להמשיך להשתמש בסוכנים הקיימים ללא הפרעה, והשירותים שיצרתם בעבר ימשיכו לפעול.

במקרים של אשכולות חדשים של איזון עומסים ידני עם F5 כפתרון לאיזון עומסים, צריך להתקין את הבקרים באופן עצמאי. באופן דומה, אם האשכול שלכם הועבר מ-F5 בחבילה ואתם רוצים להשתמש בגרסה חדשה יותר של CIS Controller, אתם צריכים להתקין את הבקרים בעצמכם.

דרישות

אלה הדרישות להעברה:

  • גרסת אשכול האדמין וכל אשכולות המשתמשים צריכה להיות 1.29 ומעלה.

  • אתם צריכים להשתמש בכתובות IP סטטיות לצמתים של אדמין ושל משתמשים באשכול. סוג כתובת ה-IP מוגדר בשדה network.ipMode.type, ואי אפשר לשנות אותו. אם השדה הזה מוגדר ל-DHCP, אי אפשר להעביר את האשכולות.

עדכון קובץ התצורה של אשכול המשתמשים

מבצעים את השינויים הבאים בקובץ התצורה של אשכול המשתמשים:

  1. שינוי של loadBalancer.kind ל-"ManualLB".

  2. הערכים בשדות loadBalancer.vips.controlPlaneVIP ו-loadBalancer.vips.ingressVIP צריכים להיות זהים.

  3. מגדירים את nodePort שמשמש לתעבורת HTTP שנשלחת ל-VIP של הכניסה.

    1. קבלת הערך הנוכחי של nodePort ב-HTTP:

      kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
          get svc istio-ingress -n gke-system -oyaml | grep http2 -A 1

      מחליפים את USER_CLUSTER_KUBECONFIG בנתיב של קובץ ה-kubeconfig של אשכול המשתמשים.

    2. מוסיפים את הערך מהפקודה הקודמת לשדה loadBalancer.manualLB.ingressHTTPNodePort, לדוגמה:

      loadBalancer:
        manualLB:
          ingressHTTPNodePort: 30243
  4. מגדירים את nodePort שמשמש לתעבורת HTTPS שנשלחת ל-VIP של Ingress:

    1. קבלת הערך הנוכחי של HTTPS nodePort:

      kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
          get svc istio-ingress -n gke-system -oyaml | grep https -A 1
    2. מוסיפים את הערך מהפקודה הקודמת לשדה loadBalancer.manualLB.ingressHTTPSNodePort, לדוגמה:

      loadBalancer:
        manualLB:
          ingressHTTPSNodePort: 30879
  5. הגדרת nodePort לשרת Kubernetes API:

    1. מקבלים את הערך הנוכחי של nodePort עבור שרת ה-API של Kubernetes:

      kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
          get svc kube-apiserver -n USER_CLUSTER_NAME -oyaml | grep kube-apiserver-port -A 1

      מחליפים את מה שכתוב בשדות הבאים:

      • ADMIN_CLUSTER_KUBECONFIG עם הנתיב של קובץ ה-kubeconfig של אשכול הניהול.

      • USER_CLUSTER_NAME: שם אשכול המשתמשים.

    2. מוסיפים את הערך מהפקודה הקודמת לשדה loadBalancer.manualLB.controlPlaneNodePort, לדוגמה:

      loadBalancer:
        manualLB:
          controlPlaneNodePort: 30968
  6. מגדירים את nodePort לשרת הקישוריות:

    1. כדי לקבל את הערך הנוכחי של nodePort עבור שרת הקישוריות:

      kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
          get svc kube-apiserver -n USER_CLUSTER_NAME -oyaml | grep konnectivity-server-port -A 1
    2. מוסיפים את הערך מהפקודה הקודמת לשדה loadBalancer.manualLB.konnectivityServerNodePort, לדוגמה:

      loadBalancer:
        manualLB:
          konnectivityServerNodePort: 30563
  7. מוחקים את כל הקטע loadBalancer.f5BigIP.

עדכון אשכול המשתמשים

מריצים את הפקודה הבאה כדי להעביר את האשכול:

gkectl update cluster \
    --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    --config USER_CLUSTER_CONFIG

מחליפים את מה שכתוב בשדות הבאים:

  • ADMIN_CLUSTER_KUBECONFIG: הנתיב לקובץ kubeconfig של אשכול האדמין.

  • USER_CLUSTER_CONFIG: הנתיב של קובץ התצורה של אשכול המשתמשים.

עדכון קובץ ההגדרה של אשכול הניהול

מבצעים את השינויים הבאים בקובץ התצורה של אשכול האדמין:

  1. שינוי של loadBalancer.kind ל-"ManualLB".

  2. משאירים את אותו הערך בשדה loadBalancer.vips.controlPlaneVIP.

  3. בודקים את הערך של השדה adminMaster.replicas. אם הערך הוא 3, אשכול האדמין הוא בעל זמינות גבוהה (HA). אם הערך הוא 1, אשכול האדמין הוא לא HA.

  4. מבצעים את השלבים הבאים רק עבור אשכולות אדמין שאינם HA:

    1. מקבלים את הערך של nodePort עבור שרת ה-API של Kubernetes:

      kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
          get svc kube-apiserver -n kube-system -oyaml | grep nodePort

      מחליפים את ADMIN_CLUSTER_KUBECONFIG בנתיב של קובץ ה-kubeconfig של אשכול האדמין.

    2. מוסיפים את הערך מהפקודה הקודמת לשדה loadBalancer.manualLB.controlPlaneNodePort, לדוגמה:

      loadBalancer:
        manualLB:
          controlPlaneNodePort: 30968
  5. מריצים את הפקודה הבאה כדי לראות אם יש תוספים nodePort:

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
        get deploy monitoring-operator -n kube-system -oyaml | grep admin-ingress-nodeport

    אם הפלט של הפקודה הקודמת הוא ערך, מוסיפים אותו לשדה loadBalancer.manualLB.addonsNodePort, לדוגמה:

    loadBalancer:
      manualLB:
        addonsNodePort: 31405
  6. מוחקים את כל הקטע loadBalancer.f5BigIP.

עדכון אשכול האדמין

מריצים את הפקודה הבאה כדי לעדכן את האשכול:

gkectl update admin \
    --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    --config ADMIN_CLUSTER_CONFIG

מחליפים את מה שכתוב בשדות הבאים:

  • ADMIN_CLUSTER_KUBECONFIG: הנתיב לקובץ kubeconfig של אשכול האדמין.

  • ADMIN_CLUSTER_CONFIG: הנתיב של קובץ התצורה של אשכול האדמין.

אימות של משאבי F5 מדור קודם

אחרי שמעדכנים את האשכולות לשימוש באיזון עומסים ידני, התנועה לאשכולות לא מופרעת כי משאבי F5 הקיימים עדיין קיימים. אפשר לראות את זה על ידי הפעלת הפקודה הבאה:

kubectl --kubeconfig CLUSTER_KUBECONFIG \
  api-resources --verbs=list -o name   | xargs -n 1 kubectl --kubeconfig CLUSTER_KUBECONFIG get --show-kind --ignore-not-found --selector=onprem.cluster.gke.io/legacy-f5-resource=true -A

מחליפים את CLUSTER_KUBECONFIG בנתיב של קובץ ה-kubeconfig של אשכול האדמין או של אשכול המשתמש.

הפלט הצפוי אמור להיראות כך:

אשכול אדמין:

Warning: v1 ComponentStatus is deprecated in v1.19+
NAMESPACE     NAME                        TYPE     DATA   AGE
kube-system   secret/bigip-login-xt697x   Opaque   4      13h
NAMESPACE     NAME                              SECRETS   AGE
kube-system   serviceaccount/bigip-ctlr         0         13h
kube-system   serviceaccount/load-balancer-f5   0         13h
NAMESPACE     NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
kube-system   deployment.apps/k8s-bigip-ctlr-deployment   1/1     1            1           13h
kube-system   deployment.apps/load-balancer-f5            1/1     1            1           13h
NAME                                                                                ROLE                                       AGE
clusterrolebinding.rbac.authorization.k8s.io/bigip-ctlr-clusterrole-binding         ClusterRole/bigip-ctlr-clusterrole         13h
clusterrolebinding.rbac.authorization.k8s.io/load-balancer-f5-clusterrole-binding   ClusterRole/load-balancer-f5-clusterrole   13h
NAME                                                                 CREATED AT
clusterrole.rbac.authorization.k8s.io/bigip-ctlr-clusterrole         2024-03-25T04:37:34Z
clusterrole.rbac.authorization.k8s.io/load-balancer-f5-clusterrole   2024-03-25T04:37:34Z

אשכול משתמשים:

Warning: v1 ComponentStatus is deprecated in v1.19+
NAMESPACE     NAME                        TYPE     DATA   AGE
kube-system   secret/bigip-login-sspwrd   Opaque   4      14h
NAMESPACE     NAME                              SECRETS   AGE
kube-system   serviceaccount/bigip-ctlr         0         14h
kube-system   serviceaccount/load-balancer-f5   0         14h
NAMESPACE     NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
kube-system   deployment.apps/k8s-bigip-ctlr-deployment   1/1     1            1           14h
kube-system   deployment.apps/load-balancer-f5            1/1     1            1           14h
NAME                                                                                ROLE                                       AGE
clusterrolebinding.rbac.authorization.k8s.io/bigip-ctlr-clusterrole-binding         ClusterRole/bigip-ctlr-clusterrole         14h
clusterrolebinding.rbac.authorization.k8s.io/load-balancer-f5-clusterrole-binding   ClusterRole/load-balancer-f5-clusterrole   14h
NAME                                                                 CREATED AT
clusterrole.rbac.authorization.k8s.io/bigip-ctlr-clusterrole         2024-03-25T05:16:40Z
clusterrole.rbac.authorization.k8s.io/load-balancer-f5-clusterrole   2024-03-25T05:16:41Z

בדיקת מאזן העומסים

אחרי ההעברה, לא צריך לשנות הגדרות במאזן העומסים כי שמרתם על אותם ערכים של כתובות VIP ושל nodePort. בטבלאות הבאות מפורטים המיפויים מכתובות VIP לכתובות IP של צמתים:nodePort.

אשכול אדמין HA

תנועה לצמתי מישור הבקרה

‫Google Distributed Cloud מטפל אוטומטית באיזון העומסים של תעבורת מישור הבקרה עבור אשכולות אדמין עם זמינות גבוהה. למרות שלא צריך להגדיר מיפוי במאזן העומסים, חובה לציין כתובת IP בשדה loadBalancer.vips.controlPlaneVIP.

תנועה לשירותים בצמתי התוסף

אם באשכול האדמין היה ערך ל-addonsNodePort, אמור להיות מיפוי לכתובות ה-IP ולערך nodePort של התנועה לשירותים בצמתים של התוסף:

  • ‫(addonsVIP:8443) -> (NODE_IP_ADDRESSES:addonsNodePort)

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

אשכול אדמין ללא זמינות גבוהה

תנועה במישור הבקרה

הטבלה הבאה מציגה את המיפוי לכתובת ה-IP ולערך nodePort של צומת מישור הבקרה:

  • ‫(controlPlaneVIP:443) -> (NODE_IP_ADDRESSES:controlPlaneNodePort)

צריך להגדיר את המיפוי הזה לכל הצמתים באשכול האדמין, גם לצומת של מישור הבקרה וגם לצמתים של התוספים.

תנועה לשירותים בצמתי התוסף

אם באשכול האדמין היה ערך ל-addonsNodePort, אמורה להיות לכם המיפוי הבא לכתובות ה-IP ולערכים של nodePort בשירותים שפועלים בצמתי תוספים:

  • ‫(addonsVIP:8443) -> (NODE_IP_ADDRESSES:addonsNodePort)

צריך להגדיר את המיפוי הזה לכל הצמתים באשכול האדמין, גם לצומת של מישור הבקרה וגם לצמתים של התוספים.

אשכול משתמשים

תנועה במישור הבקרה

הטבלה הבאה מציגה את המיפוי לכתובות ה-IP ולערכי nodePort של תנועה במישור הבקרה:

  • ‫(controlPlaneVIP:443) -> (NODE_IP_ADDRESSES:controlPlaneNodePort)
  • ‫(controlPlaneVIP:8132) -> (NODE_IP_ADDRESSES:konnectivityServerNodePort)

צריך למפות את כל הצמתים באשכול האדמין, גם את הצמתים של מישור הבקרה של אשכול האדמין וגם את הצמתים של מישור הבקרה של אשכול המשתמשים.

תנועה במישור הנתונים

הטבלה הבאה מציגה את המיפוי לכתובות ה-IP ולערכי nodePort של תנועת מישור הנתונים:

  • ‫(ingressVIP:80) -> (NODE_IP_ADDRESSES:ingressHTTPNodePort)
  • ‫(ingressVIP:443) -> (NODE_IP_ADDRESSES:ingressHTTPSNodePort)