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.flatIPv4comotrue.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 comotrue, o campospec.clusterNetwork.pods.cidrBlocksé ignorado e pode ser omitido. No entanto, tem de adicionar um manifestoClusterCIDRConfigsno 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.100O 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 personalizadoNetworkGatewayGroup.Anexe um manifesto
FlatIPModeao ficheiro de configuração do cluster:O nome do recurso
FlatIPModetem de serdefaulte o espaço de nomes é o espaço de nomes do cluster. O valorpeerSelectorcorresponde às etiquetas nos objetos BGPPeerbgppeer1ebgppeer2(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: 2Anexe 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: 24ClusterCIDRConfig é 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 personalizadoClusterCIDRConfig, incluindo exemplos de utilização, consulte Compreenda o recurso personalizado ClusterCIDRConfig.Crie o cluster:
bmctl create clusterPara 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_KUBECONFIGA resposta deve ter um aspeto semelhante a este:
NAMESPACE NAME AGE cluster-bm default 2d17hVerifique 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_KUBECONFIGA resposta deve ter um aspeto semelhante a este:
NAME AGE default 2d17hObtenha os recursos
BGPSessionspara ver as sessões atuais:kubectl get bgpsessions -A --kubeconfig USER_KUBECONFIGA 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 2sObtenha os recursos
BGPAdvertisedRoutepara ver as rotas atualmente anunciadas:kubectl get bgpadvertisedroutes -A --kubeconfig USER_KUBECONFIGA 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/24Os 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 anunciado222.2.0.0/24é222.22.208.240.