How do I connect Cloud Composer Airflow DAG to a VPN
¿Cómo permito que un DAG de flujo de aire de Cloud Composer se conecte a una API REST a través de una puerta de enlace VPN? El clúster está conectado a la VPC correspondiente.
El kube-proxy puede llegar a la API, pero los contenedores no.
Conecté SSH al kube-proxy y a los contenedores y probé un traceroute. La ruta de seguimiento de los contenedores termina con kube-proxy. El kube-proxy tiene 4 saltos antes de llegar al destino.
He desechado los iptables del kube-proxy, no especifican nada con respecto a la conexión NAT de la subred de VPC con los contenedores.
La subred de VPC tampoco aparece en los contenedores, lo cual es por diseño.
Algo de material de lectura:
EDITAR1: Más información:
Supongamos que la VPN conecta la VPC a la red remota 10.200.0.0.
La VPC tiene varias subredes. El rango principal es, p.e. 10.10.0.0/20. Por cada cluster de Kubernetes tenemos dos subredes más, una para cada pod (10.16.0.0/14) y otra para servicios (10.20.0.0/20). La puerta de enlace es 10.10.0.1.
Cada pod nuevamente tiene su propio rango, donde pod_1 es 10.16.0.0/14, pod_2 es 10.16.1.0/14, pod_3 10.16.3.0/14 y así sucesivamente.
Uno de los kube-proxies tiene varios adaptadores de red. Reside en la red 10.10.0.0 con eth0 y tiene un puente cbr0 hacia 10.16.0.0. A través de dicho kube-proxy a través del puente, los trabajadores de Airflow son coconectándose a la red. Un trabajador, p.e. 10.16.0.1 tiene solo un adaptador de red.
El kube-proxy puede llegar a la red 10.200.0.0. Los trabajadores de Airflow no pueden.
¿Cómo conseguimos que el trabajador acceda a la red 10.200.0.0? ¿Necesitamos cambiar las iptables del kube-proxy?
-----------------------------------
¿La VPN se implementa en la VPC actual? ¿O realiza un emparejamiento para alcanzarlo?
-----
@guillaumeblaquiere está implementado en la VPC actual con Google Cloud Classic VPN.
-----
¿Ve que la solicitud llegó al otro lado del ¿VPN? La mayoría de las veces, cuando configuro una VPN, olvido el camino de regreso...
-----
Hola @guillaumeblaquiere, edité mi publicación inicial para explicar un poco más la red. Nuestra VPN funciona según lo previsto y desde cualquier otra máquina virtual a la que podemos acceder y trabajar con la API. Ahora queremos implementar nuestro código en un DAG para que se ejecute automáticamente.
-----
Hmm, si su conexión funciona, si no tiene reglas de firewall especiales, si las subredes están en la misma VPC, debería funcionar ... ¿Tienes NAT configurado?
-----
Una de las posibles soluciones sería reenviar los paquetes desde la interfaz virtual de kube a la interfaz real del nodo. P.ej. agregando las siguientes reglas a las tablas de ip:
iptables -A FORWARD -i cbr0 -o eth0 -d 10.200.0.0/25 -j ACCEPT
iptables -A FORWARD -i eth0 -o cbr0 -s 10.200.0.0/25 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
-----------------------------------