במסמך הזה מוסבר איך להגדיר 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.
שער קישוריות לרשת לא תומך בתכונות וביכולות הבאות:
- 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 במהלך יצירת האשכול:
מוסיפים את ההערה
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 ...משתמשים ב-
bmctl createכדי ליצור את האשכול:bmctl create cluster -c CLUSTER_NAMEמחליפים את
CLUSTER_NAMEבשם שציינתם כשיצרתם את קובץ התצורה של האשכול. מידע נוסף על יצירת אשכולות זמין במאמר סקירה כללית על יצירת אשכולות.
הורדה
כדי להוריד את ncgctl, כלי שורת הפקודה של Network Connectivity Gateway, פועלים לפי השלבים הבאים:
מורידים את הרכיבים של Network Connectivity Gateway ואת ההגדרות המותאמות אישית של המשאבים:
gcloud storage cp gs://ncg-release/anthos-baremetal/ncgctl-v1.12.0-linux-amd64.tar.gz .מחילוץ הארכיון:
tar -xvzf ncgctl-v1.12.0-linux-amd64.tar.gz
התקנה
כדי להתקין את ncgctl, פועלים לפי השלבים הבאים:
מריצים בדיקות קדם הפעלה כדי לוודא שהאשכול עומד בדרישות המוקדמות. לדוגמה, מוודאים ש-Dataplane V2 מופעל.
./bin/ncgctl --verify --kubeconfig CLUSTER_KUBECONFIGמחליפים את
CLUSTER_KUBECONFIGבנתיב של קובץ ה-kubeconfig של האשכול.מתקינים את Network Connectivity Gateway.
./bin/ncgctl --install --kubeconfig CLUSTER_KUBECONFIGאם יש לכם אשכול קיים בגרסה 1.12.0, אתם יכולים להשתמש בפקודה
ncgctlהבאה כדי להפעיל את Network Connectivity Gateway:./bin/ncgctl --enable-ncg-on-existing-clusterהפקודה
ncgctlמקבלת את-eכגרסה מקוצרת של דגל ההפעלה.כדי לראות קיצורי דרך נוספים ועזרה לגבי פקודות אחרות, משתמשים בפקודה הבאה:
./bin/ncgctl --help
יצירת סוד למפתח ששותף מראש
שערי הכניסה בכל אחד מהקצוות של מנהרות ה-IPsec משתמשים בסוד שמכיל את המפתח ששותף מראש לצורך אימות.
כדי ליצור את הסוד, פועלים לפי השלבים הבאים:
יוצרים קובץ בשם
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יוצרים את הסוד:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f psk-secret.yaml
יוצרים שני משאבים מותאמים אישית OverlayVPNTunnel
כדי להתחיל שתי סשנים של IPsec, יוצרים שני OverlayVPNTunnel משאבים בהתאמה אישית.
יוצרים קובץ בשם
overlay-vpn-tunnels.yamlעם פרטי המניפסט הבאים:OverlayVPNTunnelapiVersion: 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).
יוצרים את שני ה-
OverlayVPNTunnels:kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f overlay-vpn-tunnels.yamlבודקים את הסטטוס של המנהרות:
kubectl --kubeconfig CLUSTER_KUBECONFIG get OverlayVPNTunnel \ --namespace kube-system --output yaml
יוצרים שני משאבים מותאמים אישית OverlayBGPPeer
כדי להתחיל סשן BGP בכל אחת מהמנהרות, יוצרים שני OverlayBGPPeer
משאבים בהתאמה אישית.
יוצרים קובץ בשם
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 השנייה שיצרתם קודם.
יוצרים את
OverlayBGPPeerהמשאבים המותאמים אישית:kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f overlay-bgp-peers.yamlבודקים את הסטטוס של סשני ה-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:
מאתרים את השם של ה-Pod של השער:
kubectl --kubeconfig CLUSTER_KUBECONFIG pods --namespace kube-system | grep ncgdצופים ביומנים מ-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.