사용자 지정 포트에서 Amazon MSK 브로커에 액세스하려면 어떻게 해야 합니까?

4분 분량
0

사용자 지정 포트에서 Amazon Managed Streaming for Apache Kafka(Amazon MSK)에 액세스하고 싶습니다.

간략한 설명

Amazon MSK의 advertised.listener 구성을 기본 Kafka 브로커 포트 9094 및 9092에서 443으로 또는 원하는 다른 포트로 동적으로 업데이트할 수 있습니다. 동적 구성은 Apache ZooKeeper에 저장됩니다. 따라서 이러한 구성은 브로커를 재시작할 때 업데이트되지 않습니다.

예를 들어, Apache Kafka 버전 2.4.1에 TLS 암호화 및 일반 텍스트 트래픽이 활성화된 브로커 두 개를 포함하는 Amazon MSK 클러스터가 있다고 가정합니다. advertised.listener 속성을 수정하여 브로커 구성을 업데이트하려면 클라이언트 시스템이 Amazon MSK 클러스터와 동일한 Virtual Private Cloud(VPC)에 있어야 합니다. 포트 443에서 수신 대기하고 연결하려면 kafka.amazon.com에서 Network Load Balancer, 대상 그룹 및 Amazon Route 53 프라이빗 호스팅 영역을 구성해야 합니다.

다음 접근 방식 중 하나를 사용하여 이러한 구성을 생성할 수 있습니다.

  • 모든 브로커에 대해 단일 포트를 사용해야 하는 경우 각 브로커에 대해 별도의 Network Load Balancer를 구성해야 합니다. 예를 들어 두 브로커에 단일 포트 443을 사용하려면 클라이언트와 브로커 간의 통신 패턴은 다음과 유사합니다.
    클라이언트 - 포트 443용 Network Load Balancer 1 - 브로커 1의 대상 그룹 - 브로커 1 클라이언트 - 포트 443용 Network Load Balancer 2 - 브로커 2의 대상 그룹 - 브로커 2
  • 모든 브로커에 대해 하나의 Network Load Balancer를 사용해야 하는 경우 각 브로커에 대해 별도의 포트를 사용해야 합니다. 예를 들어 두 브로커에 하나의 Network Load Balancer를 사용하려면 클라이언트와 브로커 간의 통신 패턴은 다음과 유사합니다.
    클라이언트 - Network Load Balancer 리스너 포트 9001 - 브로커 1의 대상 그룹 - 브로커 1 클라이언트 - Network Load Balancer 리스너 포트 9002 - 브로커 2의 대상 그룹 - 브로커 2

이 문서에서는 첫 번째 접근 방식에 대해 설명합니다.

해결 방법

브로커 포트 업데이트

클라이언트 시스템에서 다음과 유사한 명령을 실행하여 브로커 1의 포트를 9094에서 443으로 업데이트합니다.

[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

클라이언트 시스템에서 다음과 유사한 명령을 실행하여 브로커 2의 포트를 443으로 업데이트합니다.

[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

참고:

  • 동일한 클라이언트 시스템에서 각 브로커에 대해 개별적으로 앞의 명령을 실행해야 합니다. 이 구성 업데이트에서는 브로커를 재시작할 필요가 없습니다.
  • REPLICATIONREPLICATION_SECURE의 값을 수정할 때는 브로커 이름에 -internal을 추가해야 합니다.
  • 명령에서 포트 90939095를 교체해서는 안됩니다.
  • 브로커 포트 구성을 업데이트할 때 client 필드에 올바른 값을 사용해야 합니다. 예: TLS - CLIENT_SECURE의 경우 **[CLIENT_SECURE://b-1.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com:443]**을 사용합니다. SASL - CLIENT_SASL_SCRAM의 경우 **[CLIENT_SASL_SCRAM://b-1.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com:443]**을 사용합니다. IAM - CLIENT_IAM의 경우 **[CLIENT_IAM://b-1.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com:443]**을 사용합니다.

다음을 수행하여 client 필드의 값을 확인할 수 있습니다.

1.    다음 명령을 실행하여 Apache ZooKeeper 셸로 들어갑니다.

./zookeeper-shell.sh <ZooKeeper_connection_string>

2.    다음 명령을 실행하여 브로커 1에 대한 구성을 나열합니다.

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

두 개의 대상 그룹 생성

다음 옵션을 사용하여 Amazon MSK 클러스터와 동일한 VPC에 두 개의 대상 그룹(예: TG1 및 TG2)을 생성합니다.

  • 대상 유형 - ip
  • 프로토콜 - TCP
  • 포트 - 9094

그런 다음 브로커의 IP 주소를 사용하여 Amazon MSK 브로커를 각 대상 그룹에 등록합니다.

다음과 유사한 명령을 실행하여 브로커의 IP 주소를 가져옵니다.

[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

두 개의 Network Load Balancer 생성

다음 설정을 사용하여 두 개의 Network Load Balancer(예: NLB1 및 NLB2)를 생성합니다.

  • **리스너(Listeners)**의 경우, 브로커의 노출된 포트 443을 가리키도록 포트를 수정합니다.
  • **기본 작업(Default action)**의 경우, 트래픽을 전달할 각 대상 그룹을 선택합니다.
  • **매핑(Mappings)**의 경우, Amazon MSK 브로커가 있는 서브넷을 선택해야 합니다.

생성한 Network Load Balancer에 대해 교차 영역 로드 밸런싱을 활성화해야 합니다.

Route 53 프라이빗 호스팅 영역 생성

다음 옵션을 사용하여 Route 53 프라이빗 호스팅 영역을 생성합니다.

  • **도메인 이름(Domain Name)**의 경우, 브로커 문자열의 도메인 이름(예: kafka.us-east-1.amazonaws.com)을 입력합니다.
  • VPC ID의 경우, 클라이언트의 VPC ID를 입력합니다.

두 개의 A 유형 별칭 레코드 생성

Amazon Route 53 콘솔을 사용하여 브로커의 각 DNS 이름과 동일한 레코드 이름을 가진 두 개의 A 유형 별칭 레코드를 생성합니다. 이는 TLS 핸드셰이크 실패를 방지하는 데 필요합니다.

클러스터의 보안 그룹에 대한 인바운드 규칙이 Network Load Balancer의 IP 주소에서 포트 9094로의 트래픽을 허용하는지 확인합니다.

위의 모든 단계를 수행한 후 브로커의 노출된 포트 443에 연결할 수 있습니다.

참고: 이 솔루션은 Amazon MSK 클러스터에 대해 활성화된 모든 유형의 액세스 제어 방법에 사용할 수 있습니다.


관련 정보

How Goldman Sachs builds cross-account connectivity to their Amazon MSK clusters with AWS PrivateLink

사용자 지정 MSK 구성

AWS 공식
AWS 공식업데이트됨 2년 전