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.
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:
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 ...
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:
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 .
Extraia o arquivo:
tar -xvzf ncgctl-v1.12.0-linux-amd64.tar.gz
Instalar
Para instalar ncgctl
, siga estas etapas:
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.Instalar o gateway de conectividade de rede
./bin/ncgctl --install --kubeconfig CLUSTER_KUBECONFIG
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.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:
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
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
.
Crie um arquivo chamado
overlay-vpn-tunnels.yaml
com os seguintes detalhes do manifestoOverlayVPNTunnel
: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 primeiroOverlayVPNTunnel
.TUNNEL_NAME_2
: um nome da sua escolha para o segundoOverlayVPNTunnel
.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).
Crie os dois
OverlayVPNTunnels
:kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f overlay-vpn-tunnels.yaml
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
.
Crie um arquivo chamado
overlay-bgp-peers.yaml
com os seguintes detalhes do manifestoOverlayBGPPeer
.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 primeiroOverlayBGPPeer
.BGP_PEER_2_NAME
: um nome da sua escolha para o segundoOverlayBGPPeer
.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.
Crie os recursos personalizados
OverlayBGPPeer
:kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f overlay-bgp-peers.yaml
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:
Encontre o nome do pod de gateway:
kubectl --kubeconfig CLUSTER_KUBECONFIG pods --namespace kube-system | grep ncgd
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.