Come posso accedere ai broker Amazon MSK da porte personalizzate?

Ultimo aggiornamento: 22/02/2022

Desidero accedere ai broker Amazon Managed Streaming for Apache Kafka (Amazon MSK) da porte personalizzate.

Breve descrizione

Puoi aggiornare dinamicamente la configurazione advertised.listener in Amazon MSK dalla porta del broker Kafka predefinita 9094/9092 alla porta 443 o a qualsiasi altra porta che preferisci. Le configurazioni dinamiche sono archiviate in Apache ZooKeeper. Pertanto, queste configurazioni non vengono aggiornate quando si riavvia il broker.

Ad esempio, supponiamo di avere un cluster Amazon MSK con due broker su Apache Kafka versione 2.4.1 con crittografia TLS e traffico non crittografato abilitati. Per aggiornare la configurazione del broker modificando la proprietà advertised.listener, assicurati che il computer client si trovi nello stesso cloud privato virtuale (VPC) del cluster Amazon MSK. Per ascoltare e connetterti dalla porta 443, è necessario configurare un Network Load Balancer, un gruppo di destinazione e una zona ospitata privata di Amazon Route 53 su kafka.amazon.com.

Puoi creare queste configurazioni utilizzando uno dei seguenti approcci:

  • Se ti occorre utilizzare una porta singola per tutti i broker, è necessario configurare Network Load Balancer separati per ciascun broker. Ad esempio, per utilizzare una singola porta 443 per due broker, il modello di comunicazione tra il client e il broker è simile al seguente:
    Client - Network Load Balancer 1 per la porta 443 - gruppo di destinazione per il broker 1 - Client broker 1 - Network Load Balancer 2 per la porta 443 - gruppo di destinazione per il broker 2 - broker 2
  • Se ti occorre utilizzare un Network Load Balancer per tutti i broker, è necessario utilizzare una porta separata per ciascun broker. Ad esempio, per utilizzare un Network Load Balancer per due broker, il modello di comunicazione tra client e broker è simile al seguente:
    Client - porta listener del Network Load Balancer 9001 - gruppo di destinazione per il broker 1 - Client broker 1 - porta listener del Network Load Balancer 9002 - gruppo di destinazione per broker il 2 - broker 2

Questo articolo illustra il primo approccio.

Risoluzione

Aggiorna la porta del broker

Aggiorna la porta per il broker 1 da 9094 a 443 eseguendo un comando simile al seguente dal computer client:

[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

Aggiorna la porta per il broker 2 a 443 eseguendo un comando simile al seguente dal computer client:

[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:

  • È necessario eseguire il comando precedente per ogni broker separatamente dallo stesso computer client. Questo aggiornamento della configurazione non richiede il riavvio del broker.
  • Quando modifichi i valori per REPLICATION e REPLICATION_SECURE, assicurati di aggiungere -internal al nome del broker.
  • Assicurati di non sostituire le porte 9093 e 9095 nei comandi.
  • Assicurati di utilizzare i valori corretti per il campo client quando aggiorni la configurazione della porta del broker. Esempi: per TLS - CLIENT_SECURE, utilizza [CLIENT_SECURE: //b-1.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com:443]. Per SASL - CLIENT_SASL_SCRAM, utilizza [CLIENT_SASL_SCRAM: //b-1.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com:443]. Per IAM - CLIENT_IAM, utilizza [CLIENT_IAM: //b-1.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com:443].

Puoi verificare il valore per il campo client effettuando le seguenti operazioni:

1.    Entra nella shell di Apache ZooKeeper eseguendo il seguente comando:

./zookeeper-shell.sh <ZooKeeper_connection_string>

2.    Elenca la configurazione per il broker 1 eseguendo il seguente 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"}

Crea due gruppi di destinazione

Crea due gruppi di destinazione (ad esempio: TG1 e TG2) nello stesso cloud privato virtuale del cluster Amazon MSK con le seguenti opzioni:

  • ip per target type (tipo di destinazione)
  • TCP per Protocol (protocollo)
  • 9094 per Port (Porta)

Quindi, registra il broker Amazon MSK nel rispettivo gruppo di destinazione utilizzando l'indirizzo IP del broker.

Esegui un comando simile al seguente per ottenere l'indirizzo IP del broker:

[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

Crea due Network Load Balancer

Crea due Network Load Balancer (ad esempio: NLB1 e NLB2) con le seguenti impostazioni:

  • Per Listeners (Listener), modifica la porta in modo che punti alla porta 443 pubblicizzata dal broker.
  • Per Default action (Operazione predefinita), seleziona il rispettivo gruppo di destinazione per inoltrare il traffico.
  • Per Mappings (Mappature), assicurati di selezionare le sottoreti in cui si trovano i broker Amazon MSK.

Assicurati di abilitare il bilanciamento del carico su più zone per i Network Load Balancer creati.

Crea una zona ospitata privata di Route 53

Crea una zona ospitata privata di Route 53 con le seguenti opzioni:

  • Per Domain Name (Nome di dominio), inserisci il nome di dominio dalla stringa del broker (ad esempio: kafka.us-east-1.amazonaws.com).
  • Per VPC ID (ID VPC), inserisci l'ID VPC dei client.

Crea due record di alias di tipo A

Utilizzando la console Amazon Route 53, crea due record di alias di tipo A con i nomi dei record identici ai rispettivi nomi DNS dei broker. Questa operazione è necessaria per evitare errori di handshake TLS.

Assicurati che le regole in ingresso per il gruppo di sicurezza del cluster consentano il traffico dall'indirizzo IP dei Network Load Balancer alla porta 9094.

Dopo aver eseguito tutti i passaggi precedenti, puoi connetterti alla porta 443 pubblicizzata dal broker.

Nota: questa soluzione funziona per tutti i tipi di metodi di controllo degli accessi abilitati per i cluster Amazon MSK.