Este documento descreve como implementar um modelo de rede de modo simples com suporte do protocolo de gateway de fronteira (BGP). Quando implementa um modelo de rede com suporte de BGP, o BGP garante dinamicamente que os pods em diferentes domínios da camada 2 podem comunicar entre si. A rede de modo simples com BGP é, por vezes, denominada IP simples dinâmico.
Para mais informações sobre os modelos de rede de modo simples, consulte o artigo Modelos de rede de modo simples vs. modo isolado.
Como implementar uma rede de modo simples que usa BGP
A rede no modo simples com BGP é ativada quando cria um novo cluster. Não pode ativar esta funcionalidade para um cluster existente. Depois de ativar esta funcionalidade, pode fazer alterações a algumas das definições de configuração.
Para implementar um cluster num modelo de rede de modo simples com suporte de BGP:
Edite o ficheiro de configuração do cluster:
- Defina o campo
spec.clusterNetwork.advancedNetworking
comotrue
. Se quiser ativar a rede no modo simples para IPv4, defina o campo
spec.clusterNetwork.flatIPv4
comotrue
.Para uma alternativa, consulte o cluster de pilha dupla (IPv4 Island, IPv6 Dynamic Flat IP), que configura o cluster com rede de modo simples apenas para IPv6.
apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: bm namespace: cluster-bm spec: type: user ... clusterNetwork: advancedNetworking: true flatIPv4: true ...
Quando
spec.clusterNetwork.flatIPv4
está definido comotrue
, o campospec.clusterNetwork.pods.cidrBlocks
é ignorado e pode ser omitido. No entanto, tem de adicionar um manifestoClusterCIDRConfigs
no ficheiro de configuração do cluster (por nó, por conjunto de nós e/ou por cluster).- Defina o campo
Anexe um manifesto
NetworkGatewayGroup
ao ficheiro de configuração do cluster:Especifique os IPs flutuantes a usar para a interligação BGP. Certifique-se de que o nome do recurso é
default
e que o espaço de nomes é o espaço de nomes do cluster.--- apiVersion: networking.gke.io/v1 kind: NetworkGatewayGroup metadata: name: default namespace: cluster-bm spec: floatingIPs: - 10.0.1.100 - 10.0.2.100
O recurso personalizado
NetworkGatewayGroup
gere uma lista de um ou mais endereços IP flutuantes. As sessões de peering BGP são iniciadas a partir de endereços IP flutuantes que especifica no recurso personalizadoNetworkGatewayGroup
.Anexe um manifesto
FlatIPMode
ao ficheiro de configuração do cluster:O nome do recurso
FlatIPMode
tem de serdefault
e o espaço de nomes é o espaço de nomes do cluster. O valorpeerSelector
corresponde às etiquetas nos objetos BGPPeerbgppeer1
ebgppeer2
(definidos no passo seguinte), pelo que ambos os pares são usados para a rede no modo simples.flatip-peer: "true"
O seguinte manifesto
FlatIPMode
destina-se a redes de modo simples de pilha única IPv4 com BGP. Para configurações alternativas, consulte os exemplos de configuração.--- apiVersion: baremetal.cluster.gke.io/v1alpha1 kind: FlatIPMode metadata: name: default namespace: cluster-bm spec: enableBGPIPv4: true enableBGPIPv6: false peerSelector: flatip-peer: "true"
Anexe um ou mais manifestos
BGPPeer
ao ficheiro de configuração do cluster:Escolhe os nomes dos recursos, mas todos os recursos
BGPPeer
têm de estar no espaço de nomes do cluster.--- 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
Anexe um manifesto
ClusterCIDRConfig
ao ficheiro de configuração do cluster:O recurso
CusterCIDRConfig
também tem de estar no espaço de nomes do cluster.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 é um recurso personalizado que especifica intervalos CIDR de pods a serem atribuídos dinamicamente aos nós. O CNI usa os intervalos CIDR de pods atribuídos num nó para atribuir endereços IP aos pods individuais em execução no nó. O
ClusterCIDRConfig
também é usado para redes de pilha dupla. Para mais informações sobre o recurso personalizadoClusterCIDRConfig
, incluindo exemplos de utilização, consulte Compreenda o recurso personalizado ClusterCIDRConfig.Crie o cluster:
bmctl create cluster
Para mais informações sobre a criação de clusters, consulte o artigo Vista geral da criação de clusters.
Se o seu ambiente suportar BGP multiprotocolo (MP-BGP), as rotas IPv4 e IPv6 podem ser anunciadas através destas sessões IPv4. Para ver exemplos de diferentes configurações, incluindo exemplos que usam MP-BGP, consulte os exemplos de configuração.
Modifique a configuração de rede de modo simples baseada em BGP
Depois de criar o cluster configurado para usar um modelo de rede de modo simples com BGP, é possível atualizar algumas definições de configuração. Use o ficheiro kubeconfig do cluster de administrador quando fizer atualizações subsequentes aos recursos relacionados com o BGP
(NetworkGatewayGroup
, FlatIPMode
e BGPPeer
). Em seguida, o cluster de administrador reconcilia as alterações ao cluster de utilizador. Se editar estes recursos diretamente no cluster de utilizadores, o cluster de administrador substitui as suas alterações nas reconciliações subsequentes.
Exemplos de configurações
As secções seguintes incluem exemplos de configuração de clusters para diferentes variações do modelo de rede de modo simples com BGP. Os ficheiros de configuração de exemplo não estão completos. A maioria das definições de clusters que não são relevantes para a rede no modo simples com BGP foram omitidas.
Cluster IPv4 de pilha única
O exemplo de ficheiro de configuração do cluster seguinte mostra as definições para configurar um cluster IPv4 de pilha única com rede de modo simples com 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
Cluster de pilha dupla (IPv4 Island, IPv6 Dynamic Flat IP)
O exemplo de ficheiro de configuração do cluster seguinte mostra as definições para configurar um cluster de pilha dupla (IPv4/IPv6) com rede de modo simples com BGP apenas 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
Cluster de pilha dupla (IP dinâmico simples IPv4, IP dinâmico simples IPv6)
O exemplo de ficheiro de configuração do cluster seguinte mostra as definições para configurar um cluster de pilha dupla com rede de modo simples com 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
Resolução de problemas
Para ajudar a resolver problemas relacionados com a rede no modo simples com BGP, esta secção inclui instruções para verificar a sua configuração:
Verifique se um objeto
FlatIPModes
foi criado no espaço de nomes do cluster no cluster de administrador:kubectl get flatipmodes -A --kubeconfig ADMIN_KUBECONFIG
A resposta deve ter um aspeto semelhante a este:
NAMESPACE NAME AGE cluster-bm default 2d17h
Verifique se um objeto
flatipmodes.networking.gke.io
é criado no cluster do utilizador:O objeto
flatipmodes.networking.gke.io
tem âmbito de cluster.kubectl get flatipmodes.networking.gke.io --kubeconfig USER_KUBECONFIG
A resposta deve ter um aspeto semelhante a este:
NAME AGE default 2d17h
Obtenha os recursos
BGPSessions
para ver as sessões atuais:kubectl get bgpsessions -A --kubeconfig USER_KUBECONFIG
A resposta deve ter um aspeto semelhante 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
Obtenha os recursos
BGPAdvertisedRoute
para ver as rotas atualmente anunciadas:kubectl get bgpadvertisedroutes -A --kubeconfig USER_KUBECONFIG
A resposta deve ter um aspeto semelhante ao seguinte:
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
Os nomes das rotas indicam o salto seguinte. Por exemplo,
route-via-222-22-208-240
da resposta do exemplo anterior indica que o salto seguinte para o prefixo anunciado222.2.0.0/24
é222.22.208.240
.