Configurar la pasarela de conectividad de red

En este documento se muestra cómo configurar Network Connectivity Gateway para un clúster en Google Distributed Cloud.

A veces, tienes pods que se ejecutan en un clúster y que deben comunicarse con cargas de trabajo que se ejecutan en una nube privada virtual (VPC). Esta comunicación debe ser segura. Quizá necesites que esta comunicación se produzca a través de una red plana sin usar un servidor proxy. Network Connectivity Gateway permite este tipo de comunicación.

Network Connectivity Gateway se ejecuta como un pod en tu clúster. Como se muestra en el siguiente diagrama, esta solución proporciona túneles IPsec para el tráfico de los pods de tu clúster a las VMs de una VPC. Cuando el pod de la pasarela recibe prefijos de subredes de VPC a través de una sesión del protocolo de pasarela fronteriza (BGP), configura el reenvío mediante Dataplane V2. Cuando otros pods envían tráfico a una dirección con uno de esos prefijos, el tráfico se dirige al pod de la pasarela. A continuación, el pod de la pasarela enruta el tráfico a través de un túnel IPsec haciaGoogle Cloud.

Diagrama de la pasarela de conectividad de red de Google Distributed Cloud

Network Connectivity Gateway no admite las siguientes funciones y capacidades:

  • IPv6 para VPN de alta disponibilidad (y BGP)
  • MD5 para BGP
  • Detección de reenvío bidireccional (BFD) para BGP

Crear Google Cloud recursos

Antes de habilitar Network Connectivity Gateway en un clúster, debes tener los siguientes Google Cloud recursos:

  • Un Cloud Router

  • Una pasarela de VPN de alta disponibilidad

  • Una pasarela de VPN de par: una interfaz

  • Dos túneles VPN

  • Dos sesiones de BGP: una para cada túnel VPN

Para obtener información sobre cómo crear y configurar estos recursos, consulta el artículo Crear una pasarela de VPN de alta disponibilidad a una pasarela de VPN de par.

Mientras creas estos recursos, reúne la siguiente información y tenla a mano para más adelante:

  • Las dos direcciones IP externas que se han Google Cloud asignado a tu pasarela VPN de alta disponibilidad.

  • La dirección IP pública del tráfico IPsec o VPN que sale de tu organización. Esta dirección puede ser el resultado de una traducción de dirección de red (NAT).

  • Tu clave precompartida.

  • El número de sistema autónomo (ASN) que has asignado a tu router de Cloud Router para las sesiones BGP.

  • El ASN que has elegido para usar en tu clúster local para las sesiones BGP.

  • Para cada sesión de BGP, la dirección local de enlace, como 169.254.1.1, que usará tu Cloud Router y la dirección local de enlace que se usará en tu clúster on-premise.

Para obtener información sobre cómo encontrar los detalles de la configuración de tu sesión de BGP, consulta Ver la configuración de la sesión de BGP.

Requisitos de clústeres

La descarga de la herramienta de línea de comandos de pasarela de conectividad de red, ncgctl-v1.12.0-linux-amd64.tar.gz, solo es compatible con la versión 1.12 de Google Distributed Cloud. Si vas a crear un clúster de la versión 1.12.0, puedes habilitar Network Connectivity Gateway con una anotación en el archivo de configuración del clúster.

Para habilitar Network Connectivity Gateway durante la creación del clúster, sigue estos pasos:

  1. En el archivo de configuración del clúster, añade la anotación 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. Usa bmctl create para crear el clúster:

    bmctl create cluster -c CLUSTER_NAME
    

    Sustituye CLUSTER_NAME por el nombre que especificaste al crear el archivo de configuración del clúster. Para obtener más información sobre cómo crear clústeres, consulta la descripción general de la creación de clústeres.

Descargar

Para descargar ncgctl, la herramienta de línea de comandos de Network Connectivity Gateway, sigue estos pasos:

  1. Descarga los componentes de Network Connectivity Gateway y las definiciones de recursos personalizados:

    gcloud storage cp gs://ncg-release/anthos-baremetal/ncgctl-v1.12.0-linux-amd64.tar.gz .
    
  2. Extrae el archivo:

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

Instalar

Para instalar ncgctl, sigue estos pasos:

  1. Realiza comprobaciones preparatorias para asegurarte de que el clúster cumple los requisitos. Por ejemplo, asegúrate de que Dataplane V2 esté habilitado.

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

    Sustituye CLUSTER_KUBECONFIG por la ruta del archivo kubeconfig de tu clúster.

  2. Instala Network Connectivity Gateway.

    ./bin/ncgctl --install --kubeconfig CLUSTER_KUBECONFIG
    
  3. Si tienes un clúster con la versión 1.12.0, puedes usar el siguiente comando ncgctl para habilitar Network Connectivity Gateway:

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

    El comando ncgctl acepta -e como versión abreviada de la marca enable.

  4. Para ver más combinaciones de teclas y obtener ayuda sobre otros comandos, usa el siguiente comando:

    ./bin/ncgctl --help
    

Crear un secreto para la clave precompartida

