מודל רשת במצב שטוח עם תמיכה ב-Border Gateway Protocol (BGP) מאפשר לפודים בדומיינים שונים של שכבה 2 לתקשר זה עם זה. פרוטוקול BGP מפרסם באופן דינמי נתיבים בדומיינים האלה. רשת במצב שטוח עם BGP נקראת לפעמים כתובת IP שטוחה דינמית.
למידע נוסף על מודלים של רשתות במצב שטוח, ראו מודלים של רשתות במצב שטוח לעומת מצב אי.
איך מטמיעים רשת במצב שטוח שמשתמשת ב-BGP
כשיוצרים אשכול חדש, רשת במצב שטוח עם BGP מופעלת. אי אפשר להפעיל את התכונה הזו באשכול קיים. אחרי שמפעילים את התכונה הזו, אפשר לשנות חלק מהגדרות האישיות.
כדי להטמיע אשכול במודל רשת במצב שטוח עם תמיכה ב-BGP:
עורכים את קובץ התצורה של האשכול:
- מגדירים את השדה
spec.clusterNetwork.advancedNetworkingלערךtrue. אם רוצים להפעיל רשת במצב שטוח ל-IPv4, מגדירים את השדה
spec.clusterNetwork.flatIPv4לערךtrue.לחלופין, אפשר לעיין במאמר אשכול עם מחסנית כפולה (IPv4 Island, IPv6 Dynamic Flat IP), שבו מוסבר איך להגדיר את האשכול עם רשת במצב שטוח ל-IPv6 בלבד.
apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: bm namespace: cluster-bm spec: type: user ... clusterNetwork: advancedNetworking: true flatIPv4: true ...כשהערך של
spec.clusterNetwork.flatIPv4הואtrue, המערכת מתעלמת מהשדהspec.clusterNetwork.pods.cidrBlocksואפשר להשמיט אותו. עם זאת, צריך להוסיף מניפסט שלClusterCIDRConfigsבקובץ התצורה של האשכול (לכל צומת, לכל מאגר צמתים ו/או לכל אשכול).- מגדירים את השדה
מוסיפים מניפסט של
NetworkGatewayGroupלקובץ התצורה של האשכול:מציינים את כתובות ה-IP הצפות שבהן רוצים להשתמש לקישור בין רשתות שכנות (peering) של BGP. מוודאים ששם המשאב הוא
defaultומרחב השמות הוא מרחב השמות של האשכול.--- apiVersion: networking.gke.io/v1 kind: NetworkGatewayGroup metadata: name: default namespace: cluster-bm spec: floatingIPs: - 10.0.1.100 - 10.0.2.100המשאב המותאם אישית
NetworkGatewayGroupמנהל רשימה של כתובת IP צפה אחת או יותר. סשנים של קישור שכנים ב-BGP מתחילים מכתובות IP צפות שאתם מציינים במשאב המותאם אישיתNetworkGatewayGroup.מוסיפים מניפסט של
FlatIPModeלקובץ התצורה של האשכול:השם של המשאב
FlatIPModeצריך להיותdefaultומרחב השמות הוא מרחב השמות של האשכול. הערךpeerSelectorשלflatip-peer: "true"תואם לתוויות באובייקטיםbgppeer1ו-bgppeer2של BGPPeer (שמוגדרים בשלב הבא), כך ששני העמיתים משמשים לרישות במצב שטוח.המניפסט הבא של
FlatIPModeמיועד לרשת IPv4 במצב שטוח עם מחסנית אחת ו-BGP. במאמר דוגמאות להגדרות מפורטות הגדרות חלופיות.--- apiVersion: baremetal.cluster.gke.io/v1alpha1 kind: FlatIPMode metadata: name: default namespace: cluster-bm spec: enableBGPIPv4: true enableBGPIPv6: false peerSelector: flatip-peer: "true"מוסיפים לקובץ התצורה של האשכול מניפסט אחד או יותר של
BGPPeer:אתם בוחרים את השמות של המשאבים, אבל כל המשאבים של
BGPPeerצריכים להיות במרחב השמות של האשכול.--- apiVersion: networking.gke.io/v1 kind: BGPPeer metadata: name: bgppeer1 namespace: cluster-bm labels: flatip-peer: "true" spec: localASN: 65001 peerASN: 65000 peerIP: 10.0.1.254 sessions: 2 --- apiVersion: networking.gke.io/v1 kind: BGPPeer metadata: name: bgppeer2 namespace: cluster-bm labels: flatip-peer: "true" spec: localASN: 65001 peerASN: 65000 peerIP: 10.0.2.254 sessions: 2מוסיפים מניפסט של
ClusterCIDRConfigלקובץ התצורה של האשכול:המשאב
CusterCIDRConfigצריך להיות גם במרחב השמות של האשכול.apiVersion: baremetal.cluster.gke.io/v1alpha1 kind: ClusterCIDRConfig metadata: name: cluster-wide-1 namespace: cluster-bm spec: ipv4: cidr: "192.168.0.0/16" perNodeMaskSize: 24ClusterCIDRConfig הוא משאב בהתאמה אישית שמציין את טווחי ה-CIDR של Pod שיוקצו לצמתים באופן דינמי. ממשק ה-CNI משתמש בטווחי ה-CIDR של ה-Pod שמוקצים בצומת כדי להקצות כתובות IP ל-Pods הנפרדים שפועלים בצומת. ה-
ClusterCIDRConfigמשמש גם לרשתות עם מחסנית כפולה. למידע נוסף על המשאב בהתאמה אישיתClusterCIDRConfig, כולל דוגמאות לשימוש, קראו את המאמר הסבר על המשאב בהתאמה אישית ClusterCIDRConfig.יוצרים את האשכול:
bmctl create clusterלמידע נוסף על יצירת אשכולות, ראו סקירה כללית על יצירת אשכולות.
אם הסביבה שלכם תומכת ב-BGP עם כמה פרוטוקולים (MP-BGP), אפשר לפרסם נתיבי IPv4 ו-IPv6 בסשנים האלה של IPv4. במאמר דוגמאות להגדרות מופיעות דוגמאות להגדרות שונות, כולל דוגמאות לשימוש ב-MP-BGP.
שינוי הגדרות הרשת במצב שטוח שמבוסס על BGP
אחרי שיוצרים את האשכול שמוגדר להשתמש במודל רשת שטוח עם BGP, אפשר לעדכן חלק מהגדרות האישיות. כשאתם מבצעים עדכונים נוספים למשאבים שקשורים ל-BGP (NetworkGatewayGroup, FlatIPMode ו-BGPPeer), אתם צריכים להשתמש בקובץ kubeconfig של אשכול האדמין. לאחר מכן, אשכול האדמין יתאים את השינויים לאשכול המשתמש. אם תערכו את המשאבים האלה ישירות באשכול המשתמש, אשכול האדמין יחליף את השינויים שלכם בהתאמות הבאות.
הגדרות לדוגמה
בקטעים הבאים מפורטות דוגמאות להגדרת אשכולות לווריאציות שונות של מודל הרשת במצב שטוח עם BGP. הדוגמאות של קובצי התצורה לא שלמות. רוב הגדרות האשכול שלא רלוונטיות לרשת במצב שטוח עם BGP הושמטו.
אשכול IPv4 עם מחסנית אחת
בדוגמה הבאה של קובץ תצורה של אשכול מוצגות ההגדרות של אשכול IPv4 עם מחסנית אחת, עם רשת במצב שטוח עם BGP:
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: bm
namespace: cluster-bm
spec:
...
clusterNetwork:
advancedNetworking: true
flatIPv4: true
services:
cidrBlocks:
- 10.96.0.0/12
...
---
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: ClusterCIDRConfig
metadata:
name: cluster-wide-1
namespace: cluster-bm # Must match the cluster namespace
spec:
ipv4:
cidr: "222.2.0.0/16"
perNodeMaskSize: 24
---
apiVersion: networking.gke.io/v1
kind: NetworkGatewayGroup
metadata:
name: default
namespace: cluster-bm # Must match the cluster namespace
spec:
floatingIPs:
- 10.0.1.100
- 10.0.3.100
---
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: FlatIPMode
metadata:
name: default
namespace: cluster-bm # Must match the cluster namespace
spec:
enableBGPIPv4: true
enableBGPIPv6: false
peerSelector:
flatipmode-peer: "true"
---
apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
name: bgppeer1
namespace: cluster-bm # Must match the cluster namespace
labels:
flatipmode-peer: "true"
spec:
localASN: 65001
peerASN: 65002
peerIP: 10.0.1.254
sessions: 2
---
apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
name: bgppeer2
namespace: cluster-bm # Must match the cluster namespace
labels:
flatipmode-peer: "true"
spec:
localASN: 65001
peerASN: 65002
peerIP: 10.0.3.254
sessions: 2
אשכול עם מחסנית כפולה (IPv4 Island, IPv6 Dynamic Flat IP)
בדוגמה הבאה של קובץ תצורה של אשכול מוצגות ההגדרות של אשכול עם מחסנית כפולה (IPv4/IPv6) ורשת במצב שטוח עם BGP ל-IPv6 בלבד:
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: bm
namespace: cluster-bm
spec:
...
clusterNetwork:
advancedNetworking: true
flatIPv4: false
pods:
cidrBlocks:
- 192.168.0.0/16
services:
cidrBlocks:
- 10.96.0.0/12
# Additional IPv6 CIDR block determines if the cluster is dual-stack
- 2620:0:1000:2630:5:2::/112
...
---
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: ClusterCIDRConfig
metadata:
name: cluster-wide-1
namespace: cluster-bm # Must match the cluster namespace
spec:
ipv4:
cidr: "192.168.0.0/16"
perNodeMaskSize: 24
ipv6:
cidr: "2222:3::/112"
perNodeMaskSize: 120
---
apiVersion: networking.gke.io/v1
kind: NetworkGatewayGroup
metadata:
name: default
namespace: cluster-bm # Must match the cluster namespace
spec:
floatingIPs:
- 10.0.1.100
- 10.0.3.100
---
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: FlatIPMode
metadata:
name: default
namespace: cluster-bm # Must match the cluster namespace
spec:
enableBGPIPv4: false
enableBGPIPv6: true
peerSelector:
flatipmode-peer: "true"
---
apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
name: bgppeer1
namespace: cluster-bm # Must match the cluster namespace
labels:
flatipmode-peer: "true"
spec:
localASN: 65001
peerASN: 65002
peerIP: 10.0.1.254
sessions: 2
---
apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
name: bgppeer2
namespace: cluster-bm # Must match the cluster namespace
labels:
flatipmode-peer: "true"
spec:
localASN: 65001
peerASN: 65002
peerIP: 10.0.3.254
sessions: 2
אשכול עם מחסנית כפולה (IPv4 Dynamic Flat IP, IPv6 Dynamic Flat IP)
בדוגמה הבאה של קובץ תצורה של אשכול מוצגות ההגדרות של אשכול עם שני סטאקים ורשת במצב שטוח עם BGP:
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: bm
namespace: cluster-bm
spec:
...
clusterNetwork:
advancedNetworking: true
flatIPv4: true
pods:
cidrBlocks:
- 192.168.0.0/16
services:
cidrBlocks:
- 10.96.0.0/12
# Additional IPv6 CIDR block determines if the cluster is dual-stack
- 2620:0:1000:2630:5:2::/112
...
---
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: ClusterCIDRConfig
metadata:
name: cluster-wide-1
namespace: cluster-bm # Must match the cluster namespace
spec:
ipv4:
cidr: "222.2.0.0/16"
perNodeMaskSize: 24
ipv6:
cidr: "2222:3::/112"
perNodeMaskSize: 120
---
apiVersion: networking.gke.io/v1
kind: NetworkGatewayGroup
metadata:
name: default
namespace: cluster-bm # Must match the cluster namespace
spec:
floatingIPs:
- 10.0.1.100
- 10.0.3.100
---
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: FlatIPMode
metadata:
name: default
namespace: cluster-bm # Must match the cluster namespace
spec:
enableBGPIPv4: true
enableBGPIPv6: true
peerSelector:
flatipmode-peer: "true"
---
apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
name: bgppeer1
namespace: cluster-bm # Must match the cluster namespace
labels:
flatipmode-peer: "true"
spec:
localASN: 65001
peerASN: 65002
peerIP: 10.0.1.254
sessions: 2
---
apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
name: bgppeer2
namespace: cluster-bm # Must match the cluster namespace
labels:
flatipmode-peer: "true"
spec:
localASN: 65001
peerASN: 65002
peerIP: 10.0.3.254
sessions: 2
פתרון בעיות
כדי לעזור לכם לפתור בעיות שקשורות לרשת במצב שטוח עם BGP, בקטע הזה מוסבר איך לבדוק את ההגדרות:
בודקים אם נוצר אובייקט
FlatIPModesבמרחב השמות של האשכול באשכול האדמין:kubectl get flatipmodes -A --kubeconfig ADMIN_KUBECONFIGהתשובה אמורה להיראות כך:
NAMESPACE NAME AGE cluster-bm default 2d17hבודקים אם נוצר אובייקט
flatipmodes.networking.gke.ioבאשכול המשתמש:האובייקט
flatipmodes.networking.gke.ioמוגדר ברמת האשכול.kubectl get flatipmodes.networking.gke.io --kubeconfig USER_KUBECONFIGהתשובה אמורה להיראות כך:
NAME AGE default 2d17hמשיגים את המשאבים של
BGPSessionsכדי לראות את הסשנים הנוכחיים:kubectl get bgpsessions -A --kubeconfig USER_KUBECONFIGהתשובה אמורה להיראות כך:
NAMESPACE NAME LOCAL ASN PEER ASN LOCAL IP PEER IP STATE LAST REPORT kube-system 10.0.1.254-node-01 65500 65000 10.0.1.100 10.0.1.254 Established 2s kube-system 10.0.1.254-node-02 65500 65000 10.0.3.100 10.0.1.254 NotEstablished 2s kube-system 10.0.3.254-node-01 65500 65000 10.0.1.100 10.0.3.254 NotEstablished 2s kube-system 10.0.3.254-node-02 65500 65000 10.0.3.100 10.0.3.254 Established 2sמשיגים את המשאבים של
BGPAdvertisedRouteכדי לראות את המסלולים שמתפרסמים כרגע:kubectl get bgpadvertisedroutes -A --kubeconfig USER_KUBECONFIGהתשובה אמורה להיות בנוסח הבא:
NAMESPACE NAME PREFIX METRIC kube-system route-via-222-22-208-240 222.2.0.0/24 kube-system route-via-222-22-209-240 222.2.1.0/24שמות המסלולים מציינים את הצעד הבא. לדוגמה, הערך
route-via-222-22-208-240בתגובה לדוגמה שלמעלה מציין שהצעד הבא של הקידומת המפורסמת222.2.0.0/24הוא222.22.208.240.