הגדרת שער קישוריות לרשת

במסמך הזה מוסבר איך להגדיר Network Connectivity Gateway לאשכול ב-Google Distributed Cloud.

לפעמים יש לכם פודים שפועלים באשכול שצריכים לתקשר עם עומסי עבודה שפועלים בענן וירטואלי פרטי (VPC). התקשורת הזו צריכה להיות מאובטחת. יכול להיות שאתם צריכים שהתקשורת הזו תתבצע ברשת שטוחה בלי להשתמש בשרת proxy. שער קישוריות לרשת מאפשר תקשורת מהסוג הזה.

Network Connectivity Gateway פועל כ-Pod באשכול. כפי שמוצג בתרשים הבא, הפתרון הזה מספק מנהרות IPsec לתעבורה מ-Pods באשכול למכונות וירטואליות ב-VPC. כש-Pod השער מקבל קידומות לרשתות משנה של VPC דרך סשן Border Gateway Protocol ‏ (BGP), הוא מגדיר העברה באמצעות Dataplane V2. כש-Pods אחרים שולחים תעבורה לכתובת עם אחד מהקידומות האלה, התעבורה מנותבת ל-Pod של השער. לאחר מכן, ה-Pod של השער מעביר את התנועה דרך מנהרת IPsec אלGoogle Cloud.

דיאגרמה של Network Connectivity Gateway ל-Google Distributed Cloud

שער קישוריות לרשת לא תומך בתכונות וביכולות הבאות:

  • ‫IPv6 ל-HA VPN (ול-BGP)
  • ‫MD5 ל-BGP
  • זיהוי העברה דו-כיוונית (BFD) עבור BGP

יצירת Google Cloud משאבים

לפני שמפעילים את Network Connectivity Gateway באשכול, צריך לוודא שיש לכם אתGoogle Cloud המשאבים הבאים:

  • Cloud Router

  • שער HA VPN

  • שער VPN שכן: ממשק אחד

  • שתי מנהרות VPN

  • שני סשנים של BGP: אחד לכל מנהרת VPN

מידע על יצירה והגדרה של המשאבים האלה זמין במאמר יצירת שער HA VPN לשער VPN של עמית.

במהלך יצירת המשאבים האלה, כדאי לאסוף את המידע הבא כדי שיהיה זמין בהמשך:

  • שתי כתובות ה-IP החיצוניות שהוקצו לשער ה-HA VPN. Google Cloud

  • כתובת ה-IP הציבורית של תנועת ה-IPsec/VPN שיוצאת מהארגון. יכול להיות שהכתובת הזו היא תוצאה של תרגום כתובות רשת (NAT).

  • המפתח ששותף מראש.

  • מספר המערכת האוטונומית (ASN) שהקציתם ל-Cloud Router עבור סשנים של BGP.

  • מספר ה-ASN שבחרתם להשתמש בו באשכול המקומי שלכם לסשנים של BGP.

  • לכל סשן BGP, צריך להגדיר את הכתובת המקומית של הקישור, כמו 169.254.1.1, שתשמש את Cloud Router ואת הכתובת המקומית של הקישור שתשמש את האשכול המקומי.

מידע על אופן איתור הפרטים של הגדרת סשן BGP זמין במאמר הצגת הגדרת סשן BGP.

הדרישות לגבי אשכולות

ההורדה של כלי שורת הפקודה של Network Connectivity Gateway‏, ncgctl-v1.12.0-linux-amd64.tar.gz, תואמת רק לגרסה 1.12 של Google Distributed Cloud. אם אתם יוצרים אשכול חדש בגרסה 1.12.0, אתם צריכים להפעיל את Network Connectivity Gateway באמצעות הערה בקובץ ההגדרות של האשכול.

כדי להפעיל את Network Connectivity Gateway במהלך יצירת האשכול:

  1. מוסיפים את ההערה baremetal.cluster.gke.io/enable-gng: "true" לקובץ התצורה של האשכול.

    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      annotations:
        baremetal.cluster.gke.io/enable-gng: "true"
      name: my-cluster
      namespace: cluster-my-cluster
    spec:
    ...
      anthosBareMetalVersion: 1.12.0
      ...
    
  2. משתמשים ב-bmctl create כדי ליצור את האשכול:

    bmctl create cluster -c CLUSTER_NAME
    

    מחליפים את CLUSTER_NAME בשם שציינתם כשיצרתם את קובץ התצורה של האשכול. מידע נוסף על יצירת אשכולות זמין במאמר סקירה כללית על יצירת אשכולות.

הורדה

כדי להוריד את ncgctl, כלי שורת הפקודה של Network Connectivity Gateway, פועלים לפי השלבים הבאים:

  1. מורידים את הרכיבים של Network Connectivity Gateway ואת ההגדרות המותאמות אישית של המשאבים:

    gcloud storage cp gs://ncg-release/anthos-baremetal/ncgctl-v1.12.0-linux-amd64.tar.gz .
    
  2. מחילוץ הארכיון:

    tar -xvzf ncgctl-v1.12.0-linux-amd64.tar.gz
    

