¿Cómo accedo a los agentes de Amazon MSK desde puertos personalizados?

Última actualización: 22-02-2022

Quiero acceder a los agentes de Amazon Managed Streaming for Apache Kafka (Amazon MSK) desde puertos personalizados.

Descripción corta

Puede actualizar dinámicamente la configuración de advertised.listener en Amazon MSK desde el puerto de agente de Kafka predeterminado 9094/9092 al 443 o cualquier otro puerto de su elección. Las configuraciones dinámicas se almacenan en Apache ZooKeeper. Por lo tanto, estas configuraciones no se actualizan cuando reinicia el agente.

Por ejemplo, supongamos que tiene un clúster de Amazon MSK con dos agentes en la versión 2.4.1 de Apache Kafka con cifrado TLS y tráfico de texto sin formato habilitados. Para actualizar la configuración del agente modificando la propiedad advertised.listener, asegúrese de que la máquina cliente esté en la misma nube virtual privada (VPC) que el clúster de Amazon MSK. Para escuchar y conectarse desde el puerto 443, debe configurar un Network Load Balancer, un grupo de destino y una zona alojada privada de Amazon Route 53 en kafka.amazon.com.

Puede crear estas configuraciones mediante cualquiera de los siguientes enfoques:

  • Si necesita usar un puerto único para todos los agentes, debe configurar Network Load Balancers independientes para cada agente. Por ejemplo, para usar un único puerto 443 para dos agentes, el patrón de comunicación entre el cliente y el agente es similar al siguiente:
    Cliente - Network Load Balancer 1 del puerto 443 - grupo de destino del agente 1 - agente 1 Cliente - Network Load Balancer 2 del puerto 443 - grupo de destino del agente 2 - agente 2
  • Si necesita usar un Network Load Balancer para todos los agentes, debe usar un puerto diferente para cada agente. Por ejemplo, si quiere usar un único Network Load Balancer para dos agentes, el patrón de comunicación entre el cliente y el agente es similar al siguiente:
    Cliente - puerto de escucha 9001 del Network Load Balancer - grupo de destino del agente 1 - agente 1 Cliente - puerto de escucha 9002 del Network Load Balancer - grupo de destino del agente 2 - agente 2

En este artículo se analiza el primer enfoque.

Resolución

Actualizar el puerto del agente

Actualice el puerto del agente 1 de 9094 a 443 ejecutando un comando similar al siguiente desde la máquina cliente:

