This document describes how to implement a flat-mode network model with Border Gateway Protocol (BGP) support. When you implement a network model with BGP support, BGP dynamically ensures that pods in different L2 domains can communicate with each other.
For more information about flat-mode network models, see Flat vs island mode network models.
How to implement a flat-mode network that uses BGP
To implement a cluster on a flat-mode network model with BGP support, make
the following changes to the cluster's cluster.yaml
file:
- Set the
spec.clusterNetwork.advancedNetworking
field totrue
in the cluster resource. - Set the
spec.clusterNetwork.flatIPv4
field totrue
in the cluster resource. - When
spec.clusterNetwork.flatIPv4
is set totrue
, the fieldspec.clusterNetwork.pods.cidrBlocks
is ignored and can be omitted. However, you will need to define aClusterCIDRConfigs
section in the yaml file (per-node, per-nodepool and/or per-cluster). See the examplecluster.yaml
file below for details. - Append a
NetworkGatewayGroup
resource to thecluster.yaml
file and specify the floating IPs to use for BGP peering. Ensure that the name isdefault
and the namespace is the cluster namespace. - Append
FlatIPMode
andBGPPeer
resources to thecluster.yaml
file. The name of theFlatIPMode
resource must bedefault
, and all resources must be in the cluster namespace.
For Preview, only IPv4 BGP Peers and sessions are supported. However, if your environment supports Multiprotocol BGP (MP-BGP), IPv4 and IPv6 routes can be advertised over these IPv4 sessions. IPv6 BGP Peer configuration isn't supported.
The following excerpt of a cluster.yaml
file shows how to implement flat-mode
networking with BGP support. Note that the IP addresses that appear in this
excerpt are only examples and you will need to replace them with your own IP
addresses:
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: bm
namespace: cluster-bm
spec:
...
clusterNetwork:
advancedNetworking: true
flatIPv4: true
... (other cluster config omitted)
apiVersion: networking.gke.io/v1
kind: NetworkGatewayGroup
metadata:
name: default
namespace: cluster-bm
spec:
floatingIPs:
- 10.0.1.100
- 10.0.2.100
....
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: FlatIPMode
metadata:
name: default
namespace: cluster-bm
spec:
enableBGPIPv4: true
enableBGPIPv6: false
peerSelector:
flatip-peer: "true"
....
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
....
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: 24