Golpe seguro a Opensearch en AWS


En Buffer, hemos estado trabajando en un mejor panel de agencia para nuestro equipo de defensa del cliente. Este panel de agencia incluía una función de búsqueda mucho más poderosa. Cerca de el final del cronograma del esquema, se nos pidió que reemplazáramos Managed Elasticsearch en AWS con Managed Opensearch. Nuestro esquema se basó en versiones más nuevas del cliente de Elasticsearch, el de repente no es compatible búsqueda abierta.

Para asociar combustible al fuego, los clientes de OpenSearch para los idiomas que usamos aún no admiten firmas AWS Sigv4 transparentes. La firma de AWS Sigv4 es un requisito previo para autenticarse en el clúster de OpenSearch con las credenciales de AWS.

Esto significaba que el camino a seguir estaba salpicado de una de esas opciones.

  • Deje nuestro colección de búsqueda descubierto al mundo sin autenticación, luego funcionaría con el cliente OpenSearch. No hace errata aseverar que este es un gran NO PUEDE por razones obvias.
  • Refactorice nuestro código para remitir solicitudes HTTP sin procesar e implemente el mecanismo AWS Sigv4 nosotros mismos para esas solicitudes. ¡Esto no es factible y no nos gustaría reinventar una biblioteca de cliente nosotros mismos!
  • Cree un complemento/middleware para el cliente que implemente la firma de AWS Sigv4. Esto funcionaría inicialmente, pero Buffer no es un equipo magnate y con actualizaciones de servicio constantes no podemos proseguir esto de forma confiable.
  • Migre nuestra infraestructura para usar un clúster de Elasticsearch alojado en la cirro de Elastic. Esto requirió mucho esfuerzo, ya que examinamos los términos de servicio, los precios, los requisitos de configuración de red segura de Elastic y otras medidas que requerían mucho tiempo.

¡Parecía que este esquema se iba a acordar atascado allí por mucho tiempo! ¿O fue?

Mirando la situación, aquí están las constantes que no podemos cambiar.

  • Ya no podemos usar el cliente de Elasticsearch.
  • Cambiar al cliente OpenSearch funcionaría si el clúster estuviera descubierto y no se requiriera autenticación.
  • No podemos dejar el clúster de OpenSearch descubierto al mundo por razones obvias.

¿No sería bueno si el clúster de OpenSearch SÓLO estuviera descubierto a las aplicaciones que lo necesitan?

Si esto se puede ganar, estas aplicaciones podrían conectarse al clúster sin autenticación, lo que les permitiría usar el cliente OpenSearch existente, pero el clúster sería inalcanzable para cualquier otra cosa.
Con este objetivo final en mente, hemos desarrollado la subsiguiente posibilidad.

Estudioso de nuestra nuevo migración de Kubernetes autogestionado a Amazon EKS

Recientemente migramos nuestra infraestructura informática de un clúster de Kubernetes autoadministrado a otro clúster administrado por Amazon EKS.
Con esta migración, cambiamos nuestra Interfaz de red de contenedores (CNI) de Flannel a VPC CNI. Como resultado, eliminamos la división de red superpuesta/subyacente y todos nuestros pods ahora obtienen direcciones IP de enrutamiento de VPC.
Esto será más relevante en el futuro.

Cercar el acercamiento al clúster desde el mundo foráneo

Creamos un clúster OpenSearch en una VPC privada (sin direcciones IP orientadas a Internet). Esto significa que no se podrá alcanzar a las direcciones IP del clúster desde Internet, solo desde las direcciones IP de enrutamiento de la VPC interna.
Agregamos tres grupos de seguridad al clúster para controlar qué direcciones IP de VPC pueden ascender al clúster.

Cree automatizaciones para controlar qué puede alcanzar al clúster