[ec2-user@ip-aa-a-a-aaa bin]$./kafka-configs.sh --bootstrap-server 
b-1.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com:9094 --entity-type 
brokers --entity-name 1 --alter --command-config client.properties 
--add-config 
advertised.listeners=[CLIENT_SECURE://b-1.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com:443,REPLICATION://b-1-internal.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com:9093,REPLICATION_SECURE://b-1-internal.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com:9095]

Completed updating config for entity: broker 1

Actualice el puerto del agente 2 a 443 ejecutando un comando similar al siguiente desde la máquina cliente:

[ec2-user@ip-aa-a-a-aaa bin]$./kafka-configs.sh --bootstrap-server 
b-2.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com:9094 --entity-type 
brokers --entity-name 2 --alter --command-config client.properties 
--add-config 
advertised.listeners=[CLIENT_SECURE://b-2.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com:443,REPLICATION://b-2-internal.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com:9093,REPLICATION_SECURE://b-2-internal.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com:9095]

Completed updating config for entity: broker 2

Nota:

  • Debe ejecutar el comando anterior para cada agente por separado desde la misma máquina cliente. Esta actualización de configuración no requiere el reinicio del agente.
  • Cuando modifique los valores de REPLICATION y REPLICATION_SECURE, asegúrese de agregar -internal al nombre del agente.
  • Asegúrese de no reemplazar los puertos 9093 y 9095 en los comandos.
  • Asegúrese de utilizar los valores correctos para el campo cliente cuando actualice la configuración del puerto del agente. Ejemplos: para TLS - CLIENT_SECURE, use [CLIENT_SECURE://b-1.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com:443]. Para SASL - CLIENT_SASL_SCRAM, use [CLIENT_SASL_SCRAM://b-1.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com:443]. Para IAM - CLIENT_IAM, use [CLIENT_IAM://b-1.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com:443].

Puede comprobar el valor del campo cliente de la siguiente manera:

1.    Entre en el shell de Apache ZooKeeper ejecutando el siguiente comando:

./zookeeper-shell.sh <ZooKeeper_connection_string>

2.    Enumere la configuración del agente 1 ejecutando el siguiente comando:

get /brokers/ids/1
{"listener_security_protocol_map":{"REPLICATION_SECURE":"SSL","CLIENT_SASL_SCRAM":"SASL_SSL","REPLICATION":"PLAINTEXT","CLIENT":"PLAINTEXT","CLIENT_SECURE":"SSL"},"endpoints":["CLIENT://b-1.testdns.xx.c14.kafka.us-east-1.amazonaws.com:9092","CLIENT_SASL_SCRAM://b-1.dns.691zg3.c14.kafka.us-east-1.amazonaws.com:9096","CLIENT_SECURE://b-1.testdns.xx.c14.kafka.us-east-1.amazonaws.com:9094","REPLICATION://b-1-internal.testdns.xx.c14.kafka.us-east-1.amazonaws.com:9093","REPLICATION_SECURE://b-1-internal.testdns.xx.c14.kafka.us-east-1.amazonaws.com:9095"],"rack":"use1-az2","jmx_port":9099,"port":9092,"host":"b-1.testdns.xx.c14.kafka.us-east-1.amazonaws.com","version":4,"timestamp":"1645081828199"}

Crear dos grupos de destino

Cree dos grupos de destino (por ejemplo, TG1 y TG2) en la misma VPC que el clúster de Amazon MSK con las siguientes opciones:

  • ip en tipo de destino
  • TCP en protocolo
  • 9094 en puerto

A continuación, registre el agente de Amazon MSK en el grupo de destino correspondiente con la dirección IP del agente.

Ejecute un comando similar al siguiente para obtener la dirección IP del agente:

[ec2-user@ip-aa-a-a-aaa bin]$ dig +short b-1.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com
10.0.3.xx

[ec2-user@ip-aa-a-a-aaa bin]$ dig +short b-2.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com
10.0.4.xx

Crear dos Network Load Balancers

Cree dos Network Load Balancers (por ejemplo, NLB1 y NLB2) con la siguiente configuración:

  • En Listeners (Agentes de escucha), modifique el puerto para que apunte al puerto 443 anunciado del agente.
  • En Default action (Acción predeterminada), seleccione el grupo de destino correspondiente para reenviar el tráfico.
  • En Mappings (Asignaciones), asegúrese de seleccionar las subredes en las que existen los agentes de Amazon MSK.

Asegúrese de habilitar el balanceador de carga entre zonas para los Network Load Balancers que creó.

Crear una zona alojada privada de Route 53

Cree una zona alojada privada de Route 53 con las siguientes opciones:

  • En Domain Name (Nombre de dominio), ingrese el nombre de dominio de la cadena del agente (por ejemplo, kafka.us-east-1.amazonaws.com).
  • En VPC ID (ID de VPC), ingrese el ID de VPC de los clientes.

Crear dos registros de alias de tipo A

Con la consola de Amazon Route 53, cree dos registros de alias de tipo A con nombres de registro idénticos a los nombres de DNS correspondientes de los agentes. Esto es necesario para evitar cualquier error de establecimiento de enlace de TLS.

Asegúrese de que las reglas de entrada del grupo de seguridad del clúster permitan el tráfico desde la dirección IP de los Network Load Balancers al puerto 9094.

Después de llevar a cabo todos los pasos anteriores, puede conectarse al puerto 443 anunciado del agente.

Nota: Esta solución funciona para todos los tipos de métodos de control de acceso que están habilitados para los clústeres de Amazon MSK.


How Goldman Sachs builds cross-account connectivity to their Amazon MSK clusters with AWS PrivateLink (Cómo Goldman Sachs crea conectividad entre cuentas a sus clústeres de Amazon MSK con AWS PrivateLink)

Custom MSK configurations (Configuraciones de MSK personalizadas)

¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?