跳至內容

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

2 分的閱讀內容
0

我想要從自訂連接埠存取 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

最佳實務

請檢視以下最佳實務:

  • 您必須針對每個代理程式,從相同的用戶端機器分別執行上述命令。此組態更新不需要重啟代理程式。
  • 當您修改 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 叢集相同的 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 叢集建立跨帳戶連線

自訂 Amazon MSK 組態

設定 Amazon MSK 叢集的自訂網域名稱

透過 Kafka Proxy 建立與 Amazon MSK 的多租用戶、自訂網域型安全連線

使用雙向 TLS 耗用私有 Amazon API Gateway API

AWS 官方已更新 10 個月前