Confluent コンポーネントに対するホストベースの静的アクセスの構成¶
ホストベースの静的アクセスを使用するように Kafka を構成した場合、Kafka のアドバタイズドリスナーが、ブローカーのプレフィックスとドメイン名を使用してセットアップされます。
この方法では、Kubernetes リソースは作成されません。NGINX Ingress コントローラーを使用するなどして、Kafka への外部アクセスを明示的に構成する必要があります。
この方法を使用するには、次の要件を満たしている必要があります。
- Kafka が TLS を使用して構成されている。
- SSL パススルーをサポートする Ingress コントローラーが使用されている。
その他、Metadata Service (MDS) への外部アクセスを実現するために必要な構成手順については、「RBAC のためのネットワークの構成」を参照してください。
静的ホストベースルーティングを使用して Kafka への外部アクセスを構成するには
アクセスの種類が
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: 443
とdomain: example.com
が使用されています。b0.example.com:443
b1.example.com:443
b2.example.com:443
実行中のクラスターでこの値を変更する場合、クラスターをローリングする必要があります。
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"
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
インバウンドトラフィックの 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 コントローラーの使用を指定しています。
ホストベースの静的アクセスを使用した外部アクセスの構成に関するチュートリアルのシナリオについては、ホストベースの静的アクセスに関するクイックスタートチュートリアル を参照してください。