Neste documento, descrevemos como configurar e usar balanceadores de carga agrupados com o protocolo de gateway de borda (BGP, na sigla em inglês) para o GKE em bare metal. Esse modo de balanceamento de carga
é compatível com a divulgação de endereços IP virtuais
(VIPs, na sigla em inglês) para o ServiceType
LoadBalancer
usando o protocolo de gateway de borda externo (eBGP, na sigla em inglês) para seus clusters. Nesse
cenário, a rede de clusters é um sistema autônomo, que se interconecta
com outro sistema autônomo, uma rede externa, por peering.
Os balanceadores de carga em pacote com o recurso BGP se aplicam a todos os tipos de clusters, mas os clusters de administrador são compatíveis apenas com a parte do balanceamento de carga do plano de controle desse recurso.
O uso dos balanceadores de carga em pacote com o recurso BGP oferece os seguintes benefícios:
- Usa o recurso de balanceamento de carga ativo/ativo N-way, com failover mais rápido e uso mais eficiente da largura de banda disponível.
- É compatível com o protocolo de camada 3, que opera com roteadores e switches de topo de rack (ToR, na sigla em inglês) de terceiros compatíveis com o eBGP.
- Permite que data centers que executam uma pilha avançada de rede definida por software (SDN, na sigla em inglês) excedam o limite da camada 3 até os clusters.
Como funciona o balanceamento de carga em pacote com o BGP
Nas seções a seguir, você verá um breve resumo de como funcionam os balanceadores de carga em pacote com o BGP.
Peering do BGP
O recurso de balanceadores de carga em pacote com o BGP inicia várias conexões BGP com a infraestrutura. O BGP tem os seguintes requisitos técnicos:
- As sessões de peering são separadas entre VIPs do plano de controle e VIPs de serviço.
- As sessões de peering do plano de controle são iniciadas a partir dos endereços IP dos nós do plano de controle.
- As sessões de peering de serviço são iniciadas a partir de endereços IP flutuantes
especificados no recurso personalizado
NetworkGatewayGroup
. - O controlador do gateway de rede do Anthos gerencia os endereços IP flutuantes.
- O balanceamento de carga em pacote baseado em BGP é compatível apenas com peering eBGP.
- O peering de vários saltos é aceito por padrão.
- As senhas MD5 nas sessões do BGP não são suportadas.
- As sessões de peering baseadas em IPv6 não são suportadas.
- Rotas anunciadas para qualquer peering devem ser redistribuídas em toda a rede e acessíveis em qualquer outro ponto do cluster.
- O uso do recurso
ADD-PATH
do BGP no modo de recebimento é recomendado para sessões de peering. - Anunciar vários caminhos de cada peering resulta no balanceamento de carga ativo/ativo.
- O roteamento de vários caminhos de custo igual (ECMP, na sigla em inglês) precisa estar ativado na rede. Assim, vários caminhos podem ser usados na distribuição do tráfego por um conjunto de nós do balanceador de carga.
Balanceamento de carga do plano de controle
Cada nó do plano de controle no cluster estabelece sessões do BGP com um ou mais peerings na infraestrutura. É preciso que cada nó do plano de controle tenha pelo menos um peering. No arquivo de configuração do cluster, é possível definir quais nós do plano de controle se conectam a quais peerings externos.
O diagrama a seguir mostra um exemplo de peering do plano de controle. O cluster tem dois nós do plano de controle em uma sub-rede e um nó em outra. Há um peering externo (TOR) em cada sub-rede, e os clusters do GKE em nós do plano de controle bare metal fazem peering com o respectivo TOR.
Balanceamento de carga de serviço
Além das sessões de peering iniciadas a partir de cada nó do plano de
controle para o peering do plano de controle, outras sessões de peering são iniciadas para os
Serviços de LoadBalancer
. Essas sessões não são iniciadas diretamente dos
endereços IP do nó do cluster. Em vez disso, elas usam endereços IP flutuantes.
Os serviços que têm uma política de rede externalTrafficPolicy=Local
não são compatíveis.
Endereços de IP flutuantes
O balanceamento de carga de serviço exige a reserva de endereços IP flutuantes nas
sub-redes de nós do cluster para uso no peering do BGP. É necessário pelo menos um endereço IP flutuante
para o cluster, mas recomendamos reservar, no mínimo, dois endereços
a fim de garantir alta disponibilidade nas sessões do BGP. Os endereços IP flutuantes são
especificados no recurso personalizado (CR, na sigla em inglês) NetworkGatewayGroup
, que pode ser
incluído no arquivo de configuração do cluster.
Com os endereços IP flutuantes, você não precisa se preocupar com o mapeamento de endereços IP do locutor do
BGP para os nós. O controlador do gateway de rede do Anthos se encarrega da
atribuição de
NetworkGatewayGroup
aos nós e também gerencia os endereços IP
flutuantes. Se um nó ficar inativo, o controlador do gateway de rede do Anthos atribuirá
novamente os endereços IP flutuantes para garantir que os peerings externos tenham um endereço IP determinista
para fazer peering.
Peerings externos
No balanceamento de carga do plano de dados, é possível usar os mesmos pares externos
especificados para o peering do plano de controle na seção
loadBalancer.controlPlaneBGP
do arquivo de configuração do cluster. Também é possível especificar
diferentes pares de BGP.
Se você quiser especificar diferentes pares de BGP para o peering de plano de dados, anexe
as especificações de recursos BGPLoadBalancer
e BGPPeer
ao
arquivo de configuração do cluster. Quando você não especifica esses recursos personalizados, os pares do plano de controle
são usados automaticamente no plano de dados.
É possível especificar os pares externos usados em sessões de peering com os endereços IP
flutuantes no recurso personalizado BGPPeer
, que você adiciona ao
arquivo de configuração do cluster. O recurso BGPPeer
inclui um rótulo para ser identificado
pelo recurso personalizado BGPLoadBalancer
correspondente. Especifique o rótulo
correspondente no campo peerSelector
no recurso personalizado BGPLoadBalancer
para
selecionar o BGPPeer
para uso.
O controlador de gateway de rede do Anthos tenta estabelecer sessões (o número
de sessões é configurável) para cada par externo a partir do conjunto de endereços IP
flutuantes reservados. Recomendamos especificar pelo menos dois pares externos
para garantir alta disponibilidade nas sessões do BGP. Cada par externo designado para o
balanceamento de carga de serviço precisa ser configurado para fazer peering com cada endereço IP
flutuante especificado no recurso personalizado NetworkGatewayGroup
.
Nós do balanceador de carga
Um subconjunto de nós do cluster é usado no balanceamento de carga, o que significa que eles
são os nós divulgados para aceitar o tráfego de entrada do balanceamento de carga.
Esse conjunto de nós assume como padrão o pool de nós do plano de controle, mas é possível especificar outro
pool de nós na seção loadBalancer
do arquivo de configuração do
cluster. Se você especificar um pool de nós, ele será usado para os nós do balanceador de carga,
e não o pool de nós do plano de controle.
Os endereços IP flutuantes, que funcionam como locutores do BGP, podem ou não ser executados nos nós do balanceador de carga. Os endereços IP flutuantes são atribuídos a um nó na mesma sub-rede. Nele, o peering é iniciado, independentemente de ser um nó de balanceador de carga. No entanto, os próximos saltos divulgados no BGP são sempre os nós do balanceador de carga.
Exemplo de topologia de peering
O diagrama a seguir mostra um exemplo de balanceamento de carga de serviço com peering do BGP. Há dois endereços IP flutuantes atribuídos aos nós nas respectivas sub-redes. Há dois peerings externos definidos. Cada IP flutuante faz peering com ambos os peerings externos.
Configurar o balanceador de carga do BGP
As seções a seguir explicam como configurar os clusters e a rede externa para usar o balanceador de carga em pacote com o BGP.
Planejar a integração com a infraestrutura externa
Para usar o balanceador de carga em pacote com o BGP, configure a infraestrutura externa:
A infraestrutura externa deve ser configurada para fazer peering com cada nó do plano de controle no cluster para definir a comunicação do plano de controle. Essas sessões de peering são usadas para divulgar os VIPs do plano de controle do Kubernetes.
A infraestrutura externa deve ser configurada para fazer peering com um conjunto de endereços IP flutuantes reservados para a comunicação do plano de dados. Os endereços IP flutuantes são usados para o peering do BGP com os VIPs de Serviço. Recomendamos usar dois endereços IP flutuantes e dois peerings para garantir alta disponibilidade nas sessões do BGP. O processo de reserva de IP flutuante é descrito como parte da configuração do cluster para balanceamento de carga em pacote com o BGP.
Depois de configurar a infraestrutura, adicione as informações de peering do BGP ao arquivo de configuração do cluster. O cluster criado pode iniciar sessões de peering com a infraestrutura externa.
Configurar o cluster para balanceamento de carga em pacote com o BGP
Ao criar um cluster, você deve ativar e configurar o balanceamento de carga em pacote com o BGP
no arquivo de configuração do cluster. No arquivo de configuração do cluster,
ative a rede avançada e atualize a seção loadBalancer
. Além disso,
anexe as especificações aos três recursos personalizados a seguir:
NetworkGatewayGroup
: especifica endereços IP flutuantes usados em sessões de peering do BGP do serviço.BGPLoadBalancer
: especifica, usando seletores de identificador, quais pares são usados para o balanceamento de carga do BGP.BGPPeer
: especifica pares individuais, incluindo um rótulo de seleção, para sessões de peering do BGP.
Veja nas instruções a seguir como configurar o cluster e os três recursos personalizados para configurar o balanceamento de carga em pacote com o BGP.
Adicione o campo
advancedNetworking
ao arquivo de configuração do cluster na seçãoclusterNetwork
e defina comotrue
.Esse campo ativa a capacidade avançada de rede, especificamente o recurso de grupo de gateway de rede.
apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: bm namespace: CLUSTER_NAMESPACE spec: ... clusterNetwork: advancedNetworking: true
Substitua
CLUSTER_NAMESPACE
pelo namespace do cluster. Por padrão, os namespaces de cluster para GKE em Bare Metal são os nomes do cluster precedidos porcluster-
. Por exemplo, se você der o nome detest
ao cluster, o namespace serácluster-test
.Na seção
loadBalancer
do arquivo de configuração do cluster, definamode
comobundled
e adicione um campotype
com um valor debgp
.Esses valores de campo permitem o balanceamento de carga em pacote baseado em BGP.
... loadBalancer: mode: bundled # type can be 'bgp' or 'layer2'. If no type is specified, we default to layer2. type: bgp ...
Para especificar as informações de peering do BGP para o plano de controle, adicione os seguintes campos à seção
loadBalancer
:... # AS number for the cluster localASN: CLUSTER_ASN # List of BGP peers used for the control plane peering sessions. bgpPeers: - ip: PEER_IP asn: PEER_ASN # optional; if not specified, all CP nodes connect to all peers. controlPlaneNodes: # optional - CP_NODE_IP ...
Substitua:
CLUSTER_ASN
: o número do sistema autônomo para o cluster que está sendo criado.PEER_IP
: o endereço IP do dispositivo de peering externo.PEER_ASN
: o número do sistema autônomo da rede que contém o dispositivo de peering externo.CP_NODE_IP
(opcional): o endereço IP do nó do plano de controle que se conecta ao peering externo. Se você não especificar nenhum nó do plano de controle, todos os nós do plano de controle poderão se conectar ao peering externo. Se você especificar um ou mais endereços IP, apenas os nós especificados participarão das sessões de peering.
Você pode especificar vários peerings externos,
bgpPeers
recebe uma lista de mapeamentos. Recomendamos especificar pelo menos dois peerings externos para alta disponibilidade nas sessões do BGP. Veja um exemplo com vários peerings em Configurações de exemplo.Defina os campos
loadBalancer.ports
,loadBalancer.vips
eloadBalancer.addressPools
(valores padrão exibidos).... loadBalancer: ... # Other existing load balancer options remain the same ports: controlPlaneLBPort: 443 # When type=bgp, the VIPs are advertised over BGP vips: controlPlaneVIP: 10.0.0.8 ingressVIP: 10.0.0.1 addressPools: - name: pool1 addresses: - 10.0.0.1-10.0.0.4 ...
Especifique o nó do cluster a ser usado no balanceamento de carga do plano de dados.
Este passo é opcional. Se você não remover a marca de comentário da seção
nodePoolSpec
, os nós do plano de controle serão usados para o balanceamento de carga do plano de dados.... # Node pool used for load balancing data plane (nodes where incoming traffic # arrives. If not specified, this defaults to the control plane node pool. # nodePoolSpec: # nodes: # - address: <Machine 1 IP> ...
Reserve endereços IP flutuantes configurando o recurso personalizado
NetworkGatewayGroup
:Os endereços IP flutuantes são usados em sessões de peering para o balanceamento de carga do plano de dados.
... --- apiVersion: networking.gke.io/v1 kind: NetworkGatewayGroup metadata: name: default namespace: CLUSTER_NAMESPACE spec: floatingIPs: - FLOATING_IP ...
Substitua:
CLUSTER_NAMESPACE
: o namespace do cluster. Por padrão, os namespaces de cluster do GKE em Bare Metal são os nomes do cluster precedidos porcluster-
. Por exemplo, se você der o nome detest
ao cluster, o namespace serácluster-test
.FLOATING_IP
: um endereço IP de uma das sub-redes do cluster. É preciso especificar pelo menos um endereço IP, mas recomendamos que você especifique pelo menos dois endereços IP.
Verifique se o recurso personalizado
NetworkGatewayGroup
tem o nome dedefault
e usa o namespace do cluster. Confira um exemplo da especificação de recurso personalizadoNetworkGatewayGroup
em Exemplos de configurações.(Opcional) Para especificar os pares que serão usados no balanceamento de carga do plano de dados, configure o recurso personalizado
BGPLoadBalancer
:... --- apiVersion: networking.gke.io/v1 kind: BGPLoadBalancer metadata: name: default namespace: CLUSTER_NAMESPACE spec: peerSelector: PEER_LABEL: "true" ...
Substitua:
CLUSTER_NAMESPACE
: o namespace do cluster. Por padrão, os namespaces de cluster do GKE em Bare Metal são os nomes do cluster precedidos porcluster-
. Por exemplo, se você der o nome detest
ao cluster, o namespace serácluster-test
.PEER_LABEL
: o rótulo usado para identificar os pares a serem usados no balanceamento de carga. Qualquer recurso personalizadoBGPPeer
com um rótulo correspondente especifica os detalhes de cada par.
Verifique se o recurso personalizado
BGPLoadBalancer
tem o nome dedefault
e usa o namespace do cluster. Se você não especificar um recurso personalizadoBGPLoadBalancer
, os pares do plano de controle serão usados automaticamente no balanceamento de carga do plano de dados. Para conferir exemplos detalhados, consulte Exemplos de configurações.(Opcional) Especifique os pares externos do plano de dados configurando um ou mais recursos personalizados
BGPPeer
:... --- apiVersion: networking.gke.io/v1 kind: BGPPeer metadata: name: BGP_PEER_NAME namespace: CLUSTER_NAMESPACE labels: PEER_LABEL: "true" spec: localASN: CLUSTER_ASN peerASN: PEER_ASN peerIP: PEER_IP sessions: SESSION_QTY ...
Substitua:
BGP_PEER_NAME
: o nome do par.CLUSTER_NAMESPACE
: o namespace do cluster. Por padrão, os namespaces de cluster do GKE em Bare Metal são os nomes do cluster precedidos porcluster-
. Por exemplo, se você der o nome detest
ao cluster, o namespace serácluster-test
.PEER_LABEL
: o rótulo usado para identificar os pares a serem usados no balanceamento de carga. Esse rótulo precisa ser igual ao rótulo especificado no recurso personalizadoBGPLoadBalancer
.CLUSTER_ASN
: o número do sistema autônomo para o cluster que está sendo criado.PEER_IP
: o endereço IP do dispositivo de peering externo. Recomendamos especificar pelo menos dois pares externos, mas é necessário especificar um, no mínimo.PEER_ASN
: o número do sistema autônomo da rede que contém o dispositivo de peering externo.SESSION_QTY
: o número de sessões a serem criadas para esse par. Recomendamos criar pelo menos duas sessões para garantir a conexão com o par caso um dos seus nós fique inativo.
É possível especificar vários pares externos. Para isso, crie outros recursos personalizados
BGPPeer
. Recomendamos que você especifique pelo menos dois pares externos (dois recursos personalizados) para garantir alta disponibilidade nas sessões do BGP. Se você não especificar um recurso personalizadoBGPPeer
, os pares do plano de controle serão usados automaticamente no balanceamento de carga do plano de dados.Quando você executa
bmctl cluster create
para criar o cluster, as verificações de simulação são executadas. Entre outras verificações, as verificações de simulação validam a configuração de peering do BGP para o plano de controle e comunicam problemas diretamente à estação de trabalho de administrador antes de criar o cluster.Em caso de sucesso, os recursos de balanceamento de carga do BGP adicionados (NetworkGatewayGroup, BGPLoadBalancer e BGPPeer) entram no cluster de administrador no namespace do cluster de usuário. Use o arquivo kubeconfig do cluster de administrador ao fazer atualizações para esses recursos. Em seguida, o cluster de administrador reconcilia as alterações no cluster de usuário. Se você editar esses recursos diretamente no cluster de usuário, o cluster de administrador substituirá as alterações nas reconciliações subsequentes.
Como divulgar vários próximos saltos por sessão com o recurso ADD-PATH
do BGP
Recomendamos usar o recurso ADD-PATH
do BGP nas sessões de
peering, conforme especificado na
RFC 7911.
Por padrão, o protocolo do BGP permite que apenas um próximo salto seja divulgado aos
peerings para um único prefixo. O ADD-PATH
do BGP permite divulgar vários próximos saltos
do mesmo prefixo. Quando ADD-PATH
é usado com o balanceamento de carga em pacote baseado em
BGP, o cluster pode divulgar vários nós de cluster como nós de front-end
(próximos saltos) de um serviço de balanceador de carga (prefixo). Ative o ECMP na rede para
que o tráfego possa ser distribuído por vários caminhos. A capacidade de distribuir o tráfego
divulgando vários nós de cluster como próximos saltos fornece um escalonamento aprimorado da
capacidade do plano de dados para balanceamento de carga.
Se o dispositivo de peering externo, como um roteador ou switch de topo de rack (ToR)
for compatível com o ADD-PATH
do BGP, basta ativar a extensão de recebimento.
O balanceamento de carga em pacote com o BGP funciona sem o recurso ADD-PATH
, mas a
restrição de divulgar um único nó de balanceamento de carga por sessão de peering
limita a capacidade do plano de dados do balanceador de carga. Sem ADD-PATH
,
os clusters do GKE em bare metal escolhem nós no pool de nós do balanceador de carga para divulgar
e tentam distribuir os próximos saltos para diferentes VIPs nos vários nós.
Restringir o peering do BGP aos nós do balanceador de carga
Os clusters do GKE em bare metal atribuem automaticamente endereços IP flutuantes em qualquer nó na mesma sub-rede que o endereço IP flutuante. As sessões do BGP são iniciadas por esses endereços IP mesmo que não fiquem nos nós do balanceador de carga. Esse comportamento é padrão, porque separamos o plano de controle (BGP) do plano de dados (pools de nós do balanceador de carga).
Se você quiser restringir o conjunto de nós que podem ser usados para o peering do BGP, designe uma sub-rede a ser usada apenas para nós do balanceador de carga. Isso significa que você pode configurar todos os nós dessa sub-rede para ficar no pool de nós do balanceador de carga. Em seguida, ao configurar endereços IP flutuantes que são usados para o peering do BGP, certifique-se de que sejam dessa mesma sub-rede. Os clusters do GKE em bare metal fazem com que as atribuições de endereços IP flutuantes e o peering do BGP ocorram apenas a partir dos nós do balanceador de carga.
Configurar o balanceamento de carga do BGP com rede de pilha dupla
A partir da versão 1.14.0 do GKE em bare metal, o balanceador de carga em pacote baseado no BGP oferece suporte a IPv6. Com a introdução da compatibilidade com IPv6, é possível configurar os serviços LoadBalancer de IPv6 e de pilha dupla em um cluster configurado para uma rede de pilha dupla. Nesta seção, descrevemos as alterações necessárias para configurar o balanceamento de carga em pacote de pilha dupla com o BGP.
Para ativar os serviços LoadBalancer de pilha dupla, as seguintes alterações de configuração são necessárias:
O cluster precisa ser configurado para rede de pilha dupla:
Especifique os CIDRs de serviço IPv4 e IPv6 no arquivo de configuração do cluster em
spec.clusterNetwork.services.cidrBlocks
.Defina recursos ClusterCIDRConfig apropriados para especificar intervalos CIDR IPv4 e IPv6 para pods.
Para mais informações sobre como configurar um cluster para rede de pilha dupla, consulte Redes de pilha dupla de IPv4/IPv6.
Especifique um pool de endereços IPv6 no arquivo de configuração do cluster em
spec.loadBalancer.addressPools
. Para que o MetalLB aloque endereços IP para um serviço de pilha dupla, é necessário que haja pelo menos um pool de endereços com endereços do formato IPv4 e IPv6.
O exemplo de configuração a seguir destaca as alterações necessárias para o balanceamento de carga em pacote de pilha dupla com o BGP:
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: bm
namespace: cluster-bm
spec:
...
clusterNetwork:
services:
cidrBlocks:
# Dual-stack Service IP addresses must be provided
- 10.96.0.0/16
- fd00::/112
...
loadBalancer:
mode: bundled
# type can be 'bgp' or 'layer2'. If no type is specified we default to layer2.
type: bgp
# AS number for the cluster
localASN: 65001
bgpPeers:
- ip: 10.8.0.10
asn: 65002
- ip: 10.8.0.11
asn: 65002
addressPools:
- name: pool1
addresses:
# Each address must be either in the CIDR form (1.2.3.0/24)
# or range form (1.2.3.1-1.2.3.5).
- "203.0.113.1-203.0.113.20"
- "2001:db8::1-2001:db8::20" # Note the additional IPv6 range
... # Other cluster config info 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: ClusterCIDRConfig
metadata:
name: cluster-wide-1
namespace: cluster-bm
spec:
ipv4:
cidr: "192.168.0.0/16"
perNodeMaskSize: 24
ipv6:
cidr: "2001:db8:1::/112"
perNodeMaskSize: 120
Limitações para balanceamento de carga em pacote de pilha dupla com BGP
Ao configurar seu cluster para usar o balanceamento de carga em pacote de pilha dupla com o BGP, observe as seguintes limitações:
O balanceamento de carga do plano de controle IPv6 não é compatível.
As sessões IPv6 do BGP não são compatíveis, mas as rotas IPv6 podem ser exibidas nas sessões IPv4 usando o BGP multiprotocolo.
Exemplos de configurações
As seções a seguir explicam como configurar o balanceamento de carga baseado em BGP para diferentes opções ou comportamentos.
Configurar para que todos os nós que usem os mesmos peerings
Conforme mostrado no diagrama a seguir, essa configuração resulta em um conjunto de
peerings externos (10.8.0.10
e 10.8.0.11
) que podem ser acessados por todos os nós.
Os nós do plano de controle (10.0.1.10
, 10.0.1.11
e 10.0.2.10
) e os endereços IP
flutuantes (10.0.1.100
e 10.0.2.100
) atribuídos aos nós do plano de dados
alcançam os peerings.
Os mesmos peerings externos podem ser acessados por um dos endereços IP
flutuantes (10.0.1.100
ou 10.0.2.100
) reservados para o peering de
serviços de loadBalancer
. Os endereços IP flutuantes podem ser atribuídos a nós que estão
na mesma sub-rede.
Conforme mostrado nesta amostra de configuração de clusterm configure os peerings
para os nós do plano de controle, bgpPeers
, sem especificar controlPlaneNodes
.
Quando nenhum nó é especificado para os peerings, todos os nós do plano de controle se conectam a
todos os peerings.
Especifique os endereços IP flutuantes a serem usados para sessões de peering de balanceamento de carga de
serviço no recurso personalizado NetworkGatewayGroup
. Neste exemplo, como nenhum
BGPLoadBalancer
é especificado, os pares do plano de controle são usados automaticamente
nas sessões do BGP do plano de dados.
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: bm
namespace: cluster-bm
spec:
...
loadBalancer:
mode: bundled
# type can be 'bgp' or 'layer2'. If no type is specified, we default to layer2.
type: bgp
# AS number for the cluster
localASN: 65001
bgpPeers:
- ip: 10.8.0.10
asn: 65002
- ip: 10.8.0.11
asn: 65002
... (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
Configurar nós específicos do plano de controle para fazer peering com peerings externos específicos
Conforme mostrado no diagrama a seguir, essa configuração resulta em dois nós do
plano de controle (10.0.1.10
e 10.0.1.11
) com um peering externo
(10.0.1.254
). O terceiro nó do plano de controle (10.0.2.10
) faz peering com
outro peering externo (10.0.2.254
). Essa configuração é útil quando você
não quer que todos os nós se conectem a todos os peerings. Por exemplo, você pode querer que os nós de
plano de controle façam peering apenas com os switches de topo de rack (ToR) correspondentes.
Os mesmos peerings externos podem ser acessados por um dos endereços IP
flutuantes (10.0.1.100
ou 10.0.2.100
) reservados para sessões de peering do
balanceamento de carga de serviço. Os endereços IP flutuantes podem ser atribuídos a
nós que estejam na mesma sub-rede.
Conforme mostrado na amostra de configuração de cluster a seguir, você restringe quais
nós do plano de controle podem se conectar a um determinado peering especificando os endereços IP
no campo controlPlaneNodes
para o peering na seção bgpPeers
.
Especifique os endereços IP flutuantes a serem usados para sessões de peering de balanceamento de carga de
serviço no recurso personalizado NetworkGatewayGroup
. Neste exemplo, como nenhum
BGPLoadBalancer
é especificado, os pares do plano de controle são usados automaticamente
nas sessões do BGP do plano de dados.
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: bm
namespace: cluster-bm
spec:
...
loadBalancer:
mode: bundled
# type can be 'bgp' or 'layer2'. If no type is specified, we default to layer2.
type: bgp
# AS number for the cluster
localASN: 65001
bgpPeers:
- ip: 10.0.1.254
asn: 65002
controlPlaneNodes:
- 10.0.1.10
- 10.0.1.11
- ip: 10.0.2.254
asn: 65002
controlPlaneNodes:
- 10.0.2.10
... (other cluster config omitted)
---
apiVersion: networking.gke.io/v1
kind: NetworkGatewayGroup
name: default
namespace: cluster-bm
spec:
floatingIPs:
- 10.0.1.100
- 10.0.2.100
Configurar o plano de controle e o plano de dados separadamente
Conforme mostrado no diagrama a seguir, essa configuração resulta em dois nós do
plano de controle (10.0.1.10
e 10.0.1.11
) fazendo peering com um peering externo
(10.0.1.254
). O terceiro nó do plano de controle (10.0.2.11
) faz peering com
outro peering externo (10.0.2.254
).
Um terceiro peering externo (10.0.3.254
) pode ser acessado por um dos endereços IP
flutuantes (10.0.3.100
ou 10.0.3.101
) reservados para sessões
de peering de balanceamento de carga de serviço. Os endereços IP flutuantes podem ser atribuídos a
nós que estejam na mesma sub-rede.
Conforme mostrado na amostra de configuração de cluster a seguir, você restringe quais
nós do plano de controle podem se conectar a um determinado peering especificando os endereços IP
no campo controlPlaneNodes
para o peering na seção bgpPeers
.
Especifique os endereços IP flutuantes a serem usados para sessões de peering de balanceamento de carga de
serviço no recurso personalizado NetworkGatewayGroup
.
Para configurar o balanceamento de carga do plano de dados:
Especifique o peering externo para o plano de dados no recurso
BGPPeer
e adicione um identificador para usar na seleção do peering, comocluster.baremetal.gke.io/default-peer: "true"
.Especifique o rótulo correspondente para o campo
peerSelector
no recursoBGPLoadBalancer
.
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: bm
namespace: cluster-bm
spec:
...
loadBalancer:
mode: bundled
# type can be 'bgp' or 'layer2'. If no type is specified, we default to layer2.
type: bgp
# AS number for the cluster
localASN: 65001
bgpPeers:
- ip: 10.0.1.254
asn: 65002
controlPlaneNodes:
- 10.0.1.10
- 10.0.1.11
- ip: 10.0.2.254
asn: 65002
controlPlaneNodes:
- 10.0.2.11
... (other cluster config omitted)
---
apiVersion: networking.gke.io/v1
kind: NetworkGatewayGroup
name: default
namespace: cluster-bm
spec:
floatingIPs:
- 10.0.3.100
- 10.0.3.101
---
apiVersion: networking.gke.io/v1
kind: BGPLoadBalancer
metadata:
name: default
namespace: cluster-bm
spec:
peerSelector:
cluster.baremetal.gke.io/default-peer: "true"
---
apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
name: bgppeer1
namespace: cluster-bm
labels:
cluster.baremetal.gke.io/default-peer: "true"
spec:
localASN: 65001
peerASN: 65002
peerIP: 10.0.3.254
sessions: 2
Alterar a configuração de balanceamento de carga baseada em BGP
Depois de criar o cluster para usar o balanceamento de carga em pacote com o BGP, algumas configurações podem ser atualizadas. Outras, no entanto, não podem ser atualizadas após a criação do cluster.
Use o arquivo kubeconfig do cluster de administrador ao fazer atualizações subsequentes nos recursos relacionados ao BGP (NetworkGatewayGroup, BGPLoadBalancer e BGPPeer). Em seguida, o cluster de administrador reconcilia as alterações no cluster de usuário. Se você editar esses recursos diretamente no cluster de usuário, o cluster de administrador substituirá as alterações nas reconciliações subsequentes.
Plano de controle
As informações de peering do BGP do plano de controle podem ser atualizadas no recurso Cluster
.
É possível adicionar ou remover pares especificados na seção de balanceamento de carga
do plano de controle.
As seções a seguir descrevem as práticas recomendadas para atualizar as informações de peering do BGP do plano de controle.
Verificar o status dos pares antes da atualização
Para minimizar o risco de configurar os pares incorretamente, verifique se as sessões de peering do BGP
do plano de controle estão no estado esperado antes de fazer alterações. Por exemplo,
se você espera que todas as sessões de peering do BGP estejam ativas no momento, verifique se
todos os pods bgp-advertiser
informam ready
, indicando que as sessões estão ativas.
Se o status atual não corresponde ao esperado, corrija o problema antes
de atualizar a configuração de peering.
Para saber como recuperar detalhes da sessão do BGP do plano de controle, consulte Sessões do BGP do plano de controle.
Atualizar pares de maneira controlada
Se possível, atualize um par de cada vez para isolar possíveis problemas:
- Adicione ou atualize um único peering.
- Aguarde a configuração ser corrigida.
- Verifique se o cluster pode se conectar ao par novo ou atualizado.
- Remova os pares antigos ou desnecessários.
Serviços
Para atualizar os pools de endereços e as configurações de nó do balanceador de carga, edite nodePoolSpec
no
recurso Cluster
.
Para modificar a configuração de peering do BGP após a criação do cluster,
edite os recursos personalizados NetworkGatewayGroup
e BGPLoadBalancer
. Qualquer
alteração das informações de peering nessas respostas personalizadas é refletida
na configuração da solução de balanceamento de carga no cluster de destino.
Faça atualizações nos recursos de origem no namespace do cluster somente no cluster de administrador. Todas as alterações feitas nos recursos no cluster de destino (usuário) são substituídas.
Solução de problemas
As seções a seguir explicam como acessar informações de solução de problemas para o balanceamento de carga em pacote com o BGP.
Sessões do BGP do plano de controle
A configuração de peering do BGP do plano de controle é validada com verificações de simulação durante a criação do cluster. As verificações de simulação tentam:
- estabelecer uma conexão do BGP com cada peering;
- divulgar o VIP do plano de controle;
- verificar se o nó do plano de controle pode ser acessado usando o VIP.
Se a criação do cluster falhar nas verificações de simulação, veja se há erros nos registros de
verificação de simulação. Os arquivos de registro de verificação de simulação com datas estão localizados no
diretório baremetal/bmctl-workspace/CLUSTER_NAME/log
.
No ambiente de execução, os locutores do BGP do plano de controle são executados como pods estáticos em cada nó do
plano de controle e gravam informações de evento nos registros. Esses pods estáticos incluem
"bgpadvertiser" no nome. Portanto, use o seguinte comando kubectl get pods
para ver o status dos pods de locutores do BGP:
kubectl -n kube-system get pods | grep bgpadvertiser
Quando os pods estão funcionando corretamente, a resposta é semelhante a esta:
bgpadvertiser-node-01 1/1 Running 1 167m
bgpadvertiser-node-02 1/1 Running 1 165m
bgpadvertiser-node-03 1/1 Running 1 163m
Use o seguinte comando para visualizar os registros do pod bgpadvertiser-node-01
:
kubectl -n kube-system logs bgpadvertiser-node-01
Sessões do BGP de serviço
O recurso BGPSession
fornece informações sobre as sessões atuais do BGP. Para
receber informações da sessão, verifique primeiro as sessões atuais e, em seguida, recupere o
recurso BGPSession
de uma das sessões.
Use o seguinte comando kubectl get
para listar as sessões atuais:
kubectl -n kube-system get bgpsessions
O comando retorna uma lista de sessões como este exemplo:
NAME LOCAL ASN PEER ASN LOCAL IP PEER IP STATE LAST REPORT
10.0.1.254-node-01 65500 65000 10.0.1.178 10.0.1.254 Established 2s
10.0.1.254-node-02 65500 65000 10.0.3.212 10.0.1.254 Established 2s
10.0.3.254-node-01 65500 65000 10.0.1.178 10.0.3.254 Established 2s
10.0.3.254-node-02 65500 65000 10.0.3.212 10.0.3.254 Established 2s
Use o seguinte comando kubectl describe
para conseguir o recurso BGPSession
para a sessão 10.0.1.254-node-01
do BGP:
kubectl -n kube-system describe bgpsession 10.0.1.254-node-01
O recurso BGPSession
retornado deve ser semelhante ao seguinte
exemplo:
Name: 10.0.1.254-node-01
Namespace: kube-system
Labels: <none>
Annotations: <none>
API Version: networking.gke.io/v1
Kind: BGPSession
Metadata:
(omitted)
Spec:
Floating IP: 10.0.1.178
Local ASN: 65500
Local IP: 10.0.1.178
Node Name: node-01
Peer ASN: 65000
Peer IP: 10.0.1.254
Status:
Advertised Routes:
10.0.4.1/32
Last Report Time: 2021-06-14T22:09:36Z
State: Established
Use o comando kubectl get
para conseguir os recursos BGPAdvertisedRoute
:
kubectl -n kube-system get bgpadvertisedroutes
A resposta, que precisa ser parecida com exemplo a seguir, mostra as rotas que estão sendo divulgadas:
NAME PREFIX METRIC
default-default-load-balancer-example 10.1.1.34/32
default-gke-system-istio-ingress 10.1.1.107/32
Use kubectl describe
para visualizar detalhes sobre os próximos saltos que cada rota está
divulgando.
Como recuperar o acesso ao VIP do plano de controle em clusters autogerenciados
Para recuperar o acesso ao VIP do plano de controle em um cluster de administrador, híbrido
ou independente, é necessário atualizar a configuração do BGP no cluster. Como mostrado
no exemplo de comando a seguir, use SSH para se conectar ao nó e, em seguida, kubectl
para abrir o recurso do cluster para edição.
ssh -i IDENTITY_FILE root@CLUSTER_NODE_IP
kubectl --kubeconfig /etc/kubernetes/admin.conf edit -n CLUSTER_NAMESPACE cluster CLUSTER_NAME
Substitua:
IDENTITY_FILE
: o nome do arquivo de identidade SSH que contém a chave de identidade para autenticação de chave pública;CLUSTER_NODE_IP
: o endereço IP do nó do cluster;CLUSTER_NAMESPACE
: o namespace do cluster.CLUSTER_NAME
: o nome do cluster.
Modifique a configuração de peering do BGP no objeto de cluster. Depois de salvar a nova
configuração do cluster, monitore a integridade dos pods bgpadvertiser
. Se a
configuração funcionar, os pods serão reiniciados e se tornarão íntegros quando se conectarem
aos pares.
Verificação manual do BGP
Nesta seção, você verá instruções para verificar manualmente a configuração do BGP. O procedimento define uma conexão do BGP de longa duração para você depurar a configuração do BGP com a equipe de rede. Use este procedimento para verificar sua configuração antes de criar um cluster ou use-o se as verificações de simulação relacionadas ao BGP falharem.
As verificações de simulação automatizam as seguintes tarefas de verificação do BGP:
- Configure uma conexão do BGP com um peering.
- Divulgar o VIP do plano de controle;
- Verifique se o tráfego enviado de todos os outros nós do cluster para o VIP alcança o nó do balanceador de carga atual.
Essas tarefas são executadas para cada peering do BGP em cada nó do plano de controle. Transmitir essas verificações é fundamental ao criar um cluster. No entanto, as verificações de simulação não criam conexões de longa duração. Portanto, é difícil depurar falhas.
As seções a seguir fornecem instruções para configurar uma conexão do BGP e anunciar uma rota de uma única máquina de cluster para um peering. Para testar várias máquinas e vários pares, repita as instruções usando uma combinação diferente de máquina e peering.
Lembre-se de que as conexões BGP são estabelecidas a partir dos nós do plano de controle. Portanto, tente este procedimento em um dos nós do plano de controle planejados.
Receber o binário do programa de teste do BGP
Siga as etapas desta seção na estação de trabalho do administrador. Estas etapas recebem o
programa bgpadvertiser
usado para testar as conexões do BGP e o copiam para
os nós do plano de controle em que você quer testar.
Extraia a imagem do docker do ansible-runner.
Sem espelho do registro
Se você não usar um espelho de registro, execute os seguintes comandos para extrair a imagem do Docker do ansible-runner:
gcloud auth login gcloud auth configure-docker docker pull gcr.io/anthos-baremetal-release/ansible-runner:1.10.0-gke.13
Com espelho de registro
Se você usar um espelho de registro, execute os seguintes comandos para extrair a imagem do Docker do ansible-runner:
docker login REGISTRY_HOST docker pull REGISTRY_HOST/anthos-baremetal-release/ansible-runner:1.10.0-gke.13
Substitua REGISTRY_HOST pelo nome do servidor espelhado do registro.
Extrair o binário
bgpadvertiser
.Sem espelho do registro
Para extrair o binário
bgpadvertiser
, execute o seguinte comando:docker cp $(docker create gcr.io/anthos-baremetal-release/ansible-runner:1.10.0-gke.13):/bgpadvertiser .
Com espelho de registro
Para extrair o binário
bgpadvertiser
, execute o seguinte comando:docker cp $(docker create REGISTRY_HOST/anthos-baremetal-release/ansible-runner:1.10.0-gke.13):/bgpadvertiser .
Para copiar o binário
bgpadvertiser
para o nó do plano de controle que você quer testar, execute o seguinte comando:scp bgpadvertiser USERNAME>@CP_NODE_IP:/tmp/
Substitua:
USERNAME
: o nome de usuário usado para acessar o nó do plano de controle.CP_NODE_IP
: o endereço IP do nó do plano de controle.
Configurar uma conexão do BGP
Execute as etapas desta seção em um nó do plano de controle.
Crie um arquivo de configuração no nó em
/tmp/bgpadvertiser.conf
que tenha a seguinte aparência:localIP: NODE_IP localASN: CLUSTER_ASN peers: - peerIP: PEER_IP peerASN: PEER_ASN
Substitua:
NODE_IP
: endereço IP do nó do plano de controle em que você está.CLUSTER_ASN
: o número do sistema autônomo usado pelo cluster.PEER_IP
: o endereço IP de um dos pares externos que você quer testar.PEER_ASN
: o número do sistema autônomo da rede que contém o dispositivo de peering externo.
Execute o daemon
bgpadvertiser
, substituindo o plano de controle VIP no seguinte comando:/tmp/bgpadvertiser --config /tmp/bgpadvertiser.conf --advertise-ip CONTROL_PLANE_VIP
Substitua
CONTROL_PLANE_VIP
pelo endereço IP que você usará para o VIP do plano de controle. Esse comando faz com que o anunciante do BGP anuncie esse endereço em apps semelhantes.Veja a saída do programa.
Nesse ponto, o daemon
bgpadvertiser
é iniciado, tenta se conectar ao peering e anuncia o VIP. O programa exibe periodicamente mensagens (veja o exemplo de saída a seguir) que incluemBGP_FSM_ESTABLISHED
quando a conexão do BGP é estabelecida.{"level":"info","ts":1646788815.5588224,"logger":"BGPSpeaker","msg":"GoBGP gRPC debug endpoint disabled","localIP":"21.0.101.64"} {"level":"info","ts":1646788815.5596201,"logger":"BGPSpeaker","msg":"Started.","localIP":"21.0.101.64"} I0309 01:20:15.559667 1320826 main.go:154] BGP advertiser started. I0309 01:20:15.561434 1320826 main.go:170] Health status HTTP server started at "127.0.0.1:8080". INFO[0000] Add a peer configuration for:21.0.101.80 Topic=Peer {"level":"info","ts":1646788815.5623345,"logger":"BGPSpeaker","msg":"Peer added.","localIP":"21.0.101.64","peer":"21.0.101.80/4273481989"} DEBU[0000] IdleHoldTimer expired Duration=0 Key=21.0.101.80 Topic=Peer I0309 01:20:15.563503 1320826 main.go:187] Peer applied: {4273481989 21.0.101.80} DEBU[0000] state changed Key=21.0.101.80 Topic=Peer new=BGP_FSM_ACTIVE old=BGP_FSM_IDLE reason=idle-hold-timer-expired DEBU[0000] create Destination Nlri=10.0.0.1/32 Topic=Table {"level":"info","ts":1646788815.5670514,"logger":"BGPSpeaker","msg":"Route added.","localIP":"21.0.101.64","route":{"ID":0,"Metric":0,"NextHop":"21.0.101.64","Prefix":"10.0.0.1/32","VRF":""}} I0309 01:20:15.568029 1320826 main.go:199] Route added: {0 0 21.0.101.64 10.0.0.1/32 } I0309 01:20:15.568073 1320826 main.go:201] BGP advertiser serving... DEBU[0005] try to connect Key=21.0.101.80 Topic=Peer DEBU[0005] state changed Key=21.0.101.80 Topic=Peer new=BGP_FSM_OPENSENT old=BGP_FSM_ACTIVE reason=new-connection DEBU[0005] state changed Key=21.0.101.80 Topic=Peer new=BGP_FSM_OPENCONFIRM old=BGP_FSM_OPENSENT reason=open-msg-received INFO[0005] Peer Up Key=21.0.101.80 State=BGP_FSM_OPENCONFIRM Topic=Peer DEBU[0005] state changed Key=21.0.101.80 Topic=Peer new=BGP_FSM_ESTABLISHED old=BGP_FSM_OPENCONFIRM reason=open-msg-negotiated DEBU[0005] sent update Key=21.0.101.80 State=BGP_FSM_ESTABLISHED Topic=Peer attributes="[{Origin: i} 4273481990 {Nexthop: 21.0.101.64}]" nlri="[10.0.0.1/32]" withdrawals="[]" DEBU[0006] received update Key=21.0.101.80 Topic=Peer attributes="[{Origin: i} 4273481989 4273481990 {Nexthop: 21.0.101.64}]" nlri="[10.0.0.1/32]" withdrawals="[]" DEBU[0006] create Destination Nlri=10.0.0.1/32 Topic=Table DEBU[0035] sent Key=21.0.101.80 State=BGP_FSM_ESTABLISHED Topic=Peer data="&{{[] 19 4} 0x166e528}" DEBU[0065] sent Key=21.0.101.80 State=BGP_FSM_ESTABLISHED Topic=Peer data="&{{[] 19 4} 0x166e528}"
Se você não vir essas mensagens, verifique novamente os parâmetros de configuração do BGP no arquivo de configuração e confirme com o administrador da rede. Agora você tem uma conexão do BGP configurada. Você pode verificar com o administrador da rede se vê a conexão estabelecida no lado dele e se vê a rota anunciada para ele.
Teste de tráfego
Para testar se a rede pode encaminhar tráfego para o VIP, adicione o VIP ao
nó do plano de controle que está executando bgpadvertiser
. Execute o seguinte
comando em um terminal diferente para deixar bgpadvertiser
em execução:
Adicione o VIP ao nó do plano de controle:
ip addr add CONTROL_PLANE_VIP/32 dev INTF_NAME
Substitua:
CONTROL_PLANE_VIP
: o argumento--advertise-ip
do VIP dobgpadvertiser
.INTF_NAME
: a interface do Kubernetes no nó. Ou seja, a interface que tem o endereço IP que você colocou na configuração dos clusters do GKE em bare metal paraloadBalancer.bgpPeers.controlPlaneNodes
.
Dê um ping no VIP a partir de um nó diferente:
ping CONTROL_PLANE_VIP
Se o ping não funcionar, pode haver um problema com a configuração do BGP no dispositivo de rede. Trabalhe com seu administrador de rede para verificar a configuração e resolver o problema.
Limpar
Siga estas etapas para redefinir o nó depois de verificar manualmente se o BGP está funcionando. Se você não redefinir o nó corretamente, a configuração manual poderá interferir na verificação de simulação ou na criação do cluster subsequente.
Remova o VIP do nó do plano de controle se você o tiver adicionado para o teste de tráfego:
ip addr del CONTROL_PLANE_VIP/32 dev INTF_NAME
No nó do plano de controle, pressione
Ctrl
+C
no terminalbgpadvertiser
para interromper o bgpadvertiser.Verifique se nenhum processo
bgpadvertiser
está em execução:ps -ef | grep bgpadvertiser
Se houver processos em execução, interrompa-os usando o comando
kill
.