如何從自訂連接埠存取 Amazon MSK 代理程式?

2 分的閱讀內容
0

我想從自訂連接埠存取 Amazon Managed Streaming for Apache Kafka (Amazon MSK) 代理程式。

簡短描述

您可以將 Amazon MSK 中的 advertised.listener 組態從預設 Kafka 代理程式連接埠 9094/9092 動態更新為 443 或您選擇的任何其他連接埠。動態組態存放在 Apache ZooKeeper 中。因此,當您重新啟動代理程式時,這些組態不會得到更新。

例如,假設您在 Apache Kafka 版本 2.4.1 上擁有附帶兩個代理程式的 Amazon MSK 叢集,啟用了 TLS 加密和純文字流量。要透過修改 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
  • 更新代理程式連接埠組態時,請確保為用戶端欄位使用正確的值。示例:對於 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]

您可以透過執行以下操作來檢查用戶端欄位的值:

1.    透過執行以下命令進入 Apache ZooKeeper shell:

./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 主控台,建立兩條 A 型別名記錄,記錄名稱與代理程式的個別 DNS 名稱相同。這是防止任何 TLS 交握失敗所必需的。

確保叢集安全群組的入站規則允許從 Network Load Balancer 的 IP 地址到連接埠 9094 的流量。

執行上述所有步驟後,您可以連線至代理程式的公告連接埠 443。

**注意:**此解決方案適用於為 Amazon MSK 叢集啟用之所有類型的存取控制方法。


相關資訊

Goldman Sachs 如何透過 AWS PrivateLink 建置與其 Amazon MSK 叢集的跨帳戶連線

自訂 MSK 組態

AWS 官方
AWS 官方已更新 2 年前