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.
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:
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 ...
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:
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 .
Extrae el archivo:
tar -xvzf ncgctl-v1.12.0-linux-amd64.tar.gz
Instalar
Para instalar ncgctl
, sigue estos pasos:
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.Instala Network Connectivity Gateway.
./bin/ncgctl --install --kubeconfig CLUSTER_KUBECONFIG
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.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:
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
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
.
Crea un archivo llamado
overlay-vpn-tunnels.yaml
con los siguientes detalles del manifiestoOverlayVPNTunnel
: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 primerOverlayVPNTunnel
.TUNNEL_NAME_2
: el nombre que elijas para la segundaOverlayVPNTunnel
.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).
Crea los dos
OverlayVPNTunnels
:kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f overlay-vpn-tunnels.yaml
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.
Crea un archivo llamado
overlay-bgp-peers.yaml
con los siguientes detalles del manifiestoOverlayBGPPeer
.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 primerOverlayBGPPeer
.BGP_PEER_2_NAME
: el nombre que quieras para el segundoOverlayBGPPeer
.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.
Crea los recursos personalizados
OverlayBGPPeer
:kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f overlay-bgp-peers.yaml
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:
Busca el nombre del pod de la pasarela:
kubectl --kubeconfig CLUSTER_KUBECONFIG pods --namespace kube-system | grep ncgd
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.