14.7. OpenShift ルートを使用した Kafka へのアクセス


OpenShift ルートを使用して、OpenShift クラスター外のクライアントから Streams for Apache Kafka クラスターにアクセスします。

ルートを使用できるようにするには、Kafka カスタムリソースに route タイプリスナーの設定を追加します。適用すると、設定により、外部ブートストラップとクラスター内の各ブローカーに専用のルートとサービスが作成されます。クライアントはブートストラップルートに接続し、ブートストラップサービスを経由してクライアントをルーティングし、ブローカーに接続します。その後、ブローカーごとの接続が DNS 名を使用して確立されます。DNS 名は、ブローカー固有のルートとサービスを介してクライアントからブローカーにトラフィックをルーティングします。

ブローカーに接続するには、ルートブートストラップアドレスのホスト名と、TLS 暗号化に使用される証明書を指定します。ルートを使用したアクセスでは、ポートは常に 443 になります。

警告

OpenShift ルートアドレスは、Kafka クラスター名、リスナー名、プロジェクト名、およびルーターのドメインで構成されます。たとえば、my-cluster-kafka-external1-bootstrap-my-project.domain.com (<cluster_name>-kafka-<listener_name>-bootstrap-<namespace>.<domain>) のようになります。各 DNS ラベル (ピリオド.の間) は 63 文字を超えてはならず、アドレスの合計の長さは 255 文字を超えてはなりません。

この手順では、基本的なリスナー設定を示します。TLS 暗号化 (tls) を有効にする必要があります。クライアント認証メカニズム (authentication) を指定することもできます。configuration プロパティーを使用して追加の設定を追加します。たとえば、route リスナーで host 設定プロパティーを使用して、ブートストラップサービスおよびブローカーごとのサービスで使用されるホスト名を指定できます。

リスナー設定の詳細は、GenericKafkaListener スキーマリファレンス を参照してください。

TLS パススルー

Streams for Apache Kafka によって作成されたルートでは、TLS パススルーが有効になります。Kafka は TCP 経由でバイナリープロトコルを使用しますが、ルートは HTTP プロトコルで動作するように設計されています。TCP トラフィックをルート経由でルーティングできるようにするために、Streams for Apache Kafka は Server Name Indication (SNI) を使用した TLS パススルーを使用します。

SNI は、Kafka ブローカーへの接続を識別して渡すのに役立ちます。パススルーモードでは、TLS 暗号化が常に使用されます。接続はブローカーに渡されるため、リスナーは、ingress 証明書ではなく、内部クラスター CA によって署名された TLS 証明書を使用します。独自のリスナー証明書を使用するようにリスナーを設定するには、brokerCertChainAndKey プロパティーを使用します

前提条件

  • 稼働中の Cluster Operator

この手順では、Kafka クラスター名は my-cluster です。リスナーの名前は external1 です。

手順

  1. 外部リスナーを route タイプに設定した Kafka リソースを設定します。

    以下に例を示します。

    apiVersion: kafka.strimzi.io/v1beta2
    kind: Kafka
    metadata:
      labels:
        app: my-cluster
      name: my-cluster
      namespace: myproject
    spec:
      kafka:
        # ...
        listeners:
          - name: external1
            port: 9094
            type: route
            tls: true 1
            authentication:
              type: tls
            # ...
        # ...
      zookeeper:
        # ...
    1
    route タイプリスナーの場合、TLS 暗号化を有効にする必要があります (true)。
  2. リソースを作成または更新します。

    oc apply -f <kafka_configuration_file>

    kafka ブローカーの ID を確認するためのクラスター CA 証明書は、シークレットの my-cluster-cluster-ca-cert に作成されます。

    ClusterIP タイプサービスは、各 Kafka ブローカーと、外部のブートストラップサービスに対して作成されます。

    デフォルトの OpenShift HAProxy ルーターを使用してサービスを公開するための DNS アドレス (ホスト/ポート) を使用して、サービスごとに route も作成されます。

    ルートは、TLS パススルーで事前設定されています。

    ブートストラップとブローカー用に作成されたルート

    NAME                                  HOST/PORT                                                  SERVICES                              PORT  TERMINATION
    my-cluster-kafka-external1-0          my-cluster-kafka-external1-0-my-project.router.com         my-cluster-kafka-external1-0          9094  passthrough
    my-cluster-kafka-external1-1          my-cluster-kafka-external1-1-my-project.router.com         my-cluster-kafka-external1-1          9094  passthrough
    my-cluster-kafka-external1-2          my-cluster-kafka-external1-2-my-project.router.com         my-cluster-kafka-external1-2          9094  passthrough
    my-cluster-kafka-external1-bootstrap  my-cluster-kafka-external1-bootstrap-my-project.router.com my-cluster-kafka-external1-bootstrap  9094  passthrough

    クライアント接続に使用される DNS アドレスは、各ルートの status に伝播されます。

    ブートストラップルートのステータスの例

    status:
      ingress:
        - host: >-
            my-cluster-kafka-external1-bootstrap-my-project.router.com
     # ...

  3. ターゲットブローカーを使用して、OpenSSL s_client を使用するポート 443 でクライアントサーバーの TLS 接続を確認します。

    openssl s_client -connect my-cluster-kafka-external1-0-my-project.router.com:443 -servername my-cluster-kafka-external1-0-my-project.router.com -showcerts

    サーバー名は、接続をブローカーに渡すための Server Name Indication (SNI) です。

    接続が成功すると、ブローカーの証明書が返されます。

    ブローカーの証明書

    Certificate chain
     0 s:O = io.strimzi, CN = my-cluster-kafka
       i:O = io.strimzi, CN = cluster-ca v0

  4. Kafka リソースのステータスからブートストラップサービスのアドレスを取得します。

    oc get kafka my-cluster -o=jsonpath='{.status.listeners[?(@.name=="external1")].bootstrapServers}{"\n"}'
    
    my-cluster-kafka-external1-bootstrap-my-project.router.com:443

    アドレスは、Kafka クラスター名、リスナー名、プロジェクト名、およびルーターのドメイン (この例では router.com) で構成されます。

  5. クラスター CA 証明書を抽出します。

    oc get secret my-cluster-cluster-ca-cert -o jsonpath='{.data.ca\.crt}' | base64 -d > ca.crt
  6. ブローカーに接続するようにクライアントを設定します。

    1. Kafka クラスターに接続するためのブートストラップアドレスとして、Kafka クライアントでブートストラップサービスのアドレスとポート 443 を指定します。
    2. 抽出した証明書を Kafka クライアントのトラストストアに追加して、TLS 接続を設定します。

      クライアント認証メカニズムを有効にした場合は、クライアントでもそれを設定する必要があります。

注記

独自のリスナー証明書を使用している場合は、CA 証明書をクライアントのトラストストア設定に追加する必要があるかどうかを確認してください。パブリック (外部) CA の場合、通常は追加する必要はありません。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.