¿Por qué exponer la base de datos Couchbase en la red pública?

A continuación figuran algunos ejemplos:

  • Replicación entre centros de datos (XDCR) para alta disponibilidad y recuperación ante desastres

  • Acceso del SDK de cliente al clúster de Couchbase

  • Plataformas de base de datos como servicio (DBaaS)

*Nota - Todos estos casos de uso comparten un objetivo común; permiten a los clientes acceder a la instancia de base de datos sin tener que establecer una VPN a una instancia de Kubernetes. También requieren una comunicación segura protegida por TLS que a veces es difícil de conseguir con la arquitectura típica de Kubernetes.

¿Cómo resolvimos la creación de redes públicas mediante el DNS externo de Kubernetes?

Al desplegar aplicaciones en Kubernetes, normalmente se utilizan recursos de Kubernetes como Service e Ingress para exponer aplicaciones fuera del clúster de Kubernetes en el dominio deseado. Esto implica una gran cantidad de configuración manual de los recursos de Kubernetes y también los registros DNS en su proveedor, que puede ser un proceso largo y erróneo. Esto pronto puede convertirse en un inconveniente a medida que su aplicación crece en complejidad, y también cuando la IP externa cambia, es necesario actualizar los registros DNS en consecuencia.

Para ello, la Equipo Kubernetes sig-network creó el DNS externo para gestionar registros DNS externos de forma autónoma desde un clúster Kubernetes. Una vez desplegado, el DNS externo funciona en segundo plano y apenas requiere configuración adicional. Crea registros DNS en proveedores DNS externos a Kubernetes para que los recursos de Kubernetes sean detectables a través de los proveedores DNS externos, y le permite controlar los registros DNS dinámicamente de forma agnóstica al proveedor DNS. Siempre que descubra que se está creando o actualizando un Servicio o Ingress, el controlador DNS externo actualizará los registros al instante.

Al desplegar la base de datos Couchbase utilizando la estrategia de red pública con DNS Externo para su arquitectura de red, los nodos del clúster Couchbase se exponen utilizando servicios de balanceo de carga que tienen asignadas direcciones IP públicas. El controlador de DNS Externo se encargará entonces de gestionar el DNS dinámico (DDNS) en un proveedor basado en la nube para proporcionar un direccionamiento estable y una base para TLS.

Ahora, ¡vamos a verlo en acción!

Ahora vamos a seguir los pasos para desplegar el cluster de Couchbase usando Operador Autónomo 2.0 en EKS y acceder al cluster de Couchbase a través de una red pública que se gestiona a través de DNS Externo. A continuación se muestra una visión general de la arquitectura de nuestro despliegue.

Public Networking with Couchbase Autonomous Operator using Kubernetes External DNS

Redes Públicas con Couchbase Autonomous Operator usando Kubernetes DNS Externo

Requisitos previos

Antes de empezar, hay algunos requisitos previos importantes.

  1. Instalación y configuración kubectl kubectl es una interfaz de línea de comandos para ejecutar comandos en clústeres Kubernetes. 
  2. Instale la última CLI DE AWS - La CLI de AWS es una herramienta unificada que le permite interactuar con los servicios de AWS mediante comandos en su shell de línea de comandos. En este caso, utilizaremos la CLI de AWS para comunicarnos de forma segura con el clúster de Kubernetes que se ejecuta en AWS.
  3. Despliegue el clúster EKS. El sitio Grupo EKS puede desplegarse utilizando la función Consola AWS o eksctl. En este artículo, desplegaremos el clúster EKS en la plataforma us-este-1 región con 3 nodos trabajadores en tres zonas de disponibilidad como se menciona a continuación.

4. Necesitará un dominio DNS público. El dominio puede adquirirse en un registrador como GoDaddy, Ruta 53 de AWS, Namecheapetc. Para este artículo, estoy usando mi propio dominio registrado (GoDaddy) balajiacloud.guru y le sugiero que consiga el suyo antes de continuar.

