Salta al contenuto

Come posso accedere ai broker di Amazon MSK da porte personalizzate?

5 minuti di lettura
0

Desidero accedere ai broker di Streaming gestito da Amazon per Apache Kafka (Amazon MSK) da porte personalizzate.

Breve descrizione

Per una configurazione personalizzata delle porte, puoi modificare le impostazioni advertised.listerner dalle porte predefinite (9092-plaintext/9094-TLS/9096-SASL-SCRAM/9098-IAM) a qualsiasi porta, inclusa 443. Queste impostazioni rimangono in Apache ZooKeeper e restano invariate dopo il riavvio del broker.

Puoi implementare una configurazione di porta personalizzata tramite una configurazione a porta singola o multi-porta. Una configurazione a porta singola, ad esempio la porta 443, richiede Network Load Balancer separati per ogni broker. Una configurazione a più porte utilizza un Network Load Balancer con porte diverse per ogni broker.

La seguente risoluzione si basa su un approccio di configurazione a porta singola.

Importante: i cluster basati KRaft di Amazon MSK attualmente non supportano modifiche dinamiche dei listener pubblicizzati. Questa è una limitazione nota nell'implementazione KRaft di Apache Kafka e si applica a tutti i cluster basati su KRaft, inclusi quelli eseguiti in Amazon MSK. Amazon MSK supporta KRaft nelle versioni 3.7 e successive. Per i casi d'uso che richiedono aggiornamenti dinamici degli ascoltatori, utilizza i cluster basati su ZooKeeper.

Risoluzione

Aggiorna la porta del broker

Per aggiornare la porta del broker 1 da 9094 a 443, esegui un comando simile al seguente esempio dal computer client:

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

Esempio di output:

Completed updating config for entity: broker 1

Per aggiornare la porta del broker 2 alla 443, esegui un comando simile al seguente esempio dal computer client:

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

Esempio di output:

Completed updating config for entity: broker 2

Best practice

Applica le seguenti best practice:

  • Devi eseguire i comandi precedenti 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.
  • Non sostituite le porte 9093 e 9095 nei comandi precedenti.
  • Utilizza i valori corretti per il campo del client quando aggiorni la configurazione della porta del broker.
    Ad esempio, 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].

Per verificare l'attuale configurazione del listener del broker, completa i seguenti passaggi:

  1. Per avviare la shell Apache ZooKeeper, esegui questo comando:

    ./zookeeper-shell.sh ZooKeeper_connection_string
  2. Per elencare le informazioni di configurazione per il broker 1, esegui questo comando:

    get /brokers/ids/1

    Esempio di output:

    {
        "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 nello stesso Amazon Virtual Private Cloud (Amazon VPC) del cluster Amazon MSK con i seguenti valori:

  • Per Tipo di destinazione, utilizza ** ip**.
  • Per Protocollo, utilizza TCP.
  • Per Porta, utilizza 9094.

Quindi utilizza l'indirizzo IP del broker per registrare il broker di Amazon MSK nel rispettivo gruppo di destinazione.

Per ottenere l'indirizzo IP del broker, esegui un comando simile al seguente esempio:

Broker 1

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

Esempio di output:

10.0.3.##

Broker 2

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

Esempio di output:

10.0.4.##

Crea due Network Load Balancer

Crea due Network Load Balancer con le seguenti impostazioni:

  • Per Listener, modifica la porta in modo che punti verso la porta 443 pubblicizzata dal broker.
  • Per Azione predefinita, seleziona il rispettivo gruppo di destinazione per inoltrare il traffico.
  • Per Mappature, assicurati di selezionare le sottoreti in cui esistono i broker di Amazon MSK.

Assicurati di attivare il bilanciamento del carico tra zone per i Network Load Balancer che hai creato.

Crea una zona ospitata privata di Amazon Route 53

Crea una zona ospitata privata di Amazon Route 53 con i seguenti valori:

  • Per Nome dominio, inserisci il nome di dominio contenuto nella stringa del broker. Ad esempio, kafka.us-east-1.amazonaws.com.
  • Per ID VPC, inserisci l'ID del VPC dei client.

Crea due record alias di tipo A

Per evitare errori di handshake TLS, crea due record alias di tipo A con nomi di record identici ai rispettivi nomi DNS dei broker.

Assicurati che le regole in entrata 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, connettiti alla porta 443 pubblicizzata dal broker.

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

Informazioni correlate

How Goldman Sachs builds cross-account connectivity to their Amazon MSK clusters with AWS PrivateLink (In che modo Goldman Sachs crea la connettività tra account ai propri cluster Amazon MSK con AWS PrivateLink)

Configurazioni Amazon MSK personalizzate

Configure a custom domain name for your Amazon MSK cluster (Configurazione di un nome di dominio personalizzato per un cluster Amazon MSK)

Establishing Multi-tenant, Custom Domain-based Secure Connectivity to Amazon MSK through a Kafka Proxy (Come stabilire una connettività multi-tenant personalizzata basata su dominio sicura ad Amazon MSK tramite un proxy Kafka)

Consuming private Amazon API Gateway APIs using mutual TLS (Utilizzo di API private di Gateway Amazon API con TLS reciproco)