Confluent コンポーネントにアクセスするためのノードポートの構成

外部クライアントアクセスに NodePort サービスを使用して Confluent コンポーネントを構成した場合、Confluent コンポーネントの各ノードに異なるポートが Kubernetes により割り当てられます。Kafka のブローカー、ブートストラップサービス、および各コンポーネントにはそれぞれ別個のポートからアクセスできます。

ノードポートを使用した Kafka への外部アクセスの構成

ブローカーが N 個ある Kafka クラスターには、N+1 個の NodePort サービスが作成されます。

  • ブートストラップサーバー用に 1 個。初期接続用
  • N 個のサービス。各ブローカーにつき 1 個で、その後ブローカーとの直接接続で使用
  1. Kubernetes クラスターに属する単一または複数のノードのアドレスを使用して、DNS レコードを作成します。

  2. ノードポートを使用して Kafka を構成するには、Kafka のカスタムリソース(CR)で次のように設定し、kubectl apply -f コマンドで構成を適用します。

    spec:
      listeners:
        external:
          externalAccess:
            type: nodePort
            nodePort:
              nodePortOffset:     --- [1]
    
              host:               --- [2]
    
    • [1](必須)値は、30000 ~ 32767 の範囲(両端の値を含む)でなければなりません。

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

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

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

  3. 使用する予定の NodePort 範囲での接続を許可するファイアウォールルールを作成します。ファイアウォールルールの作成手順については、「ファイアウォールルールの使用」を参照してください。

  4. 次のコマンドを使用して名前空間内のサービスをリスト表示し、NodePort サービスが正しく作成されていることを確認します。

    kubectl get services -n <namespace> | grep NodePort
    

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

ノードポートを使用した MDS への外部アクセスの構成

ロールベースアクセス制御(RBAC)を有効にして MDS への外部アクセスをセットアップする場合、追加でネットワーク構成の手順が必要になります。

MDS への外部アクセスを有効にした場合、ブローカーが N 個ある、RBAC が有効な Kafka クラスターには、N+2 個の NodePort サービスが作成されます。

  • ブートストラップサーバー用に 1 個。初期接続用
  • ブートストラップサーバー上の MDS 用に 1 個
  • N 個のサービス。各ブローカーにつき 1 個で、その後ブローカーとの直接接続で使用

ノードポートを使用した Kafka Metadata Service (MDS) への外部アクセスをサポートするには、Kafka のカスタムリソース(CR)で次のように設定し、kubectl apply -f コマンドを使用して構成を適用します。

spec
  services
    mds:
      externalAccess:
        type: nodePort
        nodePort:
          externalTrafficPolicy: --- [1]
          host:                  --- [2]
          nodePortOffset:        --- [3]
          advertisedURL:         --- [4]
  • [1] MDS サービスの外部トラフィックポリシーを指定します。Cluster または Local に設定します。

  • [2] MDS のホスト名。

  • [3] MDS のポート番号。値は、3000032767 (両端の値を含む)でなければなりません。

  • [4] 設定されている場合、内部のエンドポイントを使用するのではなく、各ブローカーの MDS にアドバタイズされるリスナーが <httpSchema>://<host>:<nodePortOffset + podId + 1> に設定されます。<podId> の範囲は 0 から replicaCount -1 です。

    このプロパティは、内部 SAN を MDS の TLS 証明書に追加できない場合にのみ使用します。また、外部 DNS は Kubernetes クラスター内で解決する必要があります。

ノードポートを使用して外部から MDS にアクセスするためのエンドポイントは http(s)://<host>:<nodePortOffset> です。

例を次に示します。

spec
  services
    mds:
      externalAccess:
        type: nodePort
        nodePort:
          externalTrafficPolicy: Cluster
          host: example.com
          nodePortOffset: 30001

ノードポートを使用した他の Confluent Platform コンポーネントへの外部アクセスの構成

ノードポートを使用した他の Confluent コンポーネントを構成するには、次の手順に従います。

  1. コンポーネントの CR で次のように設定し、kubectl apply -f コマンドを使用して構成を適用します。

    spec:
      externalAccess:
        type: nodePort
        nodePort:
          nodePortOffset:         --- [1]
    
          host:                   --- [2]
    
          sessionAffinity:        --- [3]
          sessionAffinityConfig:  --- [4]
            clientIP:
              timeoutSeconds:     --- [5]
    
      configOverrides:
        server:
          - advertised.listeners= --- [6]
    

    各 Confluent Platform コンポーネントのアクセスエンドポイントは <host>:<nodePortOffset> です。

    • [1](必須)値は、30000 ~ 32767 の範囲(両端の値を含む)でなければなりません。

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

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

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

    • [3] コンシューマー REST Proxy でクライアント IP ベースのセッションアフィニティを有効にする場合に必須です。

      REST Proxy を Kafka コンシューマーで使用する場合は、 ClientIP に設定します。セッションアフィニティの詳細については、「Kubernetes Service」を参照してください。

    • [4] [3] で sessionAffinity: ClientIP を設定した場合に、セッションアフィニティの構成を格納します。

    • [5] ClientIP タイプのセッションのスティッキー時間(秒数)を指定します。この値は、0 より大きく、86400 (1 日)以下でなければなりません。

      デフォルト値は 10800 (3 時間)です。

    • [6] ノードポートに使用する外部 DNS 名に設定します。この構成は、V3 応答で絶対 URL を生成するために使用されます。HTTP プロトコルおよび HTTPS プロトコルがサポートされます。

  2. 使用する予定の NodePort 範囲での接続を許可するファイアウォールルールを作成します。ファイアウォールルールの作成手順については、「ファイアウォールルールの使用」を参照してください。

  3. 次のコマンドを使用して名前空間内のサービスをリスト表示し、NodePort サービスが正しく作成されていることを確認します。

    kubectl get services -n <namespace> | grep NodePort
    

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