En este documento, se describe cómo implementar un modelo de red de modo plano compatible con el Protocolo de puerta de enlace de frontera (BGP). Cuando implementas un modelo de red compatible con BGP, BGP garantiza de forma dinámica que los Pods en diferentes dominios Layer 2 se pueden comunicar entre sí. A veces, las redes de modo plano con BGP se denominan IP plana dinámica.
Para obtener más información sobre los modelos de red de modo plano, consulta modelos de red de modo plano frente a modo isla.
Cómo implementar una red de modo plano que usa BGP
La creación de redes de modo plano con BGP se habilita cuando creas un clúster nuevo. No puedes habilitar esta función para un clúster existente. Una vez que se habilite esta función, podrás hacer cambios en algunos de los parámetros de configuración.
Para implementar un clúster en un modelo de red de modo plano compatible con BGP, haz lo siguiente:
Edita el archivo de configuración del clúster
- Configura el campo
spec.clusterNetwork.advancedNetworking
comotrue
. Si quieres habilitar las redes de modo plano para IPv4, establece el campo
spec.clusterNetwork.flatIPv4
entrue
.Como alternativa, consulta Clúster de pila doble (isla IPv4, IP plana dinámica IPv6), que configura tu clúster con redes de modo plano solo para IPv6.
apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: bm namespace: cluster-bm spec: type: user ... clusterNetwork: advancedNetworking: true flatIPv4: true ...
Cuando
spec.clusterNetwork.flatIPv4
se configura comotrue
, el campospec.clusterNetwork.pods.cidrBlocks
se ignora y se puede omitir. Sin embargo, debes agregar un manifiestoClusterCIDRConfigs
en el archivo de configuración del clúster (por nodo, por grupo de nodos o por clúster).- Configura el campo
Agrega un manifiesto
NetworkGatewayGroup
al archivo de configuración del clúster:Especifica las IP flotantes que se usarán para el intercambio de tráfico de BGP. Asegúrate de que el recurso del nombre sea
default
y que el espacio de nombres sea el del clúster.--- apiVersion: networking.gke.io/v1 kind: NetworkGatewayGroup metadata: name: default namespace: cluster-bm spec: floatingIPs: - 10.0.1.100 - 10.0.2.100
El recurso personalizado
NetworkGatewayGroup
administra una lista de una o más direcciones IP flotantes. Las sesiones de intercambio de tráfico de BGP se inician a partir de las direcciones IP flotantes que especifiques en el recurso personalizadoNetworkGatewayGroup
.Agrega un manifiesto
FlatIPMode
al archivo de configuración del clúster:El nombre del recurso
FlatIPMode
debe serdefault
, y el espacio de nombres es el espacio de nombres del clúster. El valorpeerSelector
flatip-peer: "true"
coincide con las etiquetas de los objetos BGPPeerbgppeer1
ybgppeer2
(definidos en el siguiente paso), por lo que ambos pares se usan para la creación de redes en modo plano.El siguiente manifiesto
FlatIPMode
es para redes de modo plano de pila única IPv4 con BGP. Para ver configuraciones alternativas, consulta Ejemplos de configuración.--- apiVersion: baremetal.cluster.gke.io/v1alpha1 kind: FlatIPMode metadata: name: default namespace: cluster-bm spec: enableBGPIPv4: true enableBGPIPv6: false peerSelector: flatip-peer: "true"
Agrega uno o más manifiestos
BGPPeer
al archivo de configuración del clúster:Eliges los nombres de los recursos, pero todos los recursos
BGPPeer
deben estar en el espacio de nombres del clúster.--- 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
Agrega un manifiesto
ClusterCIDRConfig
al archivo de configuración del clúster:El recurso
CusterCIDRConfig
también debe estar en el espacio de nombres del clúster.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
ClusterCIDRConfig es un recurso personalizado que especifica los rangos de CIDR de Pod que se asignarán a los nodos de forma dinámica. CNI usa los rangos de CIDR de Pod asignados en un nodo para asignar direcciones IP a los Pods individuales que se ejecutan en el nodo.
ClusterCIDRConfig
también se usa para las herramientas de redes de pila doble. Para obtener más información sobre el recurso personalizadoClusterCIDRConfig
, incluidos ejemplos de uso, consulta Información sobre el recurso personalizado ClusterCIDRConfig.Crea el clúster:
bmctl create cluster
Para obtener más información sobre la creación de clústeres, consulta Descripción general de la creación de clústeres.
Si tu entorno admite BGP multiprotocolo (MP-BGP), se pueden anunciar rutas IPv4 e IPv6 a través de estas sesiones de IPv4. Para ver ejemplos de diferentes configuraciones, incluidos los que usan MP-BGP, consulta Ejemplos de configuración.
Modifica tu configuración de red de modo plano basada en BGP
Después de crear el clúster configurado para usar un modelo de red de modo plano con BGP, se pueden actualizar algunos parámetros de configuración. Usa el archivo kubeconfig del clúster de administrador cuando realices actualizaciones posteriores a los recursos relacionados con BGP (NetworkGatewayGroup
, FlatIPMode
y BGPPeer
). Luego, el clúster de administrador concilia los cambios en el clúster de usuario. Si editas estos recursos directamente en el clúster de usuario, el clúster de administrador reemplazará tus cambios en las reconciliaciones posteriores.
Configuración de ejemplo
En las siguientes secciones, se incluyen ejemplos de configuración de clústeres para diferentes variaciones del modelo de red de modo plano con BGP. Los archivos de configuración de muestra no están completos. Se omitió la mayoría de la configuración del clúster que no es relevante para las redes en modo plano con BGP.
Clúster de IPv4 de pila única
En el siguiente ejemplo de archivo de configuración de clúster, se muestra la configuración para configurar un clúster IPv4 de pila única con redes de modo plano con 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
Clúster de pila doble (isla IPv4, IP plana dinámica IPv6)
En el siguiente ejemplo de archivo de configuración de clúster, se muestra la configuración para configurar un clúster de pila doble (IPv4/IPv6) con redes de modo plano con BGP solo para 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
Clúster de pila doble (IP plana dinámica IPv4, IP plana dinámica IPv6)
En el siguiente ejemplo de archivo de configuración de clúster, se muestra la configuración para configurar un clúster de doble pila con herramientas de redes de modo plano con 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
Soluciona problemas
Para ayudarte a solucionar problemas relacionados con las redes en modo plano con BGP, en esta sección se incluyen instrucciones para verificar tu configuración:
Verifica si se crea un objeto
FlatIPModes
en el espacio de nombres del clúster en el clúster de administrador:kubectl get flatipmodes -A --kubeconfig ADMIN_KUBECONFIG
La respuesta debería ser similar a la siguiente:
NAMESPACE NAME AGE cluster-bm default 2d17h
Verifica si se crea un objeto
flatipmodes.networking.gke.io
en el clúster de usuarios:El objeto
flatipmodes.networking.gke.io
tiene permiso de clúster.kubectl get flatipmodes.networking.gke.io --kubeconfig USER_KUBECONFIG
La respuesta debería ser similar a la siguiente:
NAME AGE default 2d17h
Obtén los recursos de
BGPSessions
para ver las sesiones actuales:kubectl get bgpsessions -A --kubeconfig USER_KUBECONFIG
La respuesta debería ser similar a la siguiente:
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
Obtén los recursos
BGPAdvertisedRoute
para ver las rutas que se anuncian actualmente:kubectl get bgpadvertisedroutes -A --kubeconfig USER_KUBECONFIG
La respuesta debería ser algo así:
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
Los nombres de las rutas indican el próximo salto. Por ejemplo,
route-via-222-22-208-240
de la respuesta del ejemplo anterior indica que el próximo salto para el prefijo anunciado222.2.0.0/24
es222.22.208.240
.