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

ホストベースの静的アクセスを使用するように Kafka を構成した場合、Kafka のアドバタイズドリスナーが、ブローカーのプレフィックスとドメイン名を使用してセットアップされます。

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

この方法を使用するには、次の要件を満たしている必要があります。

  • Kafka が TLS を使用して構成されている。
  • SSL パススルーをサポートする Ingress コントローラーが使用されている。

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

  1. アクセスの種類が staticForHostBasedRouting の Kafka を構成してデプロイします。

    listeners:
      external:
        externalAccess:
          type: staticForHostBasedRouting
          staticForHostBasedRouting:
            port:            --- [1]
            domain:          --- [2]
            brokerPrefix:    --- [3]
    
    • [1](必須)ブローカーのアドバタイズされたリスナーに使用される port です。SNI の機能をサポートするには、443 に設定します。

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

    • [2](必須)``domain`` は、Kafka のアドバタイズされたリスナーの一部として構成されます。

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

    • [3](省略可)デフォルトの Kafka ブローカープレフィックスを変更するには、brokerPrefix を使用します。デフォルトの Kafka ブローカープレフィックスは b です。

      これらは DNS エントリに使用されます。ブローカー DNS 名は <brokerPrefix>0.<domain><brokerPrefix>1.<domain>、などとなります。

      設定されていない場合、デフォルトのブローカー DNS 名は b0.<domain>b1.<domain>、などとなります。

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

      • b0.example.com:443
      • b1.example.com:443
      • b2.example.com:443

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

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

    使用する Ingress コントローラーには、構成された HTTPS ポート(デフォルトは 443)ですべてのトラフィックをインターセプトして Kafka TCP プロキシに渡す SSL パススルーのサポートが必要です。

    たとえば、以下の Helm コマンドでは、SSL パススルーが有効な NGINX Ingress コントローラーがインストールされます。

    helm upgrade --install <release name> stable/nginx-ingress \
      --set controller.publishService.enabled=true \
      --set controller.extraArgs.enable-ssl-passthrough="true"
    
  3. Kafka ブローカーの DNS アドレスが Ingress コントローラーを指すように構成します。Kafka DNS エントリを取得するには以下が必要です。

    • ステップ 1 の構成ファイルで指定した domain

    • Ingress コントローラーのロードバランサーの外部 IP。

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

      kubectl get services -n <namespace>
      
    • ステップ 1 の構成ファイルで指定した Kafka の brokerPrefix

    DNS テーブルエントリを以下の例に示します。使用パラメーターは次のとおりです。

    • ドメイン: example.com
    • デフォルトのプレフィックス/レプリカ番号を使用するブローカーレプリカ 3 個: b
    DNS name               ExternalIP
    b0.example.com       34.71.198.214
    b1.example.com       34.71.198.214
    b2.example.com       34.71.198.214
    
  4. インバウンドトラフィックの Kafka へのルーティングで Ingress コントローラーによって使用されるルールのコレクションが含まれた Ingress リソース を作成します。

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

    NGINX コントローラーのデプロイと Ingress リソースの構成の詳細については、このチュートリアル を参照してください。

    以下の例では、NGINX Ingress コントローラーの Ingress リソースを作成します。このリソースでは、3 つの Kafka ブローカーが公開されます。

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      name: ingress-with-sni
      annotations:
        nginx.ingress.kubernetes.io/ssl-passthrough: "true" ---[1]
        nginx.ingress.kubernetes.io/ssl-redirect: "false"   ---[2]
        nginx.ingress.kubernetes.io/backend-protocol: HTTPS ---[3]
        ingress.kubernetes.io/ssl-passthrough: "true"       ---[4]
        kubernetes.io/ingress.class: nginx                  ---[5]
    spec:
      tls:
        - hosts:
            - demo0.example.com
            - demo1.example.com
            - demo2.example.com
            - demo.example.com
      rules:
        - host: demo0.example.com
          http:
            paths:
              - backend:
                  serviceName: kafka-0-internal
                  servicePort: 9092
        - host: demo1.example.com
          http:
            paths:
              - backend:
                  serviceName: kafka-1-internal
                  servicePort: 9092
        - host: demo2.example.com
          http:
            paths:
              - backend:
                  serviceName: kafka-2-internal
                  servicePort: 9092
    
    • アノテーション [1] ではコントローラーに対して、TLS 接続を直接バックエンドへ送信し、NGINX での通信の復号は行わないよう指示します。
    • アノテーション [2] では、デフォルト値を無効にします。
    • アノテーション [3] には、NGINX によるバックエンドサービスとの通信方法を指定します。
    • アノテーション [4] の ssl-passthrough は必須です。
    • アノテーション [5] では、NGINX コントローラーの使用を指定しています。

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