Saltar al contenido

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

5 minutos de lectura
0

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

Descripción corta

Para una configuración de puertos personalizada, puedes cambiar la configuración advertised.listerner de tus puertos predeterminados (9092-plaintext/9094-TLS/9096-SASL-SCRAM/9098-IAM) a cualquier puerto, incluido el 443. Esta configuración se mantiene en Apache ZooKeeper y permanece inalterada tras el reinicio del agente.

Puedes implementar una configuración de puerto personalizada mediante una configuración de puerto único o una configuración de varios puertos. Una configuración de puerto único, por ejemplo, el puerto 443, requiere equilibradores de carga de red independientes para cada agente. Una configuración de varios puertos usa un equilibrador de carga de red con diferentes puertos para cada agente.

La siguiente resolución se centra en un enfoque de configuración de puerto único.

Importante: Los clústeres basados en Kraft de Amazon MSK actualmente no admiten modificaciones dinámicas en los agentes de escucha anunciados. Esta es una limitación conocida en la implementación de Kraft de Apache Kafka y se aplica a todos los clústeres basados en Kraft, incluidos los que se ejecutan en Amazon MSK. Amazon MSK admite Kraft en las versiones 3.7 y posteriores. Para los casos de uso que requieren actualizaciones dinámicas del agente de escucha, utiliza clústeres basados en ZooKeeper.

Resolución

Actualización del puerto del agente

Para actualizar el puerto del agente 1 de 9094 a 443, ejecuta un comando similar al siguiente ejemplo desde el equipo cliente:

./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]

Resultado de ejemplo:

Completed updating config for entity: broker 1

Para actualizar el puerto del agente 2 a 443, ejecuta un comando similar al siguiente ejemplo desde el equipo cliente:

./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]

Resultado de ejemplo:

Completed updating config for entity: broker 2

Prácticas recomendadas

Revise estas prácticas recomendadas:

  • Debes ejecutar los comandos anteriores para cada agente por separado desde el mismo equipo cliente. Esta actualización de configuración no requiere el reinicio del agente.
  • Cuando modifiques los valores de REPLICATION y REPLICATION_SECURE, asegúrate de agregar -internal al nombre del agente.
  • No sustituyas los puertos 9093 y 9095 en los comandos anteriores.
  • Utiliza los valores correctos para el campo de cliente al actualizar la configuración del puerto del agente.
    Por ejemplo, para TLS - CLIENT_SECURE, usa [CLIENT_SECURE://b-1.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com:443].
    Para SASL - CLIENT_SASL_SCRAM, usa [CLIENT_SASL_SCRAM://b-1.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com:443].
    Para IAM - CLIENT_IAM, usa [CLIENT_IAM://b-1.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com:443].

Para comprobar la configuración actual del agente de escucha del agente, sigue estos pasos:

  1. Para iniciar el shell de Apache ZooKeeper, ejecuta el siguiente comando:

    ./zookeeper-shell.sh ZooKeeper_connection_string
  2. Para mostrar la información de configuración del agente 1, ejecuta el siguiente comando:

    get /brokers/ids/1

    Resultado de ejemplo:

    {
        "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"
    }

Creación de dos grupos objetivo

Crea dos grupos objetivo en la misma Amazon Virtual Private Cloud (Amazon VPC) que tu clúster de Amazon MSK con los valores siguientes:

  • En Tipo de destino, utiliza ip.
  • En Protocolo, utiliza TCP.
  • En Puerto, utiliza 9094.

A continuación, utiliza la dirección IP del agente para registrar el agente de Amazon MSK en el grupo objetivo correspondiente.

Para obtener la dirección IP del agente, ejecuta un comando similar al siguiente ejemplo:

Agente 1

dig +short b-1.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com

Resultado de ejemplo:

10.0.3.##

Agente 2

dig +short b-2.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com

Resultado de ejemplo:

10.0.4.##

Creación de dos equilibradores de carga de red

Crea dos equilibradores de carga de red con la siguiente configuración:

  • En Agentes de escucha, modifica el puerto para que apunte al puerto 443 anunciado por el agente.
  • En Acción predeterminada, selecciona el grupo objetivo correspondiente para reenviar el tráfico.
  • En Asignaciones, asegúrate de seleccionar las subredes en las que existen los agentes de Amazon MSK.

Asegúrate de activar el equilibrio de carga entre zonas para los equilibradores de carga de red que has creado.

Creación de una zona alojada privada de Amazon Route 53

Crea una zona alojada privada de Amazon Route 53 con los siguientes valores:

  • En Nombre de dominio, introduce el nombre de dominio de la cadena de tu agente. Por ejemplo, kafka.us-east-1.amazonaws.com.
  • En ID de VPC, introduce el ID de VPC de los clientes.

Creación de dos registros de alias de tipo A

Para evitar cualquier error en el protocolo de enlace TLS, crea dos registros de alias de tipo A con nombres de registro que sean idénticos a los nombres DNS respectivos de los agentes.

Asegúrate de que las reglas de entrada del grupo de seguridad del clúster permitan el tráfico desde la dirección IP de los equilibradores de carga de red al puerto 9094.

Tras realizar todos los pasos anteriores, conéctate al puerto 443 anunciado por el agente.

Nota: Esta solución funciona para todos los tipos de métodos de control de acceso que hayas activado en los clústeres de Amazon MSK.

Información relacionada

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

Configuraciones personalizadas de Amazon MSK

Configure a custom domain name for your Amazon MSK cluster (Configuración de un nombre de dominio personalizado para tu clúster de Amazon MSK)

Establishing Multi-tenant, Custom Domain-based Secure Connectivity to Amazon MSK through a Kafka Proxy (Establecimiento de una conectividad segura basada en dominios personalizados para varios inquilinos con Amazon MSK a través de un proxy de Kafka)

Consuming private Amazon API Gateway APIs using mutual TLS (Consumo de las API privadas de Amazon API Gateway mediante TLS mutuo)

OFICIAL DE AWSActualizada hace 4 meses