IP pública estable o rango de IP para conexiones salientes en GKE

20

Uso Google Kubernetes Engine para ejecutar pods a pedido. Cada pod está expuesto públicamente a Internet mediante un servicio de nodo de puerto.

Estoy buscando una forma en GKE para obtener una única IP o un rango de IP para conexiones salientes, para darlas a API de terceros para incluirlas en la lista blanca.

Las IP del nodo GKE no son manejables cuando los nodos escalan automáticamente o cuando los actualizo. Necesito una manera de mantener una IP saliente constante.

Intenté usar una puerta de enlace NAT simple para los nodos de Kubernetes (usando el ejemplo de aquí ), y aunque esto enruta las conexiones salientes a la puerta de enlace NAT, interrumpe el tráfico entrante a los pods (servicio Nodeport) ya que se dejan en el Puerta de enlace NAT.

  • ¿Existe un rango de IP predeterminado para una región de la nube de Google que puedo proporcionar al tercero para que lo incluya en la lista blanca (o)

  • Si GKE proporciona una forma de seleccionar IP externas de nodo de una lista reservada previamente de IP estáticas (o)

  • ¿Hay alguna otra manera de lograr tener una sola IP estática o un rango de IP que represente el tráfico saliente de los pods?

He encontrado preguntas similares como esta , pero no abordan mi problema, ya que los pods deben ser conectables externamente, lo que se rompe al usar un NAT.

Parag
fuente

Respuestas:

6

Google Cloud ahora proporciona un servicio administrado de Gateway NAT: Cloud NAT .

Esta puerta de enlace se puede usar con un clúster GKE, que proporciona una IP de salida pública estable a todos los pods dentro de ella, lo que les permite ser incluidos en la lista blanca por terceros proveedores de servicios.

La implementación de ejemplo para usar Cloud NAT con GKE se proporciona aquí: https://cloud.google.com/nat/docs/gke-example

Parag
fuente
¿El clúster tiene que ser privado?
Gajus
3
Sí, el clúster debe ser privado, pero el maestro puede ser público. Si alguno de sus servicios también necesita ser público, puede ser expuesto por un equilibrador de carga.
Parag
@Parag ¿Es obligatorio que el clúster tenga que ser privado? ¿Hay alguna manera que pueda usar si las IP del nodo son públicas?
Suhas Chikkanna
1
@SuhasChikkanna Con CloudNAT no. Si desea que los nodos tengan direcciones IP externas pero también desea una única IP saliente, puede crear su propia instancia de puerta de enlace NAT utilizando Squid y tener un enrutamiento condicional, que enrutará sus servidores internos a las instancias directamente, pero cualquier tráfico del exterior viene a través de la NAT. Esto les dará a sus usuarios una única IP saliente, al tiempo que hará que sus nodos sean accesibles para las fuentes de IP seleccionadas.
Parag
@Parag Suena bien! Definitivamente lo intentaría. Muchas gracias :)
Suhas Chikkanna
1

Puedes probar esta solución:

https://cloud.google.com/solutions/using-a-nat-gateway-with-kubernetes-engine

En circunstancias normales, los nodos de Google Kubernetes Engine enrutan todo el tráfico de salida a través de la puerta de enlace de Internet asociada con su grupo de nodos. La conexión de la puerta de enlace a Internet, a su vez, está definida por la red Compute Engine asociada con el clúster de nodos. Cada nodo en el clúster tiene una dirección IP externa efímera. Cuando los nodos se crean y destruyen durante el autoescalado, las nuevas direcciones IP de los nodos se asignan automáticamente.

El comportamiento predeterminado de la puerta de enlace funciona bien en circunstancias normales. Sin embargo, es posible que desee modificar cómo se asignan las direcciones IP externas efímeras para:

  • Proporcione un servicio de terceros con una dirección IP externa coherente.
  • Supervise y filtre el tráfico de salida del clúster de Google Kubernetes Engine.
alphayax
fuente