Athrun Data Intelligence


Transmisión administrada por Amazon para Apache Kafka (Amazon MSK) es un servicio completamente administrado que facilita la creación y ejecución de clústeres de Kafka en Servicios web de Amazon (AWS). Al trabajar con Amazon MSK, los desarrolladores están interesados ​​en obtener al servicio localmente. Esto les permite probar su aplicación con un clúster de Kafka que tiene la misma configuración que la producción y proporciona una infraestructura idéntica al entorno vivo sin privación de ejecutar Kafka localmente.

Un Sin servidor Amazon MSK El punto final DNS privado solo es accesible desde Nubarrón privada posible de Amazon (VPC de Amazon) conexiones que se han configurado para conectarse. No se puede resolver directamente desde su entorno de incremento tópico. Una opción es usar Conexión directa de AWS o VPN de AWS Ser capaz de Conéctese a Amazon MSK Serverless desde su red tópicoSin bloqueo, construir una posibilidad de este tipo puede implicar costos y complejidad, y debe ser configurada por un equipo de plataforma.

Esta publicación presenta un enfoque práctico para obtener a su entorno de Amazon MSK para fines de incremento a través de un hospedador del bastión utilizando un túnel Secure Shell (SSH) (un método de conexión segura de uso popular). Ya sea que trabaje con Amazon MSK Serverless, donde el paso notorio no está arreglado, o con clústeres MSK aprovisionados que se mantienen privados intencionalmente, esta publicación lo consejero a través de los pasos para establecer una conexión segura e integrar sin problemas su entorno de incremento tópico con sus fortuna MSK.

Descripción caudillo de la posibilidad

La posibilidad le permite conectarse directamente al servicio Amazon MSK Serverless desde su entorno de incremento tópico sin usar Direct Connect ni una VPN. Se accede al servicio con el punto de conexión DNS del servidor de inicio boot-<>.c<>.kafka-serverless.<>.amazonaws.com en el puerto 9098 y luego se enruta a través de un túnel SSH a un host bastión, que se conecta al clúster MSK Serverless. En el sucesivo paso, exploraremos cómo configurar esta conexión.

El flujo de la posibilidad es el sucesivo:

  1. El cliente de Kafka envía una solicitud para conectarse al servidor de inicio
  2. La consulta DNS para su punto final MSK Serverless se enruta a un servidor DNS configurado localmente
  3. El servidor DNS configurado localmente enruta la consulta DNS a localhost.
  4. El túnel SSH reenvía todo el tráfico en el puerto 9098 desde el localhost al servidor MSK Serverless a través de Nubarrón de computación elástica de Amazon (Amazon EC2) host bastión.

La sucesivo imagen muestra el diagrama de casa.

Diagrama de arquitectura para acceder a Serverless MSK desde el local

Prerrequisitos

Antaño de implementar la posibilidad, debe tener los siguientes fortuna implementados en su cuenta:

  1. Un clúster MSK Serverless configurado con Encargo de identidad y paso de AWS Autenticación (IAM).
  2. A instancia de host bastión con paso de red al clúster MSK Serverless y autenticación de secreto pública SSH.
  3. AWS CLI configurada con un agraciado de IAM y poder acertar y crear temas en Amazon MSK. Utilice la política de IAM de Paso 2: Crear una función de IAM en el Presentación al uso de clústeres MSK Serverless
  4. Para los usuarios de Windows, instale Linux en Windows con el Subsistema de Windows para Linux 2 (WSL 2) utilizando Ubuntu 24.04. Para obtener instrucciones, consulte Cómo instalar Linux en Windows con WSL.

Esta consejero asume una implementación de MSK Serverless en us-east-1pero se puede utilizar en cualquier Región de AWS donde MSK Serverless está arreglado. Adicionalmente, utilizamos OS X como sistema activo. En los siguientes pasos, reemplace msk-endpoint-url con la URL del punto final de MSK Serverless con autenticación IAM. La URL del punto final de MSK tiene un formato como boot-<>.c<>.kafka-serverless.<>.amazonaws.com.

Tutorial de posibilidad

Para obtener a su entorno de Amazon MSK con fines de incremento, utilice el sucesivo tutorial.

