Configurar o gateway de conectividade de rede

Neste documento, mostramos como configurar o Network Connectivity Gateway para um cluster no Google Distributed Cloud Virtual para Bare Metal.

Às vezes, há pods em execução em um cluster que precisa se comunicar com as cargas de trabalho em execução em uma nuvem privada virtual (VPC). A comunicação precisa ser segura. E, talvez, você precise que essa comunicação ocorra em uma rede simples sem usar um servidor proxy. O gateway de conectividade de rede permite esse tipo de comunicação.

O gateway de conectividade de rede é executado como um pod no cluster. Conforme mostrado no diagrama a seguir, essa solução fornece túneis IPsec para o tráfego de pods no cluster para VMs em uma VPC. Quando o pod de gateway recebe prefixos para sub-redes VPC em uma sessão do protocolo de gateway de borda (BGP, na sigla em inglês), ele configura o encaminhamento usando o Dataplane V2 (em inglês). Quando outros pods enviam tráfego para um endereço com um desses prefixos, o tráfego é direcionado para o pod do gateway. Em seguida, o pod do gateway roteia o tráfego por um túnel IPsec para o Google Cloud.

Diagrama do Network Connectivity Gateway para GDCV para Bare Metal

O gateway de conectividade de rede não é compatível com os seguintes recursos:

  • IPv6 para VPN de alta disponibilidade (e BGP)
  • MD5 para BGP
  • Detecção de encaminhamento bidirecional (BFD, na sigla em inglês) para BGP

Criar recursos do Google Cloud

Antes de ativar o gateway de conectividade de rede em um cluster, você precisa ter os seguintes recursos do Google Cloud:

  • Um Cloud Router

  • Um gateway de VPN de alta disponibilidade

  • Um gateway de VPN de peering: uma interface

  • Dois túneis de VPN

  • Duas sessões do BGP: uma para cada túnel VPN

Para informações sobre como criar e configurar esses recursos, consulte Como criar um gateway de VPN de alta disponibilidade para um gateway de VPN de peering.

Ao criar esses recursos, colete as seguintes informações e disponibilize-as para mais tarde:

  • Os dois endereços IP externos atribuídos pelo Google Cloud ao gateway da VPN de alta disponibilidade.

  • O endereço IP público do tráfego IPsec/VPN que sai da sua organização. Esse endereço pode ser resultado de uma conversão de endereço de rede (NAT).

  • Sua chave pré-compartilhada.

  • O número do sistema autônomo (ASN, na sigla em inglês) atribuído ao Cloud Router para sessões do BGP.

  • O ASN que você escolheu para usar no cluster local para sessões do BGP.

  • Para cada sessão do BGP, o endereço link-local, como 169.254.1.1, será usado pelo Cloud Router e o endereço link-local a ser usado. no cluster local.

Para informações sobre como encontrar os detalhes da sua configuração de sessão do BGP, consulte Visualizar a configuração da sessão do BGP.

Requisitos de cluster

O download da ferramenta de linha de comando do Gateway de conectividade de rede, ncgctl-v1.12.0-linux-amd64.tar.gz, é compatível apenas com a versão 1.12 do GDCV para Bare Metal. Se você estiver criando um novo cluster da versão 1.12.0, ative o gateway de conectividade de rede com uma anotação no arquivo de configuração do cluster.

Para ativar o gateway de conectividade de rede durante a criação do cluster:

  1. No arquivo de configuração do cluster, adicione a anotação baremetal.cluster.gke.io/enable-gng: "true".

    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      annotations:
        baremetal.cluster.gke.io/enable-gng: "true"
      name: my-cluster
      namespace: cluster-my-cluster
    spec:
    ...
      anthosBareMetalVersion: 1.12.0
      ...
    
  2. Use bmctl create para criar o cluster:

    bmctl create cluster -c CLUSTER_NAME
    

    Substitua CLUSTER_NAME pelo nome que você especificou ao criar o arquivo de configuração do cluster. Para mais informações sobre como criar clusters, consulte Visão geral da criação de clusters.

Download

Para fazer o download do ncgctl, a ferramenta de linha de comando do gateway de conectividade de rede, siga estas etapas:

  1. Faça o download dos componentes do gateway de conectividade de rede e das definições de recursos personalizados:

    gsutil cp gs://ncg-release/anthos-baremetal/ncgctl-v1.12.0-linux-amd64.tar.gz .
    
  2. Extraia o arquivo:

    tar -xvzf ncgctl-v1.12.0-linux-amd64.tar.gz
    