Las pasarelas de los extremos de los túneles IPsec usan un secreto que contiene tu clave precompartida para la autenticación.

Para crear el secreto, sigue estos pasos:

  1. Crea un archivo llamado psk-secret.yaml con los siguientes detalles del manifiesto de Secret:

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

    Sustituye PRE_SHARED_KEY por una clave precompartida codificada en base64. Si tienes una clave en texto sin formato, codifícala en formato base64 antes de crear este secreto. Por ejemplo, si la Google Cloud consola ha generado una clave, esta estará en texto sin cifrar y deberás codificarla. Para codificar una clave en base64, sigue estos pasos:

    echo -n PLAINTEXT_KEY | base64
    
  2. Crea el secreto:

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

Crea dos recursos personalizados OverlayVPNTunnel

Para iniciar dos sesiones IPsec, crea dos recursos personalizados OverlayVPNTunnel.

  1. Crea un archivo llamado overlay-vpn-tunnels.yaml con los siguientes detalles del manifiesto 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
    

    Haz los cambios siguientes:

    • TUNNEL_NAME_1: el nombre que elijas para el primer OverlayVPNTunnel.

    • TUNNEL_NAME_2: el nombre que elijas para la segunda OverlayVPNTunnel.

    • PEER_PUBLIC_IP_1: la dirección IP pública de una interfaz de tu pasarela de VPN de alta disponibilidad. Especificaste esta interfaz cuando creaste tu primer túnel VPN.

    • PEER_PUBLIC_IP_2: la dirección IP pública de la otra interfaz de tu pasarela de VPN de alta disponibilidad. Has especificado esta interfaz al crear tu segundo túnel VPN.

    • SELF_LOCAL_TUNNEL_IP_1: la dirección local de enlace que se usará en tu clúster para las sesiones de BGP a través del primer túnel.

    • SELF_LOCAL_TUNNEL_IP_2: la dirección local de enlace que se usará en tu clúster para las sesiones de BGP a través del segundo túnel.

    • SELF_PUBLIC_IP: la dirección IP pública del tráfico de IPSec o VPN que sale de tu organización. Esta dirección puede ser el resultado de una traducción de dirección de red (NAT).

  2. Crea los dos OverlayVPNTunnels:

    kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f overlay-vpn-tunnels.yaml
    
  3. Comprueba el estado de los túneles:

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

Crea dos recursos personalizados OverlayBGPPeer

Para iniciar una sesión de BGP en cada uno de los túneles, crea dos OverlayBGPPeer recursos personalizados.

  1. Crea un archivo llamado overlay-bgp-peers.yaml con los siguientes detalles del manifiesto 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
    

    Haz los cambios siguientes:

    • BGP_PEER_1_NAME: el nombre que quieras para el primer OverlayBGPPeer.

    • BGP_PEER_2_NAME: el nombre que quieras para el segundo OverlayBGPPeer.

    • LOCAL_ASN: el ASN que se va a usar en tu clúster para las sesiones de BGP.

    • LOCAL_IP: la dirección IP pública del tráfico de IPsec o VPN que sale de tu organización. Esta dirección puede ser el resultado de una traducción de dirección de red (NAT).

    • PEER_IP_1: la dirección IP pública de una interfaz de tu pasarela de VPN de alta disponibilidad. Has especificado esta interfaz cuando has creado tu primer túnel VPN.

    • PEER_IP_2: la dirección IP pública de la otra interfaz de tu pasarela de VPN de alta disponibilidad. Has especificado esta interfaz al crear tu segundo túnel VPN.

    • PEER_ASN: el ASN asignado a tu router de Cloud Router para las sesiones BGP.

    • TUNNEL_1_NAME: el nombre del primer OverlayVPNTunnel que has creado anteriormente.

    • TUNNEL_2_NAME: el nombre del segundo OverlayVPNTunnel que has creado anteriormente.

  2. Crea los recursos personalizados OverlayBGPPeer:

    kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f overlay-bgp-peers.yaml
    
  3. Comprueba el estado de las sesiones de BGP:

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

Comprobar el estado de Network Connectivity Gateway

La instalación ha creado un recurso personalizado NetworkConnectivityGateway.

  • Consulta el recurso personalizado NetworkConnectivityGateway:

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

    La salida es similar a la siguiente. Comprueba que ves 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
    

Consultar los registros de la pasarela de conectividad de red

El pod de la pasarela pertenece a un DaemonSet llamado ncgd, por lo que el nombre del pod empieza por ncgd.

Para ver los registros de la pasarela de conectividad de red, sigue estos pasos:

  1. Busca el nombre del pod de la pasarela:

    kubectl --kubeconfig CLUSTER_KUBECONFIG pods --namespace kube-system | grep ncgd
    
  2. Consulta los registros del pod de la pasarela:

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

    Sustituye GATEWAY_POD por el nombre del pod de la pasarela.

Desinstalar

Para desinstalar Network Connectivity Gateway de un clúster, sigue estos pasos:

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

Solución de problemas

Para obtener consejos sobre cómo solucionar problemas relacionados con Network Connectivity Gateway, consulta el artículo Solucionar problemas de Network Connectivity Gateway.