5. Por último, necesitará un proveedor de DNS externo. Durante el ciclo de vida de un cluster Couchbase, los nodos pueden ser añadidos y eliminados para escalar el cluster, actualizaciones, o recuperación de fallos. En cada instancia, nuevos nombres DNS necesitan ser creados para cualquier nuevo pod de Couchbase que sea creado, o nombres DNS eliminados de pods que sean borrados. El proveedor DDNS expone una API REST que permite al controlador DNS externo de Kubernetes sincronizar el aspecto del clúster Couchbase con el DNS público. 

Aquí está la lista de todos los documentados y conocidos DNS externo para la plataforma Kubernetes. En este artículo, utilizaremos Cloudflare como proveedor de DNS externo. Si tiene previsto utilizar Cloudflare como proveedor de DNS externo, deberá crear una cuenta de Cloudflare y añadir el dominio DNS a la cuenta.

Couchbase Autonomous Operator using Kubernetes External DNS

Creación de certificados TLS

El Operador se asegura de que configures tus clusters Couchbase de forma segura. Si el Operador detecta que un clúster está siendo expuesto en la Internet pública, impondrá el cifrado TLS. 

Antes de generar los certificados TLS necesitamos determinar en qué dominio DNS estará el cluster de Couchbase. Podemos usar nuestro balajiacloud.guru directamente, pero entonces sólo podrá ser utilizado por un único cluster de Couchbase. Por lo tanto usaremos un subdominio llamado cbdemo.balajiacloud.guru como espacio de nombres único para nuestro clúster. En general, un nombre DNS comodín (*.cbdemo.balajiacloud.guru) manejará todos los nombres DNS públicos generados por el Operador. Esto necesita ser añadido al certificado del cluster Couchbase.

Utilizaremos el EasyRSA para crear los certificados TLS. EasyRSA de OpenVPN hace que el funcionamiento de una infraestructura de clave pública (PKI) sea relativamente sencillo y es el método recomendado para ponerse en marcha rápidamente.

1. Vamos a crear un directorio llamado tls y clone el repositorio EasyRSA.

2. Inicialice y cree el certificado/clave de la CA. Se le pedirá una contraseña de clave privada y el nombre común (CN) de la CA, algo así como Couchbase CA es suficiente. El certificado CA estará disponible como pki/ca.crt.

3. Cree el certificado del servidor de clúster Couchbase.

Necesitas crear un certificado comodín de servidor y una clave para ser usada en los pods de Couchbase Server. En este artículo, vamos a utilizar el siguiente comando para generar un certificado para el clúster Couchbase cbopedns en el demo y utilizando el espacio de nombres cbdemo.balajiacloud.guru subdominio.

Nota: Las claves protegidas por contraseña no son soportadas por Couchbase Server o el Operador.

El par clave/certificado se encuentra en pki/private/couchbase-server.keypki/issued/couchbase-server.crt y se utiliza como pkey.key y cadena.pemrespectivamente, en el spec.networking.tls.static.serverSecret parámetro de agrupación.

4. Formateo de claves privadas - Debido a una limitación con el manejo de claves privadas de Couchbase Server, las claves del servidor deben tener formato PKCS#1.

En primer lugar, copiemos los archivos .key y .pem en la carpeta tls para facilitar el acceso.

Ahora, vamos a formatear las claves del servidor.

Utilizaremos estas claves para crear el secreto del servidor del cluster Couchbase.

Despliegue Couchbase Autonomous Operator 2.0 (Última versión)

Couchbase Autonomous Operator for Kubernetes permite la portabilidad a la nube y automatiza las mejores prácticas operativas para desplegar y gestionar Couchbase.

El operador está formado por dos componentes: un controlador dinámico de admisión (DAC) por clúster y un operador por espacio de nombres. Consulte el arquitectura del operador para obtener información adicional sobre los requisitos y las consideraciones de seguridad.

1. Descargar el paquete Operator

Puede descargar la última Operador autónomo de Couchbase y descomprímalo en el equipo local. El paquete Operator contiene archivos de configuración YAML y herramientas de línea de comandos que utilizará para instalar Operator.

2. Instale la definición personalizada de recursos (CRD)

El primer paso para instalar Operator es instalar las definiciones de recursos personalizadas (CRD) que describen los tipos de recursos de Couchbase. Esto se puede lograr ejecutando el siguiente comando desde el directorio del paquete Operator:

3. Instalar el Controlador Dinámico de Admisión (DAC)

El DAC permite modificar e interrogar los recursos personalizados antes de aceptarlos y comprometerlos a etcd. Ejecutar el DAC nos permite añadir valores por defecto sensibles a las configuraciones del cluster Couchbase minimizando así el tamaño de las especificaciones. También nos permite mantener la compatibilidad con versiones anteriores cuando se añaden nuevos atributos y deben ser rellenados. Esto hace que la experiencia de uso de los recursos de Couchbase sea similar a la de los tipos de recursos nativos.

Ahora, vamos a instalar el Controlador Dinámico de Admisión.

Abra una ventana de Terminal y vaya al directorio donde desempaquetó el paquete Operator y cd a la carpeta bin. Ejecute el siguiente comando para instalar el DAC en la carpeta por defecto espacio de nombres.

Confirme que el controlador de admisión se ha desplegado correctamente.

4. Crear un espacio de nombres

Los espacios de nombres son una forma de asignar recursos de clúster, además de establecer políticas de red y seguridad entre varias aplicaciones. Crearemos un espacio de nombres único llamado demo para desplegar el Operator y más tarde utilizaremos el espacio de nombres demo para desplegar el cluster Couchbase.

Ejecute el siguiente comando para crear el espacio de nombres.

Confirme que el espacio de nombres se ha creado correctamente.

5. Configurar TLS

Los secretos se especifican en el recurso CouchbaseCluster, y lo notarás en el YAML de definición del cluster mientras desplegamos el cluster Couchbase.

Secreto de servidor

Los secretos de servidor deben montarse como un volumen dentro del pod de Couchbase Server con nombres específicos. La cadena de certificados debe llamarse cadena.pem y la clave privada como pkey.key. Ejecute el siguiente comando para crear el secreto del servidor Couchbase.

Secreto del operador

Los secretos de cliente de Operator se leen directamente de la API. Sólo se espera un único valor; ca.crt es la CA de nivel superior que se utiliza para autenticar todas las cadenas de certificados de servidor TLS. Ejecute el siguiente comando para crear el Operator secret.

6. Instalar el operador Couchbase

Ahora vamos a desplegar el Operador en el directorio demo ejecutando el siguiente comando desde la carpeta bin del directorio del paquete Operator.

Al ejecutar el comando anterior se descarga la imagen Docker Operator y se crea un archivo despliegueque gestiona una única instancia de Operator. El pod Operator se ejecuta como despliegue para que Kubernetes pueda reiniciarse en caso de fallo.

Después de ejecutar el kubectl create por lo general, Kubernetes tarda menos de un minuto en desplegar el operador y dejarlo listo para ejecutarse.

Comprobar el estado de la implantación del operador

Puede utilizar el siguiente comando para comprobar el estado de la implantación:

Si ejecuta este comando inmediatamente después de desplegar el Operador, la salida tendrá el valor DISPONIBLE como 0. Sin embargo, el campo AVAILABLE indica que el pod aún no está listo, ya que su valor es 0 y no 1.

Ejecute el siguiente comando para verificar que el pod Operator se ha iniciado correctamente. Si Operator está en funcionamiento, el comando devuelve una salida en la que se muestra el icono LISTO exposiciones sobre el terreno 1/1como:

También puede comprobar los registros para confirmar que el Operador está en funcionamiento, ejecutando el siguiente comando.

Despliegue del DNS externo

Suponiendo que ya ha completado los pasos anteriores para desplegar el Operador en un espacio de nombres; la función demo lo siguiente que hay que instalar es el controlador DNS externo. Esto debe instalarse antes que el cluster Couchbase ya que el Operador esperará a la propagación DNS antes de crear en pods Couchbase Server. Esto se debe a que los clientes deben ser capaces de llegar a los pods de Couchbase Server con el fin de servir el tráfico y evitar errores de aplicación.

1. Cree una cuenta de servicio para el controlador DNS externo en el espacio de nombres donde va a instalar el Operator.

2. El controlador DNS externo requiere un rol para poder sondear recursos y buscar registros DNS para replicar en el proveedor DDNS. 

3. Ahora, vincule el rol DNS externo a la cuenta de servicio.

4. El último paso es desplegar el DNS externo. No olvide actualizar los siguientes valores específicos para su despliegue.

    • En spec.template.spec.serviceAccountName garantiza que los pods DNS externos se ejecutan como la cuenta de servicio que hemos configurado. Esto concede al controlador permiso para sondear recursos y buscar solicitudes DDNS.
    • En -filtro de dominio indica a DNS Externo que sólo tenga en cuenta las entradas DDNS que estén asociadas a entradas DNS relacionadas con nuestro balajiacloud.guru dominio.
    • En -txt-id-propietario indica a DNS Externo que etiquete los registros de gestión TXT con una cadena exclusiva de la instancia de DNS Externo. DNS externo utiliza registros TXT para registrar metadatos , especialmente información de propiedad asociada con los registros DNS que está administrando. Si el argumento balajiacloud.guru es utilizado por múltiples instancias de DNS Externo sin especificar ninguna propiedad, entonces entrarían en conflicto entre sí.
    • En CF_API_KEY es utilizada por el proveedor de Cloudflare para autenticarse en la API de Cloudflare.
    • En CF_API_EMAIL es utilizada por el proveedor de Cloudflare para identificar qué cuenta utilizar contra la API de Cloudflare.

Puedes obtener el CF_API_KEY desde la página de resumen de la cuenta de Cloudfare. Haz clic en el enlace "Obtén tu token de API" como se muestra a continuación y visualiza el Clave API global.

External DNS provider

Despliegue del DNS externo

Por último, instale el despliegue de DNS externo ejecutando el siguiente comando.

Comprobar el estado de la implantación del DNS externo

Puede utilizar el siguiente comando para comprobar el estado de la implantación:

Ejecute el siguiente comando para verificar que el external-dns se ha iniciado correctamente. Si el external-dns está en funcionamiento, el comando devuelve una salida en la que se muestra el icono RUNNING exposiciones sobre el terreno 1/1como:

También puede comprobar los registros para confirmar que external-dns está en funcionamiento.

Ahora hemos desplegado con éxito el DNS externo.

Despliegue del clúster Couchbase

Ahora que hemos desplegado el Operador Autónomo Couchbase y el DNS Externo en EKS, vamos a desplegar el Cluster Couchbase.

Desplegaremos el cluster Couchbase con 3 nodos de datos en 3 zonas de disponibilidad con los parámetros de configuración mínimos requeridos. Consulte la Configurar la red pública para las opciones de configuración necesarias. 

Crear el secreto para la consola de administración de Couchbase

Vamos a crear una credencial secreta que será utilizada por la consola web administrativa durante el inicio de sesión. Al crear el siguiente secreto en su clúster Kubernetes, el secreto establece el nombre de usuario en Administrador y la contraseña a contraseña.

Despliegue de la definición del clúster Couchbase

Utilizaremos la opción por defecto StorageClass que obtenemos con EKS, comprobémoslo ejecutando el siguiente comando. Puedes crear una clase de almacenamiento que se ajuste a tus necesidades.

Para desplegar un clúster de Couchbase Server utilizando el Operador, todo lo que tienes que hacer es crear una definición de clúster de Couchbase que describa cómo quieres que sea el clúster (por ejemplo, el número de nodos, tipos de servicios, recursos del sistema, etc), y luego empujar esa definición de clúster en Kubernetes. 

El paquete Operator contiene un archivo de definición de CouchbaseCluster de ejemplo (couchbase-cluster.yaml).