Instalar

Para instalar ncgctl, siga estas etapas:

  1. Execute verificações de simulação para garantir que o cluster atenda aos pré-requisitos. Por exemplo, verifique se o Dataplane V2 está ativado.

    ./bin/ncgctl --verify --kubeconfig CLUSTER_KUBECONFIG
    

    Substitua CLUSTER_KUBECONFIG pelo caminho do seu arquivo kubeconfig do cluster.

  2. Instalar o gateway de conectividade de rede

    ./bin/ncgctl --install --kubeconfig CLUSTER_KUBECONFIG
    
  3. Se você tiver um cluster versão 1.12.0 atual, poderá usar o seguinte comando ncgctl para ativar o gateway de conectividade de rede:

    ./bin/ncgctl --enable-ncg-on-existing-cluster
    

    O comando ncgctl aceita -e como uma versão abreviada da sinalização de ativação.

  4. Para ver mais atalhos e outros comandos de ajuda, use o seguinte comando:

    ./bin/ncgctl --help
    

Crie um secret para sua chave pré-compartilhada

Os gateways em qualquer uma das extremidades dos túneis de IPsec usam um secret que contém sua chave pré-compartilhada para autenticação.

Para criar o cluster, siga estas etapas:

  1. Crie um arquivo chamado psk-secret.yaml com os seguintes detalhes do manifesto Secret:

    apiVersion: v1
    kind: Secret
    metadata:
      name: "ike-key"
      namespace: "kube-system"
    data:
      psk: PRE_SHARED_KEY
    

    Substitua PRE_SHARED_KEY por uma chave pré-compartilhada codificada em base64. Se você tiver uma chave em texto simples, codifique-a para o formato base64 antes de criar esse secret. Por exemplo, se o console do Google Cloud gerou uma chave para você, ela está em texto simples e você precisa codificá-la. Para codificar uma chave em base64:

    echo -n PLAINTEXT_KEY | base64
    
  2. Criar o secret:

    kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f psk-secret.yaml
    

Criar dois recursos personalizados do OverlayVPNTunnel

Para iniciar duas sessões IPsec, crie dois recursos personalizados OverlayVPNTunnel.

  1. Crie um arquivo chamado overlay-vpn-tunnels.yaml com os seguintes detalhes do manifesto OverlayVPNTunnel:

    apiVersion: networking.gke.io/v1alpha1
    kind: OverlayVPNTunnel
    metadata:
      namespace: "kube-system"
      name: TUNNEL_1_NAME
    spec:
      ikeKey:
        name: "ike-key"
        namespace: "kube-system"
      peer:
        publicIP: PEER_PUBLIC_IP_1
      self:
        publicIP: SELF_PUBLIC_IP
      localTunnelIP: SELF_LOCAL_TUNNEL_IP_1
    ---
    apiVersion: networking.gke.io/v1alpha1
    kind: OverlayVPNTunnel
    metadata:
      namespace: "kube-system"
      name: TUNNEL_2_NAME
    spec:
      ikeKey:
        name: "ike-key"
        namespace: "kube-system"
      peer:
        publicIP: PEER_PUBLIC_IP_2
      self:
        publicIP: SELF_PUBLIC_IP
      localTunnelIP: SELF_LOCAL_TUNNEL_IP_2
    

    Substitua:

    • TUNNEL_NAME_1: um nome da sua escolha para o primeiro OverlayVPNTunnel.

    • TUNNEL_NAME_2: um nome da sua escolha para o segundo OverlayVPNTunnel.

    • PEER_PUBLIC_IP_1: o endereço IP público de uma interface no gateway da VPN de alta disponibilidade. Você especifica essa interface ao criar seu primeiro túnel VPN.

    • PEER_PUBLIC_IP_2: o endereço IP público da outra interface no gateway da VPN de alta disponibilidade. Você especificou essa interface quando criou o segundo túnel VPN.

    • SELF_LOCAL_TUNNEL_IP_1: o endereço link-local a ser usado no cluster para sessões do BGP no primeiro túnel.

    • SELF_LOCAL_TUNNEL_IP_2: o endereço link-local a ser usado no cluster para sessões do BGP no segundo túnel.

    • SELF_PUBLIC_IP: o endereço IP público do tráfego IPsec/VPN que sai da sua organização. Esse endereço pode ser o resultado de uma conversão de endereços de rede (NAT).

  2. Crie os dois OverlayVPNTunnels:

    kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f overlay-vpn-tunnels.yaml
    
  3. Verifique o status dos túneis:

    kubectl --kubeconfig CLUSTER_KUBECONFIG get OverlayVPNTunnel \
        --namespace kube-system --output yaml
    