התקנה

כדי להתקין את ncgctl, פועלים לפי השלבים הבאים:

  1. מריצים בדיקות קדם הפעלה כדי לוודא שהאשכול עומד בדרישות המוקדמות. לדוגמה, מוודאים ש-Dataplane V2 מופעל.

    ./bin/ncgctl --verify --kubeconfig CLUSTER_KUBECONFIG
    

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

  2. מתקינים את Network Connectivity Gateway.

    ./bin/ncgctl --install --kubeconfig CLUSTER_KUBECONFIG
    
  3. אם יש לכם אשכול קיים בגרסה 1.12.0, אתם יכולים להשתמש בפקודה ncgctl הבאה כדי להפעיל את Network Connectivity Gateway:

    ./bin/ncgctl --enable-ncg-on-existing-cluster
    

    הפקודה ncgctl מקבלת את -e כגרסה מקוצרת של דגל ההפעלה.

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

    ./bin/ncgctl --help
    

יצירת סוד למפתח ששותף מראש

שערי הכניסה בכל אחד מהקצוות של מנהרות ה-IPsec משתמשים בסוד שמכיל את המפתח ששותף מראש לצורך אימות.

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

  1. יוצרים קובץ בשם psk-secret.yaml עם הפרטים הבאים של מניפסט הסוד:

    apiVersion: v1
    kind: Secret
    metadata:
      name: "ike-key"
      namespace: "kube-system"
    data:
      psk: PRE_SHARED_KEY
    

    מחליפים את PRE_SHARED_KEY במפתח ששותף מראש בקידוד base64. אם יש לכם מפתח בטקסט לא מוצפן, אתם צריכים לקודד אותו לפורמט base64 לפני שאתם יוצרים את הסוד הזה. לדוגמה, אם Google Cloud המסוף יצר בשבילכם מפתח, הוא יהיה בטקסט לא מוצפן ותצטרכו לקודד אותו. כדי לקודד מפתח לפי Base64:

    echo -n PLAINTEXT_KEY | base64
    
  2. יוצרים את הסוד:

    kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f psk-secret.yaml
    

יוצרים שני משאבים מותאמים אישית OverlayVPNTunnel

כדי להתחיל שתי סשנים של IPsec, יוצרים שני OverlayVPNTunnel משאבים בהתאמה אישית.

  1. יוצרים קובץ בשם overlay-vpn-tunnels.yaml עם פרטי המניפסט הבאים:OverlayVPNTunnel

    apiVersion: networking.gke.io/v1alpha1
    kind: OverlayVPNTunnel
    metadata:
      namespace: "kube-system"
      name: TUNNEL_1_NAME
    spec:
      ikeKey:
        name: "ike-key"
        namespace: "kube-system"
      peer:
        publicIP: PEER_PUBLIC_IP_1
      self:
        publicIP: SELF_PUBLIC_IP
      localTunnelIP: SELF_LOCAL_TUNNEL_IP_1
    ---
    apiVersion: networking.gke.io/v1alpha1
    kind: OverlayVPNTunnel
    metadata:
      namespace: "kube-system"
      name: TUNNEL_2_NAME
    spec:
      ikeKey:
        name: "ike-key"
        namespace: "kube-system"
      peer:
        publicIP: PEER_PUBLIC_IP_2
      self:
        publicIP: SELF_PUBLIC_IP
      localTunnelIP: SELF_LOCAL_TUNNEL_IP_2
    

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

    • ‫TUNNEL_NAME_1: שם לבחירתכם עבור OverlayVPNTunnel הראשון.

    • ‫TUNNEL_NAME_2: שם לבחירתכם עבור OverlayVPNTunnel השני.

    • ‫PEER_PUBLIC_IP_1: כתובת ה-IP הציבורית של אחד הממשקים בשער ה-HA VPN. ציינתם את הממשק הזה כשיצרתם את מנהרת ה-VPN הראשונה.

    • ‫PEER_PUBLIC_IP_2: כתובת ה-IP הציבורית של הממשק השני בשער ה-HA VPN. ציינתם את הממשק הזה כשייצרתם את מנהרת ה-VPN השנייה.

    • ‫SELF_LOCAL_TUNNEL_IP_1: כתובת ה-IP המקומית לקישור שתשמש באשכול שלכם להפעלת סשנים של BGP במנהרה הראשונה.

    • SELF_LOCAL_TUNNEL_IP_2: כתובת מקומית של הקישור שתשמש באשכול להפעלת סשנים של BGP במנהרה השנייה.

    • ‫SELF_PUBLIC_IP: כתובת ה-IP הציבורית של תעבורת הנתונים ב-IPsec/VPN שיוצאת מהארגון. הכתובת הזו עשויה להיות תוצאה של תרגום כתובות רשת (NAT).

  2. יוצרים את שני ה-OverlayVPNTunnels:

    kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f overlay-vpn-tunnels.yaml
    
  3. בודקים את הסטטוס של המנהרות:

    kubectl --kubeconfig CLUSTER_KUBECONFIG get OverlayVPNTunnel \
        --namespace kube-system --output yaml
    