Hemos creado dos automatizaciones que se ejecutan como AWS lambdas.

  • Administrador de colección de seguridad: esta automatización puede ejecutar dos procesos bajo demanda.
  • -> Agregue una dirección IP a uno de estos tres grupos de seguridad (el que tenga la pequeño cantidad de reglas en el momento de asociar).
  • -> Eliminar una dirección IP dondequiera que aparezca en estos tres grupos de seguridad.
  • Auditor del ciclo de vida del pod: esta automatización va por buen camino y lo abordaremos en un momento.

agregamos uno InitContainer a todos los pods que necesitan acercamiento al clúster de OpenSearch, que ejecuta la automatización del Administrador de grupos de seguridad al inicio y le pide que agregue la dirección IP del pod a uno de los grupos de seguridad. Esto le permite ascender al clúster de OpenSearch.
En la vida efectivo, suceden cosas y los pods se terminan y obtienen nuevas direcciones IP. Por lo tanto, Pod Lifecycle Auditor se ejecuta según lo programado y verifica todas las direcciones IP incluidas en la tira blanca en los tres grupos de seguridad que permiten el acercamiento al clúster. Luego verifica qué direcciones IP no deberían estar allí y reconcilia los grupos de seguridad pidiéndole al administrador del colección de seguridad que elimine esas direcciones IP.
Aquí hay un diagrama de cómo se conecta todo

Diagrama de nuestra solución para abordar los problemas de acceso de Opensearch a través de listas blancas automatizadas. Fuente: Peter Emil encargado por el equipo de infraestructura de Buffer
Diagrama de nuestra posibilidad para tocar los problemas de acercamiento de Opensearch a través de listas blancas automatizadas. Fuente: Peter Emil encargado por el equipo de infraestructura de Buffer

¿Por qué creamos tres grupos de seguridad para ordenar el acercamiento al clúster de OpenSearch?

Porque los grupos de seguridad tienen un término mayor de 50 reglas de entrada/salida. Asumimos que no más de 70-90 pods necesitarán acercamiento al clúster en cualquier momento. Con tres grupos de seguridad, el término es de 150 reglas, lo que inicialmente nos parece un circunscripción seguro.

¿Necesito introducir el clúster de Opensearch en la misma VPC que el clúster de EKS?

¡Depende de la configuración de su red! Si su VPC tiene subredes privadas con puertas de enlace NAT, puede alojarlas en cualquier VPC. Si no tiene subredes privadas, debe introducir los dos clústeres en la misma VPC, ya que la VPC CNI se usa de forma predeterminada. Tráfico de pod externo de VPC de NAT a la dirección IP del nodo de alojamiento, lo que invalida esta posibilidad. Si deshabilita la configuración de NAT, sus pods no pueden conectarse a Internet, lo cual es un problema anciano.

Si un pod se atasca en el estado CrashLoopBackoff, ¿la enorme cantidad de reinicios no agota el término de 150 reglas?

No, ya que el contenedor falta, se reinicia internamente de un pod con la misma dirección IP internamente del mismo pod. La dirección IP no se cambia.

¿No son estas automatizaciones un único punto de falta?

Sí, lo son, por eso es importante abordarlos con una mentalidad SRE. El monitoreo adecuado de estas automatizaciones combinado con implementaciones continuas es fundamental para la confiabilidad aquí. Desde que se pusieron en marcha estas automatizaciones han sido muy estables y no hemos tenido ninguna incidencia. Sin retención, duermo profundamente por la tinieblas sabiendo que si uno de ellos se rompe por algún motivo, me avisarán ayer de que se convierta en un problema extraordinario.

Admito que esta posibilidad no es perfecta, pero fue la posibilidad más rápida y tratable de implementar sin aprieto de mantenimiento continuo y sin profundizar en el proceso de incorporación de un nuevo proveedor de cirro.

A ti

¿Qué opinas del enfoque que hemos prohijado aquí? ¿Te has enfrentado con situaciones similares en tu ordenamiento? ¡Tuiteanos!





Source link