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.advancedNetworkingcomotrue.
- Se quiser ativar a rede no modo simples para IPv4, defina o campo - spec.clusterNetwork.flatIPv4como- true.- 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.flatIPv4está definido como- true, o campo- spec.clusterNetwork.pods.cidrBlocksé ignorado e pode ser omitido. No entanto, tem de adicionar um manifesto- ClusterCIDRConfigsno ficheiro de configuração do cluster (por nó, por conjunto de nós e/ou por cluster).
- Defina o campo 
- Anexe um manifesto - NetworkGatewayGroupao 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 é - defaulte 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 - NetworkGatewayGroupgere 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 personalizado- NetworkGatewayGroup.
- Anexe um manifesto - FlatIPModeao ficheiro de configuração do cluster:- O nome do recurso - FlatIPModetem de ser- defaulte o espaço de nomes é o espaço de nomes do cluster. O valor- peerSelectorcorresponde às etiquetas nos objetos BGPPeer- bgppeer1e- bgppeer2(definidos no passo seguinte), pelo que ambos os pares são usados para a rede no modo simples.- flatip-peer: "true"- O seguinte manifesto - FlatIPModedestina-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 - BGPPeerao ficheiro de configuração do cluster:- Escolhe os nomes dos recursos, mas todos os recursos - BGPPeertê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 - ClusterCIDRConfigao ficheiro de configuração do cluster:- O recurso - CusterCIDRConfigtambé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 - ClusterCIDRConfigtambém é usado para redes de pilha dupla. Para mais informações sobre o recurso personalizado- ClusterCIDRConfig, 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 - FlatIPModesfoi 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.iotem â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 - BGPSessionspara 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 - BGPAdvertisedRoutepara 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-240da resposta do exemplo anterior indica que o salto seguinte para o prefixo anunciado- 222.2.0.0/24é- 222.22.208.240.