Configurar el servidor DNS tópico OSX

Instalar Máscara de DNS como servidor DNS tópico y configurar el solucionador para resolver el MSK de Amazon. La posibilidad utiliza Dnsmasq porque puede comparar solicitudes DNS con una almohadilla de datos de patrones y utilizarlos para determinar la respuesta correcta. Esta funcionalidad puede coincidir con cualquier solicitud que termine en kafka-serverless.us-east-1.amazonaws.com y despachar 127.0.0.1 En respuesta. Siga estos pasos para instalar Dnsmasq:

  1. Refrescar brew e instalar Dnsmasq usando brew
    brew up
    brew install dnsmasq

  2. Iniciar el servicio Dnsmasq
    sudo brew services start dnsmasq

  3. Redirigir todo el tráfico para Serverless MSK (kafka-serverless.us-east-1.amazonaws.com) a 127.0.0.1
    echo address=/kafka-serverless.us-east-1.amazonaws.com/127.0.0.1 >> $(brew --prefix)/etc/dnsmasq.conf

  4. Recargar la configuración de Dnsmasq y borrar el distinción
    sudo launchctl unload /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist
    sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist
    dscacheutil -flushcache

Configurar el solucionador OS X

Ahora que tiene un servidor DNS en funcionamiento, puede configurar su sistema activo para usarlo. Configure el servidor para despachar solo .kafka-serverless.us-east-1.amazonaws.com consultas a Dnsmasq. La mayoría de los sistemas operativos similares a UNIX tienen un archivo de configuración llamado /etc/resolv.conf que controla la forma en que se realizan las consultas DNS, incluido el servidor predeterminado que se utiliza para las consultas DNS. Utilice los siguientes pasos para configurar el solucionador de OS X:

  1. OS X asimismo le permite configurar solucionadores adicionales mediante la creación de archivos de configuración en el /etc/resolver/ Es probable que este directorio no exista en tu sistema, por lo que tu primer paso debería ser crearlo:
    sudo mkdir -p /etc/resolver

  2. Crea un nuevo archivo con El mismo nombre como su nuevo dominio de nivel superior (kafka-serverless.us-east-1.amazonaws.com) en el /etc/resolver/ directorio y adicionar 127.0.0.1 como un nameserver ingresando el sucesivo comando.
    sudo tee /etc/resolver/kafka-serverless.us-east-1.amazonaws.com >/dev/null <

Configurar el servidor DNS tópico de Windows

En el Subsistema de Windows para Linux, primero instale Máscara de DNSluego configure el solucionador para resolver Amazon MSK y finalmente agregue localhost como el primero nameserver.

  1. Actualice apt e instale Dnsmasq usando apt. Instale el telnet utilidad para pruebas posteriores:
    sudo apt update
    sudo apt install dnsmasq
    sudo apt install telnet

  2. Redirigir todo el tráfico para Serverless MSK (kafka-serverless.us-east-1.amazonaws.com) a 127.0.0.1.
    echo "address=/kafka-serverless.us-east-1.amazonaws.com/127.0.0.1" | sudo tee -a /etc/dnsmasq.conf

  3. Recargue la configuración de Dnsmasq y borre el distinción.
    sudo /etc/init.d/dnsmasq restart

  4. Extenso /etc/resolv.conf y agregue el sucesivo código en la primera confín.
    nameserver 127.0.0.1

    La salida debería estar como el sucesivo código.

    #Some comments
    nameserver 127.0.0.1
    nameserver <>
    ..

Crear túnel SSH

El sucesivo paso es crear el túnel SSH, que permitirá que cualquier conexión realizada a localhost:9098 en su máquina tópico se reenvíe a través del túnel SSH al agente de Kafka de destino. Siga los siguientes pasos para crear el túnel SSH:

  1. Reemplazar bastion-host-dns-endpoint con el punto final DNS notorio del host bastión, que viene en el estilo de <<xyz>>.compute-1.amazonaws.comy reemplazar ec2-key-pair.pem con el par de claves del host bastión. Luego, cree el túnel SSH ingresando el sucesivo comando.
    ssh -i "~/<<ec2-key-pair.pem>>" ec2-user@<<bastion-host-dns-endpoint>> -L 127.0.0.1:9098:<<msk-endpoint-url>>:9098

  2. Deje el túnel SSH ejecutándose y ensenada una nueva ventana de terminal.
  3. Pruebe la conexión al servidor Amazon MSK ingresando el sucesivo comando.
    telnet <<msk-endpoint-url>> 9098

    La salida debería estar como el sucesivo ejemplo.

    Trying 127.0.0.1...
    Connected to boot-<>.c<>.kafka-serverless.us-east-1.amazonaws.com.
    Escape character is '^)'.