La siguiente definición de cluster desplegará el cluster Couchbase con 3 pods de datos a través de 3 zonas diferentes utilizando volúmenes persistentes. Por favor, compruebe la Recurso de clúster de Couchbase para obtener la lista completa de la configuración del clúster.

Tras recibir la configuración, el Operador inicia automáticamente la creación del clúster. El tiempo que se tarda en crear el clúster depende de la configuración. Puede seguir el progreso de la creación del clúster utilizando la función estado del clúster.

Verificación de la implantación

Para comprobar el progreso ejecute el siguiente comando, que observará (argumento -w) el progreso de la creación de pods. Si todo va bien entonces tendremos tres pods del cluster Couchbase alojando los servicios según la definición del cluster Couchbase.

Si por alguna razón se produce una excepción, puede encontrar los detalles de la excepción en el archivo de registro couchbase-operator. Para visualizar las últimas 20 líneas del registro, copie el nombre de su pod Operator y ejecute el siguiente comando sustituyendo el nombre del pod Operator por el nombre de su entorno.

Asegurémonos de comprobar los registros de external-dns para ver si se están creando los registros DNS para los pods de Couchbase.

En este punto, también puede comprobar la página DNS accediendo a su Cloudfare cuenta. Puede ver los registros CNAME y TXT añadidos por su proveedor de DNS externo.

External DNS provider

Acceso a la consola web de Couchbase

Ahora, tienes un cluster direccionable públicamente que puedes empezar a usarlo. En el entorno EKS, se puede acceder a la consola web de Couchbase a través de un servicio LoadBalancer expuesto de un pod específico. Debería poder conectarse a la consola de Couchbase utilizando la URL https://cbopedns-0000.cbdemo.balajiacloud.guru:18091/ (sustituya el nombre del pod y el dominio DNS en función de su entorno).

Consulte Acceder a la interfaz de usuario del servidor Couchbase para más detalles sobre cómo conectarse a la consola de Couchbase. También puedes consultar Configurar SDK de cliente para más detalles sobre cómo conectar el SDK cliente con el cluster de Couchbase mientras se usa DNS Based Addressing con DNS Externo.

Publicly addressable Couchbase cluster

Conclusión

En este blog, vimos cómo el clúster Couchbase puede ser direccionable públicamente usando Couchbase Operator con Kubernetes External DNS. Hablamos de cómo la solución de DNS externo ayuda a gestionar dinámicamente los registros DNS externos desde dentro de un clúster Kubernetes. En este artículo, hemos utilizado Amazon EKS como nuestro entorno Kubernetes, pero los mismos pasos también serían aplicables si está utilizando otros entornos Kubernetes como AKS, GKE, OpenShift, etc.

Recursos

 

Autor

Publicado por Balaji Narayanan, Arquitecto de soluciones, Couchbase

Balaji Narayanan es Arquitecto de Soluciones en el equipo CoE de Couchbase. Tiene una amplia experiencia en el diseño, desarrollo e implementación de aplicaciones empresariales utilizando tecnologías Java/Java EE y plataformas en la nube. Tiene una amplia experiencia en el desarrollo de soluciones de arquitectura y diseño de soluciones para implementar la arquitectura Cloud utilizando AWS, Azure, plataformas Cloud GCP. Tiene experiencia en el diseño y evaluación de alternativas de arquitectura para modelos de nube privada, pública e híbrida. Es profesional certificado en AWS y Kubernetes. Antes de unirse a Couchbase, Balaji estuvo comprometido con Microsoft construyendo plataformas IaaS y PaaS para servicios Azure Cloud-native. Es licenciado en Tecnología de la Información por la Universidad Anna (India).

1 Comentarios

  1. Gracias Balaji. Esto es útil.

    ¿Es necesario registrar un nuevo dominio DNS público? Quiero decir, un dominio aws (por ejemplo, ap-sur-1.elb.amazonaws.com) no se puede utilizar, puede ser con un subdominio?

Dejar una respuesta