Como acessar agentes do Amazon MSK a partir de portas personalizadas?

Última atualização: 22/02/2022

Quero acessar agentes do Amazon Managed Streaming for Apache Kafka (Amazon MSK) a partir de portas personalizadas.

Breve descrição

Você pode atualizar dinamicamente a configuração advertised.listener no Amazon MSK da porta padrão do agente Kafka 9094/9092 para 443 ou qualquer outra porta de sua escolha. As configurações dinâmicas são armazenadas no Apache ZooKeeper. Portanto, essas configurações não são atualizadas quando você reinicia o agente.

Por exemplo, suponha que você tenha um cluster do Amazon MSK com dois agentes no Apache Kafka versão 2.4.1 com criptografia TLS e tráfego de texto simples habilitados. Para atualizar a configuração do agente modificando a propriedade advertised.listener, certifique-se de que sua máquina cliente esteja na mesma nuvem privada virtual (VPC) que o cluster do Amazon MSK. Para escutar e se conectar a partir da porta 443, você deve configurar um Network Load Balancer, um grupo de destino e uma zona hospedada privada do Amazon Route 53 em kafka.amazon.com.

Você pode criar essas configurações usando uma das seguintes abordagens:

  • Se precisar usar uma única porta para todos os agentes, você deverá configurar Network Load Balancers separados para cada agente. Por exemplo, para usar uma única porta 443 para dois agentes, o padrão de comunicação entre o cliente e o agente é semelhante ao seguinte:
    Cliente - Network Load Balancer 1 para a porta 443 - grupo de destino para o agente 1 - agente 1 Cliente - Network Load Balancer 2 para a porta 443 - grupo de destino para o agente 2 - agente2
  • Se você precisar usar um Network Load Balancer para todos os agentes, deverá usar uma porta separada para cada agente. Por exemplo, para usar um Network Load Balancer para dois agentes, o padrão de comunicação entre o cliente e o agente é semelhante ao seguinte:
    Cliente - Porta do listener do Network Load Balancer 9001 - grupo de destino para agente 1 - agente 1 Cliente - Porta do listener do Network Load Balancer 9002 - grupo de destino para agente 2 - agente 2

Este artigo discute a primeira abordagem.

Resolução

Atualizar a porta do agente

Atualize a porta para o agente 1 de 9094 para 443, executando um comando semelhante ao seguinte na 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

Atualize a porta do agente 2 para 443, executando um comando semelhante ao seguinte na 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

Observação:

  • Você deve executar o comando anterior para cada agente separadamente na mesma máquina cliente. Essa atualização de configuração não requer a reinicialização do agente.
  • Ao modificar os valores de REPLICATION e REPLICATION_SECURE, certifique-se de adicionar -internal ao nome do agente.
  • Certifique-se de não substituir as portas 9093 e 9095 nos comandos.
  • Certifique-se de usar os valores corretos para o campo do cliente ao atualizar a configuração da porta do agente. Exemplos: 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]. IAM - CLIENT_IAM, use [CLIENT_IAM://b-1.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com:443].

Você pode verificar o valor do campo do cliente fazendo o seguinte:

1.    Entre no shell do Apache ZooKeeper executando o seguinte comando:

./zookeeper-shell.sh <ZooKeeper_connection_string>

2.    Liste a configuração do agente 1 executando o seguinte 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"}

Crie dois grupos de destino

Crie dois grupos de destino (exemplo: TG1 e TG2) na mesma VPC do cluster do Amazon MSK com as seguintes opções:

  • ip para target type (Tipo de destino)
  • TCP para Protocol (Protocolo)
  • 9094 para Port (Porta)

Em seguida, registre o agente do Amazon MSK no respectivo grupo de destino usando o endereço IP do agente.

Execute um comando semelhante ao seguinte para obter o endereço IP do 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

Crie dois Network Load Balancers

Crie dois Network Load Balancers (exemplo: NLB1 e NLB2) com as seguintes configurações:

  • Para Listeners, modifique a porta de forma que ela aponte para a porta 443 anunciada do agente.
  • Para Default action (Ação padrão), selecione o respectivo grupo de destino para encaminhar o tráfego.
  • Para Mappings (Mapeamentos), certifique-se de selecionar as sub-redes onde existem os agentes do Amazon MSK.

Certifique-se de habilitar o balanceamento de carga entre zonas para os Network Load Balancers que você criou.

Crie uma zona hospedada privada do Route 53

Crie uma zona hospedada privada do Route 53 com as seguintes opções:

  • Para Domain Name (Nome de domínio), insira o nome de domínio da string do agente (exemplo: kafka.us-east-1.amazonaws.com).
  • Para VPC ID (ID da VPC), insira o ID da VPC dos clientes.

Crie dois registros de alias do tipo A

Usando o console do Amazon Route 53, crie dois registros de alias do tipo A com nomes de registro idênticos aos respectivos nomes DNS dos agentes. Isso é necessário para evitar falhas de handshake do TLS.

Certifique-se de que as regras de entrada para o grupo de segurança do cluster permitam o tráfego do endereço IP dos Network Load Balancers para a porta 9094.

Depois de executar todas as etapas anteriores, você poderá se conectar à porta 443 anunciada do agente.

Observação: essa solução funciona para todos os tipos de métodos de controle de acesso habilitados para clusters do Amazon MSK.