Confluent コンポーネントに対するポートベースの静的アクセスの構成

ポートベースの静的アクセスを使用するように Kafka を構成した場合、Kafka のアドバタイズドリスナーが、同じホストと異なるポートを使用してセットアップされます。

この方法では、Kubernetes リソースは作成されません。NGINX Ingress コントローラーを使用するなどして、Kafka への外部アクセスを明示的に構成する必要があります。

ポートベースルーティングを使用して Kafka への静的外部アクセスを構成するには

  1. 外部アクセスの種類として staticForPortBasedRouting を使用して Kafka をデプロイします。

    listeners:
      external:
        externalAccess:
          type: staticForPortBasedRouting
          staticForPortBasedRouting:
            portOffset:    --- [1]
            host:          --- [2]
    
    • [1](必須)開始ポート番号です。

      実行中のクラスターでこの値を変更する場合、クラスターをローリングする必要があります。

    • [2](必須)すべてのアドバタイズされたリスナーの構成に使用される FQDN です。

      実行中のクラスターでこの値を変更する場合、クラスターをローリングする必要があります。

    次に示したのは、3 つの Kafka ブローカーに使用される Kafka のアドバタイズドリスナーの例です。portOffset9093 に、hosttest.example.com に設定されています。

    • test.example.com:9093
    • test.example.com:9094
    • test.example.com:9095
  2. ingress-nginx などの Ingress コントローラーをデプロイします。利用可能なコントローラーのリストについては、「Ingress コントローラー」を参照してください。

    以下のコマンド例を参考に、TCP ポートと Kafka サービスとのマッピングを指定します。各ブローカーは、ステップ 1 で設定した portOffset に基づいて TCP ポートにマッピングされている必要があります。Kafka clusterIP サービスとポートを表示するには、以下のコマンドを使用します。

    kubectl get services -n <namespace>
    

    以下の Helm コマンドの例では、NGINX Ingress コントローラーをインストールし、ポート 9093、9094、9095 を Kafka のサービスとサービスポート(ブローカー 3 個)にマッピングしています。

    helm install <release name> stable/nginx-ingress -n <namespace> \
      --set controller.ingressClass=kafka \
      --set tcp.9093="operator/kafka-0-internal:9092" \
      --set tcp.9094="operator/kafka-1-internal:9092" \
      --set tcp.9095="operator/kafka-2-internal:9092"
    
  3. Ingress コントローラーが適切に構成されていることを確認します。詳細については、使用している Ingress コントローラーのドキュメントを参照してください。

    NGINX の場合は、以下のコマンドを実行して、configmap 名を取得し、Ingress コントローラーによって作成された configmap を検証します。

    kubectl get configmap -n <namespace>
    kubectl describe configmap <configmap name> -n <namespace>
    

    出力には、上記の Helm コマンドの場合と同様、名前空間名、Kafka ブローカーサービス名、ポートが示されます。

  4. インバウンドトラフィックの Kafka へのルーティングで Ingress コントローラーによって使用されるルールのコレクションが含まれた Ingress リソース を作成します。

    Ingress では、Ingress コントローラーに応じて一部のオプションの構成にアノテーションを使用します。その一例が rewrite-target アノテーション です。サポートされているアノテーションについては、使用している Ingress コントローラーのドキュメントを参照してください。NGINX コントローラーのデプロイと Ingress リソースの構成の詳細については、このチュートリアル を参照してください。

    以下に示したのは、NGINX Ingress コントローラーの Ingress リソースを作成して 3 つの Kafka ブローカーを公開する例です。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: ingress-without-sni
      annotations:
        kubernetes.io/ingress.class: nginx
        nginx.ingress.kubernetes.io/rewrite-target: /
    spec:
      rules:
        - host: demo.example.com
          http:
            paths:
              - path:
                backend:
                  serviceName: kafka-0-internal
                  servicePort: 9092
              - path:
                backend:
                  serviceName: kafka-1-internal
                  servicePort: 9092
              - path:
                backend:
                  serviceName: kafka-2-internal
                  servicePort: 9092
    
  5. Kafka 用にステップ #1 で指定したホスト名と、Ingress コントローラーの外部ロードバランサー IP アドレスを使用して、DNS レコードを作成します。ホスト名は、Ingress コントローラーのロードバランサーの外部 IP に解決される必要があります。

    外部 IP を取得するには、以下のコマンドを使用します。

    kubectl get services -n <namespace>
    

ポートベースの静的アクセスを使用した外部アクセスの構成に関するチュートリアルのシナリオについては、ポートベースの静的アクセスに関するクイックスタートチュートリアル を参照してください。