要如何從自訂連接埠存取 Amazon MSK 代理程式?
我想要從自訂連接埠存取 Amazon Managed Streaming for Apache Kafka (Amazon MSK) 代理程式。
簡短描述
自訂連接埠組態,您可以將 advertised.listener 設定從預設連接埠 (9092-plaintext/9094-TLS/9096-SASL-SCRAM/9098-IAM) 更改為任意連接埠 (包括 443)。這些設定會保存在 Apache ZooKeeper 中,並在代理程式重啟後保持不變。
您可以透過單一連接埠組態或多連接埠組態來實作自訂連接埠組態。例如,單一連接埠組態 (如連接埠 443) 需要為每個代理程式使用獨立的 Network Load Balancer。多連接埠組態則使用一個 Network Load Balancer,每個代理程式使用不同連接埠。
以下解決方法著重於單一連接埠組態的方法。
**重要:**目前 Amazon MSK KRaft 型叢集不支援動態修改公告接聽程式。這是 Apache Kafka 的 KRaft 實作中已知的限制,適用於所有 KRaft 型叢集,包括在 Amazon MSK 上執行的叢集。Amazon MSK 支援 KRaft 3.7 及更新版本。對於需要動態更新接聽程式的使用案例,請使用 ZooKeeper 型叢集。
解決方法
更新代理程式連接埠
若要將代理程式 1 的連接埠從 9094 更新為 443,請從用戶端機器執行類似以下範例的命令:
./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,請從用戶端機器執行類似以下範例的命令:
./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
最佳實務
請檢視以下最佳實務:
- 您必須針對每個代理程式,從相同的用戶端機器分別執行上述命令。此組態更新不需要重啟代理程式。
- 當您修改 REPLICATION 與 REPLICATION_SECURE 的值時,請務必在代理程式名稱中加入 -internal。
- 請勿替換上述命令中的連接埠 9093 和 9095。
- 在更新代理程式連接埠組態時,請使用用戶端欄位的正確值。
例如,對於 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]。
若要檢查代理程式目前的接聽程式組態,請完成以下步驟:
-
若要啟動 Apache ZooKeeper Shell,請執行以下命令:
./zookeeper-shell.sh ZooKeeper_connection_string -
若要列出代理程式 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 叢集相同的 Amazon Virtual Private Cloud (Amazon VPC) 中建立兩個目標群組,並使用以下值:
- 在 target type (目標類型),使用 ip。
- 在 Protocol (通訊協定),使用 TCP。
- 在 Port (連接埠),使用 9094。
然後,使用代理程式的 IP 位址,將 Amazon MSK 代理程式註冊到相應的目標群組。
若要取得代理程式的 IP 位址,請執行類似以下範例的命令:
代理程式 1
dig +short b-1.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com
輸出範例:
10.0.3.##
代理程式 2
dig +short b-2.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com
輸出範例:
10.0.4.##
建立兩個 Network Load Balancer
建立兩個 Network Load Balancer,並使用以下設定:
- 在 Listeners (接聽程式),修改連接埠以指向代理程式的公告連接埠 443。
- 在 Default actions (預設動作) 中,選取相應的目標群組以轉送流量。
- 在 Mappings (對應) 中,務必選取 Amazon MSK 代理程式所在的子網路。
確保為您建立的 Network Load Balancer 啟用跨區域負載平衡。
建立 Amazon Route 53 私有託管區域
建立 Amazon Route 53 私有託管區域,並使用以下值:
- 在 Domain Name (網域名稱) 中,輸入您代理程式字串中的網域名稱。例如,kafka.us-east-1.amazonaws.com。
- 在 VPC ID,輸入用戶端的 VPC ID。
建立兩個 A 類型別名記錄
為避免任何 TLS 交握失敗,請建立兩個 A 類型別名記錄,其記錄名稱需與代理程式的對應 DNS 名稱相同。
確保叢集安全群組的傳入規則允許來自 Network Load Balancer IP 位址的流量傳輸到連接埠 9094。
在完成上述所有步驟後,即可連接到代理程式公告連接埠 443。
**注意:**此解決方案適用於您為 Amazon MSK 叢集啟用的所有類型的存取控制方法。
相關資訊
Goldman Sachs 如何使用 AWS PrivateLink 與 Amazon MSK 叢集建立跨帳戶連線
- 語言
- 中文 (繁體)

相關內容
已提問 2 年前
已提問 3 年前