Criar dois recursos personalizados do OverlayBGPPeer

Para iniciar uma sessão do BGP em cada um dos túneis, crie dois recursos personalizados OverlayBGPPeer.

  1. Crie um arquivo chamado overlay-bgp-peers.yaml com os seguintes detalhes do manifesto OverlayBGPPeer.

    apiVersion: networking.gke.io/v1alpha1
    kind: OverlayBGPPeer
    metadata:
      namespace: "kube-system"
      name: BGP_PEER_1_NAME
    spec:
      localASN: LOCAL_ASN
      localIP: LOCAL_IP
      peerIP: PEER_IP_1
      peerASN: PEER_ASN
      vpnTunnel: TUNNEL_1_NAME
    ---
    apiVersion: networking.gke.io/v1alpha1
    kind: OverlayBGPPeer
    metadata:
      namespace: "kube-system"
      name: BGP_PEER_2_NAME
    spec:
      localASN: LOCAL_ASN
      localIP: LOCAL_IP
      peerIP: PEER_IP_2
      peerASN: PEER_ASN
      vpnTunnel: TUNNEL_2_NAME
    

    Substitua:

    • BGP_PEER_1_NAME: um nome da sua escolha para o primeiro OverlayBGPPeer.

    • BGP_PEER_2_NAME: um nome da sua escolha para o segundo OverlayBGPPeer.

    • LOCAL_ASN: o ASN a ser usado no seu cluster para sessões do BGP.

    • LOCAL_IP: o endereço IP público do tráfego IPsec/VPN que sai da sua organização. Esse endereço pode ser o resultado de uma conversão de endereços de rede (NAT).

    • PEER_IP_1: o endereço IP público de uma interface no gateway da VPN de alta disponibilidade. Você especificou essa interface ao criar seu primeiro túnel de VPN.

    • PEER_IP_2: o endereço IP público da outra interface no gateway da VPN de alta disponibilidade. Você especificou essa interface ao criar o segundo túnel de VPN.

    • PEER_ASN: o ASN atribuído ao seu Cloud Router para sessões do BGP.

    • TUNNEL_1_NAME: o nome do primeiro OverlayVPNTunnel criado anteriormente.

    • TUNNEL_2_NAME: o nome do segundo OverlayVPNTunnel criado anteriormente.

  2. Crie os recursos personalizados OverlayBGPPeer:

    kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f overlay-bgp-peers.yaml
    
  3. Verifique o status das sessões do BGP:

    kubectl --kubeconfig CLUSTER_KUBECONFIG get OverlayBGPPeer --namespace kube-system \
        --output yaml
    

Verificar o status do gateway de conectividade de rede

A instalação criou um recurso personalizado NetworkConnectivityGateway.

  • Veja o recurso personalizado NetworkConnectivityGateway:

    kubectl --kubeconfig CLUSTER_KUBECONFIG get NetworkConnectivityGateway --namespace kube-system \
        --output yaml
    

    A resposta será semelhante a esta: Verifique se aparece Status: Healthy:

    apiVersion: networking.gke.io/v1alpha1
    kind: NetworkConnectivityGateway
    metadata:
      namespace: kube-system
      name: default
    spec:
    status:
        CurrNode: worker1-node
        CreatedTime: 2021-09-07T03:18:15Z
        LastReportTime: 2021-09-21T23:57:54Z
        Status:  Healthy
    

Verificar os registros do gateway de conectividade de rede

O pod de gateway pertence a um DaemonSet chamado ncgd. Portanto, o nome do pod começa com ncgd.

Para ver os registros do gateway de conectividade de rede, siga estas etapas:

  1. Encontre o nome do pod de gateway:

    kubectl --kubeconfig CLUSTER_KUBECONFIG pods --namespace kube-system | grep ncgd
    
  2. Veja os registros do pod de gateway:

    kubectl --kubeconfig CLUSTER_KUBECONFIG logs GATEWAY_POD --namespace kube-system \
        --output yaml
    

    Substitua GATEWAY_POD pelo nome do gateway.

Desinstalar

Para desinstalar o gateway de conectividade de rede de um cluster:

./bin/ncgctl –-uninstall --kubeconfig CLUSTER_KUBECONFIG

Solução de problemas

Para ver dicas de solução de problemas relacionadas ao gateway de conectividade de rede, consulte esta página.