Pruebas

Ahora configure el cliente de Kafka para usar la autenticación IAM y luego pruebe la configuración. Puede encontrar la última instalación de Kafka en Sitio de descarga de Apache KafkaLuego descomprima y copie el contenido de la carpeta Dafka en ~/kafka.

  1. Descargue la autenticación IAM y descomprímala
    cd ~/kafka/libs
    wget https://github.com/aws/aws-msk-iam-auth/releases/download/v2.2.0/aws-msk-iam-auth-2.2.0-all.jar
    cd ~

  2. Configurar las propiedades de Kafka para utilizar IAM como mecanismo de autenticación
    cat < ~/kafka/config/client-config.properties
    
    # Sets up TLS for encryption and SASL for authN.
    
    security.protocol = SASL_SSL
    
    # Identifies the SASL mechanism to use.
    
    sasl.mechanism = AWS_MSK_IAM
    
    # Binds SASL client implementation.
    
    sasl.jaas.config = software.amazon.msk.auth.iam.IAMLoginModule required;
    
    
    # Encapsulates constructing a SigV4 signature based on extracted credentials.
    
    # The SASL client bound by "sasl.jaas.config" invokes this class.
    
    sasl.client.callback.handler.class = software.amazon.msk.auth.iam.IAMClientCallbackHandler
    
    EOF

  3. Introduzca el sucesivo comando en ~/kafka/bin Para crear un tema de ejemplo, asegúrese de que el túnel SSH creado en la sección inicial aún esté destapado y en funcionamiento.
    ./kafka-topics.sh --bootstrap-server <<msk-endpoint-url>>:9098 --command-config ~/kafka/config/client-config.properties --create --topic ExampleTopic --partitions 10 --replication-factor 3 --config retention.ms=3600000

Precisión

Para eliminar la posibilidad, complete los siguientes pasos para usuarios de Mac:

  1. Eliminar el archivo /etc/resolver/kafka-serverless.us-east-1.amazonaws.com
  2. Eliminar la entrada address=/kafka-serverless.us-east-1.amazonaws.com/127.0.0.1 in the file $(brew --prefix)/etc/dnsmasq.conf
  3. Detener el servicio Dnsmasq sudo brew services stop dnsmasq
  4. Eliminar el servicio Dnsmasq sudo brew uninstall dnsmasq

Para eliminar la posibilidad, complete los siguientes pasos para los usuarios de WSL:

  1. Eliminar el archivo /etc/dnsmasq.conf
  2. Eliminar la entrada nameserver 127.0.0.1 En el archivo /etc/resolv.conf
  3. Eliminar el servicio Dnsmasq sudo apt remove dnsmasq
  4. Quitar el telnet utilidad sudo apt remove telnet

Conclusión

En esta publicación, le presenté una consejero sobre cómo los desarrolladores pueden conectarse a Amazon MSK Serverless desde entornos locales. La conexión se realiza mediante un punto de conexión de Amazon MSK a través de un túnel SSH y un host bastión. Esto permite a los desarrolladores constatar y realizar pruebas de forma tópico, sin privación de configurar un clúster de Kafka independiente.


Acerca del autor

Simón Peyer es arquitecto de soluciones en Amazon Web Services (AWS) y reside en Suiza. Es un emprendedor práctico y le apasiona conectar la tecnología con las personas mediante los servicios de AWS Cloud. Se centra especialmente en la transmisión de datos y las automatizaciones. Adicionalmente del trabajo, Simon disfruta de su clan, del aerofagia atrevido y del senderismo en las montañas.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *