En este documento se describe cómo implementar un modelo de red de modo plano con compatibilidad con el protocolo de pasarela fronteriza (BGP). Cuando implementas un modelo de red con compatibilidad con BGP, BGP se asegura dinámicamente de que los pods de diferentes dominios de capa 2 puedan comunicarse entre sí. La red en modo plano con BGP a veces se denomina IP plana dinámica.
Para obtener más información sobre los modelos de red en modo plano, consulta Modelos de red en modo plano y en modo isla.
Cómo implementar una red en modo plano que use BGP
La red en modo plano con BGP se habilita al crear un clúster. No puedes habilitar esta función en un clúster que ya existe. Una vez que hayas habilitado esta función, podrás cambiar algunos de los ajustes de configuración.
Para implementar un clúster en un modelo de red de modo plano con compatibilidad con BGP, sigue estos pasos:
Edita el archivo de configuración del clúster:
- Asigna el valor
true
al campospec.clusterNetwork.advancedNetworking
. Si quieres habilitar la red en modo plano para IPv4, asigna el valor
true
al campospec.clusterNetwork.flatIPv4
.Para ver una alternativa, consulta Clúster de pila dual (isla IPv4, IP plana dinámica IPv6), que configura tu clúster con una red en 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 ...
Si
spec.clusterNetwork.flatIPv4
tiene el valortrue
, se ignora el campospec.clusterNetwork.pods.cidrBlocks
y se puede omitir. Sin embargo, debes añadir un manifiestoClusterCIDRConfigs
en el archivo de configuración del clúster (por nodo, por grupo de nodos o por clúster).- Asigna el valor
Añade un manifiesto
NetworkGatewayGroup
al archivo de configuración del clúster:Especifica las IPs flotantes que se van a usar para el peering de BGP. Asegúrate de que el nombre del recurso sea
default
y 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
NetworkGatewayGroup
recurso personalizado gestiona una lista de una o varias direcciones IP flotantes. Las sesiones de emparejamiento de BGP se inician desde las direcciones IP flotantes que especifique en el recurso personalizadoNetworkGatewayGroup
.Añade 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 peers se utilizan para la red en modo plano.El siguiente manifiesto de
FlatIPMode
es para una red de pila única IPv4 en modo plano con BGP. Para ver otras configuraciones, consulta los 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"
Añade uno o varios manifiestos
BGPPeer
al archivo de configuración del clúster:Tú 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
Añade 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 intervalos de CIDR de los pods que se asignarán a los nodos de forma dinámica. El CNI usa los intervalos de CIDR de pods asignados a un nodo para asignar direcciones IP a los pods individuales que se ejecutan en el nodo. El
ClusterCIDRConfig
también se usa para la red de doble pila. 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 cómo crear clústeres, consulta la descripción general de la creación de clústeres.
Si tu entorno admite BGP multiprotocolo (MP-BGP), las rutas IPv4 e IPv6 se pueden anunciar a través de estas sesiones IPv4. Para ver ejemplos de diferentes configuraciones, incluidos ejemplos que usan MP-BGP, consulta Ejemplos de configuración.
Modificar la configuración de red en modo plano basada en BGP
Una vez que hayas creado tu clúster configurado para usar un modelo de red de modo plano con BGP, podrás actualizar algunos ajustes de configuración. Usa el archivo kubeconfig del clúster de administrador cuando hagas actualizaciones posteriores a los recursos relacionados con BGP (NetworkGatewayGroup
, FlatIPMode
y BGPPeer
). El clúster de administrador reconcilia los cambios en el clúster de usuario. Si editas estos recursos directamente en el clúster de usuarios, el clúster de administrador sobrescribirá los cambios en las reconciliaciones posteriores.
Configuraciones 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 han omitido la mayoría de los ajustes de clúster que no son relevantes para las redes en modo plano con BGP.
Clúster IPv4 de pila única
En el siguiente ejemplo de archivo de configuración de clúster se muestran los ajustes para configurar un clúster IPv4 de pila única con redes en 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 doble pila (IPv4 Island e IPv6 Dynamic Flat IP)
En el siguiente ejemplo de archivo de configuración de clúster se muestran los ajustes para configurar un clúster de doble pila (IPv4/IPv6) con redes en 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 doble pila (IP plana dinámica IPv4 e IP plana dinámica IPv6)
En el siguiente ejemplo de archivo de configuración de clúster se muestran los ajustes para configurar un clúster de doble pila con redes en modo Flat 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
Solución de problemas
Para ayudarte a solucionar problemas relacionados con la red en modo plano con BGP, esta sección incluye instrucciones para comprobar tu configuración:
Verifica si se ha creado 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 tener un aspecto similar a este:
NAMESPACE NAME AGE cluster-bm default 2d17h
Verifica si se ha creado un objeto
flatipmodes.networking.gke.io
en el clúster de usuarios:El objeto
flatipmodes.networking.gke.io
está centrado en el clúster.kubectl get flatipmodes.networking.gke.io --kubeconfig USER_KUBECONFIG
La respuesta debería tener un aspecto similar a este:
NAME AGE default 2d17h
Consulta los
BGPSessions
recursos para ver las sesiones actuales:kubectl get bgpsessions -A --kubeconfig USER_KUBECONFIG
La respuesta debería tener un aspecto similar a este:
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 de
BGPAdvertisedRoute
para ver las rutas que se anuncian actualmente:kubectl get bgpadvertisedroutes -A --kubeconfig USER_KUBECONFIG
La respuesta debería ser similar a esta:
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 siguiente salto. Por ejemplo,
route-via-222-22-208-240
de la respuesta de ejemplo anterior indica que el siguiente salto del prefijo anunciado222.2.0.0/24
es222.22.208.240
.