יוצרים שני משאבים מותאמים אישית OverlayBGPPeer

כדי להתחיל סשן BGP בכל אחת מהמנהרות, יוצרים שני OverlayBGPPeer משאבים בהתאמה אישית.

  1. יוצרים קובץ בשם overlay-bgp-peers.yaml עם פרטי המניפסט הבאים של OverlayBGPPeer.

    apiVersion: networking.gke.io/v1alpha1
    kind: OverlayBGPPeer
    metadata:
      namespace: "kube-system"
      name: BGP_PEER_1_NAME
    spec:
      localASN: LOCAL_ASN
      localIP: LOCAL_IP
      peerIP: PEER_IP_1
      peerASN: PEER_ASN
      vpnTunnel: TUNNEL_1_NAME
    ---
    apiVersion: networking.gke.io/v1alpha1
    kind: OverlayBGPPeer
    metadata:
      namespace: "kube-system"
      name: BGP_PEER_2_NAME
    spec:
      localASN: LOCAL_ASN
      localIP: LOCAL_IP
      peerIP: PEER_IP_2
      peerASN: PEER_ASN
      vpnTunnel: TUNNEL_2_NAME
    

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

    • ‫BGP_PEER_1_NAME: שם לבחירתכם ל-OverlayBGPPeer הראשון.

    • ‫BGP_PEER_2_NAME: שם לבחירתכם עבור OverlayBGPPeer השני.

    • ‫LOCAL_ASN: מספר ה-ASN שישמש באשכול שלכם עבור סשנים של BGP.

    • ‫LOCAL_IP: כתובת ה-IP הציבורית של תעבורת הנתונים ב-IPsec/VPN שיוצאת מהארגון. הכתובת הזו עשויה להיות תוצאה של תרגום כתובות רשת (NAT).

    • ‫PEER_IP_1: כתובת ה-IP הציבורית של אחד מהממשקים בשער HA VPN. הגדרתם את הממשק הזה כשנוצרה מנהרת ה-VPN הראשונה.

    • ‫PEER_IP_2: כתובת ה-IP הציבורית של הממשק השני בשער ה-HA VPN. הממשק הזה צוין כשנוצרה מנהרת ה-VPN השנייה.

    • ‫PEER_ASN: מספר ה-ASN שהוקצה ל-Cloud Router עבור סשנים של BGP.

    • ‫TUNNEL_1_NAME: השם של OverlayVPNTunnel הראשון שיצרתם קודם.

    • ‫TUNNEL_2_NAME: השם של מנהרת OverlayVPN השנייה שיצרתם קודם.

  2. יוצרים את OverlayBGPPeer המשאבים המותאמים אישית:

    kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f overlay-bgp-peers.yaml
    
  3. בודקים את הסטטוס של סשני ה-BGP:

    kubectl --kubeconfig CLUSTER_KUBECONFIG get OverlayBGPPeer --namespace kube-system \
        --output yaml
    

בדיקת הסטטוס של Network Connectivity Gateway

ההתקנה יצרה משאב מותאם אישית NetworkConnectivityGateway.

  • צפייה במשאב המותאם אישית NetworkConnectivityGateway:

    kubectl --kubeconfig CLUSTER_KUBECONFIG get NetworkConnectivityGateway --namespace kube-system \
        --output yaml
    

    הפלט אמור להיראות כך: מוודאים שמופיע Status: Healthy:

    apiVersion: networking.gke.io/v1alpha1
    kind: NetworkConnectivityGateway
    metadata:
      namespace: kube-system
      name: default
    spec:
    status:
        CurrNode: worker1-node
        CreatedTime: 2021-09-07T03:18:15Z
        LastReportTime: 2021-09-21T23:57:54Z
        Status:  Healthy
    

בדיקת היומנים של Network Connectivity Gateway

ה-Pod של השער שייך ל-DaemonSet בשם ncgd, ולכן שם ה-Pod מתחיל ב-ncgd.

כדי לראות את היומנים של Network Connectivity Gateway:

  1. מאתרים את השם של ה-Pod של השער:

    kubectl --kubeconfig CLUSTER_KUBECONFIG pods --namespace kube-system | grep ncgd
    
  2. צופים ביומנים מ-Pod השער:

    kubectl --kubeconfig CLUSTER_KUBECONFIG logs GATEWAY_POD --namespace kube-system \
        --output yaml
    

    מחליפים את GATEWAY_POD בשם של ה-Pod של השער.

הסרה

כדי להסיר את Network Connectivity Gateway מאשכול:

./bin/ncgctl –-uninstall --kubeconfig CLUSTER_KUBECONFIG

פתרון בעיות

טיפים לפתרון בעיות שקשורות ל-Network Connectivity Gateway מופיעים במאמר פתרון בעיות ב-Network Connectivity Gateway.