第2章 Streams for Apache Kafka Console の Kafka クラスターへの接続


Streams for Apache Kafka Console を、Streams for Apache Kafka によって管理される Kafka クラスターと同じ OpenShift クラスターにデプロイします。Streams for Apache Kafka Console に付属のインストールファイルを使用します。

各 Kafka クラスターでは、クラスターのインストールに使用される Kafka リソースの設定に以下が必要です。

  • コンソールがクラスターに接続するための十分な権限。
  • Prometheus が有効になっており、クラスターからメトリクスを取得できます。
  • Prometheus に適した形式でメトリクスをエクスポートするためのメトリクス設定 (ConfigMap 経由)。

Streams for Apache Kafka Console では、KafkaUser カスタムリソースとして設定された Kafka ユーザーが必要です。これは、コンソールが認証および認可されたユーザーとしてクラスターにアクセスするために必要です。

KafkaUser 認証および認可メカニズムを設定する場合、必ず同等の Kafka 設定と一致するようにしてください。

  • KafkaUser.spec.authenticationKafka.spec.kafka.listeners[*].authentication と一致します。
  • KafkaUser.spec.authorizationKafka.spec.kafka.authorization と一致します。
注記

Kubernetes および Kafka クラスターからメトリクスをスクレイピングし、コンソールにメトリクスグラフを入力するには、Prometheus をインストールして設定する必要があります。

前提条件

  • インストール用に system:admin などの cluster-admin ロールを持つ OpenShift ユーザーを用意する。
  • OpenShift 4.12 - 4.15 クラスター。
  • OpenShift クラスター上で実行されている Streams for Apache Kafka によって管理される Kafka クラスター。
  • Prometheus Operator。これは、OpenShift モニタリング用にデプロイされた Operator とは別の Operator である必要があります。
  • oc コマンドラインツールがインストールされ、OpenShift クラスターに接続するように設定されている。
  • コンソール内のセッション管理と認証のためのシークレットの値。

    次のように OpenSSL TLS 管理ツールを使用して値を生成できます。

    Copy to Clipboard Toggle word wrap
    SESSION_SECRET=$(LC_CTYPE=C openssl rand -base64 32)
    echo "Generated SESSION_SECRET: $SESSION_SECRET"
    
    NEXTAUTH_SECRET=$(LC_CTYPE=C openssl rand -base64 32)
    echo "Generated NEXTAUTH_SECRET: $NEXTAUTH_SECRET"

    使用されるオプションのコマンドラインの説明は、openssl help を使用してください。

コンソールをインストールするためのファイルに加えて、Streams for Apache Kafka Operator、Prometheus Operator、Prometheus インスタンス、および Kafka クラスターをインストールするための事前設定済みファイルも、Streams for Apache Kafka Console のインストールアーティファクトに含まれています。この手順では、Operator がインストールされていることを前提としています。インストールファイルを使用すると、最も簡単にコンソールをセットアップして試すことができます。ただし、Streams for Apache Kafka と Prometheus の独自のデプロイメントを使用することもできます。

手順

  1. Streams for Apache Kafka Console インストールアーティファクトをダウンロードして展開します。

    アーティファクトは、Streams for Apache Kafka ソフトウェアダウンロードページ から入手できるインストールおよびサンプルファイルに含まれています。

    ファイルには、コンソール、Kafka クラスター、および Prometheus に必要なデプロイメント設定が含まれています。

    この Kafka 設定の例では、コンソールが Kafka クラスターに接続するために使用するルートリスナーを作成します。コンソールと Kafka クラスターは同じ OpenShift クラスターにデプロイされるため、ルートの代わりに Kafka クラスターの内部ブートストラップアドレスを使用できます。

  2. Prometheus インストールファイルを適用して、コンソールに必要な設定を持つ Prometheus インスタンスを作成します。

    1. console-prometheus-server.clusterrolebinding.yaml ファイルの ${NAMESPACE} を編集して、Prometheus インスタンスがインストールされる namespace を使用します。

      Copy to Clipboard Toggle word wrap
      sed -i 's/${NAMESPACE}/'"my-project"'/g' <resource_path>/console-prometheus-server.clusterrolebinding.yaml

      たとえば、この手順では、my-project namespace にインストールします。この設定では、Prometheus のロールとそのサービスアカウントをバインドします。

    2. 次の順序でインストールファイルを適用して、Prometheus インスタンスを作成します。

      Copy to Clipboard Toggle word wrap
      # Prometheus security resources
      oc apply -n my-project -f <resource_path>/prometheus/console-prometheus-server.clusterrole.yaml
      oc apply -n my-project -f <resource_path>/prometheus/console-prometheus-server.serviceaccount.yaml
      oc apply -n my-project -f <resource_path>/prometheus/console-prometheus-server.clusterrolebinding.yaml
      
      # Prometheus PodMonitor and Kubernetes scrape configurations
      oc apply -n my-project -f <resource_path>/prometheus/kafka-resources.podmonitor.yaml
      oc apply -n my-project -f <resource_path>/prometheus/kubernetes-scrape-configs.secret.yaml
      
      # Prometheus instance
      oc apply -n my-project -f <resource_path>/prometheus/console-prometheus.prometheus.yaml

      インスタンスの名前は console-prometheus で、コンソールに接続するためのサービスの URL は http://prometheus-operated.my-project.svc.cluster.local:9090 です (my-project は namespace 名から取得されます)。

      注記

      console-prometheus インスタンスは OpenShift クラスターの外部からアクセスする必要がないため、ルートはデプロイされません。

  3. Kafka クラスターを作成してデプロイします。

    1. KRaft モードで動作している Kafka クラスターでコンソールを使用している場合は、console-kafka-metrics.configmap.yaml ファイルでクラスターのメトリクス設定を更新します。

      • KRaft 関連のメトリクス設定のコメントを解除します。
      • ZooKeeper 関連のメトリクスをコメントアウトします。

      このファイルには、コンソールに必要なメトリクス設定が含まれています。

    2. console-kafka-user1.kafkauser.yaml ファイル内の KafkaUser カスタムリソースを編集し、ACL タイプを追加して、コンソールから Kafka クラスターへの承認済みアクセスを付与します。

      少なくとも、Kafka ユーザーには次の ACL ルールが必要です。

      • cluster リソースの DescribeDescribeConfigs 権限
      • すべての topic リソースに対する ReadDescribeDescribeConfigs 権限
      • すべての group リソースに対する ReadDescribe 権限

        ユーザー認証設定の例

        Copy to Clipboard Toggle word wrap
        apiVersion: kafka.strimzi.io/v1beta2
        kind: KafkaUser
        metadata:
          name: console-kafka-user1
          labels:
            strimzi.io/cluster: console-kafka
        spec:
          authentication:
            type: scram-sha-512
          authorization:
            type: simple
            acls:
              - resource:
                  type: cluster
                  name: ""
                  patternType: literal
                operations:
                  - Describe
                  - DescribeConfigs
              - resource:
                  type: topic
                  name: "*"
                  patternType: literal
                operations:
                  - Read
                  - Describe
                  - DescribeConfigs
              - resource:
                  type: group
                  name: "*"
                  patternType: literal
                operations:
                  - Read
                  - Describe

    3. console-kafka.kafka.yaml ファイルを編集して、プレースホルダーを置き換えます。

      Copy to Clipboard Toggle word wrap
      sed -i 's/type: ${LISTENER_TYPE}/type: route/g' console-kafka.kafka.yaml
      sed -i 's/\${CLUSTER_DOMAIN}/'"<my_router_base_domain>"'/g' console-kafka.kafka.yaml

      このファイルには、Kafka クラスターを作成するための Kafka カスタムリソース設定が含まれています。

      これらのコマンドは次のことを実行します。

      • type: ${LISTENER_TYPE}type: route に置き換えます。この例では route タイプを使用していますが、${LISTENER_TYPE} をデプロイメントの有効なリスナータイプに置き換えることもできます。
      • ${CLUSTER_DOMAIN} を、ブートストラップおよび各ブローカーのサービスで使用されるルートリスナーホストを指定するために必要なベースドメインの値に置き換えます。デフォルトでは、route リスナーのホストは OpenShift によって自動的に割り当てられます。ただし、ホストを指定して、割り当てられたルートをオーバーライドすることができます。

      あるいは、サンプル設定を独自の Kafka デプロイメントにコピーする こともできます。

    4. 次の順序でインストールファイルを適用して、Kafka クラスターを作成します。

      Copy to Clipboard Toggle word wrap
      # Metrics configuration
      oc apply -n my-project -f <resource_path>/console-kafka-metrics.configmap.yaml
      
      # Create the cluster
      oc apply -n my-project -f <resource_path>/console-kafka.kafka.yaml
      
      # Create a user for the cluster
      oc apply -n my-project -f <resource_path>/console-kafka-user1.kafkauser.yaml

      独自の Kafka クラスターを使用している場合は、console-kafka.kafka.yaml の代わりに更新された Kafka リソース設定を適用します。

      インストールファイルは、Kafka クラスターと、クラスターに接続するためにコンソールで必要な Kafka ユーザーおよびメトリクス設定を作成します。コンソールから監視する Kafka クラスターごとに、Kafka ユーザーとメトリクス設定が必要です。各 Kafka ユーザーには一意の名前が必要です。

    5. Kafka クラスターが Prometheus インスタンスとは異なる namespace にある場合は、kafka-resources.podmonitor.yaml ファイルを変更して namespaceSelector を含めます。

      Copy to Clipboard Toggle word wrap
      apiVersion: monitoring.coreos.com/v1
      kind: PodMonitor
      metadata:
        name: kafka-resources
        labels:
          app: console-kafka-monitor
      spec:
        namespaceSelector:
          matchNames:
            - <kafka_namespace>
        # ...

      これにより、Prometheus が Kafka Pod を監視できるようになります。<kafka_namespace> は、Kafka クラスターがデプロイされている実際の namespace に置き換えます。

  4. デプロイメントのステータスを確認します。

    Copy to Clipboard Toggle word wrap
    oc get pods -n <my_console_namespace>

    出力には Operator とクラスターの準備状況が表示されます

    Copy to Clipboard Toggle word wrap
    NAME                          READY   STATUS   RESTARTS
    strimzi-cluster-operator      1/1     Running  0
    console-kafka-kafka-0         1/1     Running  0
    console-kafka-kafka-1         1/1     Running  0
    console-kafka-kafka-2         1/1     Running  0
    prometheus-operator-...       1/1     Running  0
    prometheus-console-prometheus 1/1     Running  0

    ここで、console-kafka はクラスターの名前です。

    Pod ID は作成された Pod を識別します。

    デフォルトのデプロイメントでは、3 つの Pod をインストールします。

    READY は、ready/expected 状態のレプリカ数を表示します。STATUS が Running と表示されれば、デプロイメントは成功です。

  5. Streams for Apache Kafka Console をインストールします。

    1. コンソールインスタンスがインストールされる namespace を使用するように console-server.clusterrolebinding.yaml ファイルを編集します。

      Copy to Clipboard Toggle word wrap
      sed -i 's/${NAMESPACE}/'"my-project"'/g' /<resource_path>console-server.clusterrolebinding.yaml

      設定により、コンソールのロールとそのサービスアカウントがバインドされます。

    2. 次の順序でインストールファイルを適用して、コンソールユーザーインターフェイスをインストールし、インターフェイスにルートします。

      Copy to Clipboard Toggle word wrap
      # Console security resources
      oc apply -n my-project -f <resource_path>/console-server.clusterrole.yaml
      oc apply -n my-project -f <resource_path>/console-server.serviceaccount.yaml
      oc apply -n my-project -f <resource_path>/console-server.clusterrolebinding.yaml
      
      # Console user interface service
      oc apply -n my-project -f <resource_path>/console-ui.service.yaml
      
      # Console route
      oc apply -n my-project -f <resource_path>/console-ui.route.yaml

      インストールにより、コンソールユーザーインターフェイスを実行するために必要なロール、ロールバインディング、サービスアカウント、サービス、およびルートが作成されます。

    3. コンソール内でのセッション管理と認証のための 2 つのシークレット値 (前提条件で説明) を含む console-ui-secrets という Secret を作成します。

      Copy to Clipboard Toggle word wrap
      oc create secret generic console-ui-secrets -n my-project \
          --from-literal=SESSION_SECRET="<session_secret_value>" \
          --from-literal=NEXTAUTH_SECRET="<next_secret_value>"

      コンソールがデプロイされると、シークレットは環境変数としてマウントされます。

    4. コンソールユーザーインターフェイス用に作成されたルートのホスト名を取得します。

      Copy to Clipboard Toggle word wrap
      oc get route console-ui-route -n my-project -o jsonpath='{.spec.host}'

      コンソールユーザーインターフェイスにアクセスするには、ホスト名が必要です。

    5. console.deployment.yaml ファイルを編集してプレースホルダーを置き換えます。

      Copy to Clipboard Toggle word wrap
      sed -i 's/${CONSOLE_HOSTNAME}/'"<route_hostname>"'/g' console.deployment.yaml
      sed -i 's/${NAMESPACE}/'"my-project"'/g' console.deployment.yaml

      これらのコマンドは次のことを実行します。

      • https://${CONSOLE_HOSTNAME} を、コンソールユーザーインターフェイスにアクセスするために使用されるルートである https://<route_hostname> に置き換えます。
      • コンソールが使用する Prometheus インスタンスの URL である http://prometheus-operated.${NAMESPACE}.svc.cluster.local:9090 内の ${NAMESPACE}my-project namespace に置き換えます。

      独自の Kafka クラスターを使用している場合は、正しいクラスター名が使用され、他の環境変数が 正しい値で設定されている ことを確認してください。これらの値により、コンソールはクラスターに接続してメトリクスを取得できるようになります。

    6. コンソールをインストールします。

      Copy to Clipboard Toggle word wrap
      oc apply -n my-project -f <resource_path>/console.deployment.yaml

      出力はコンソールの準備状況を示します

      Copy to Clipboard Toggle word wrap
      NAME                          READY   STATUS   RESTARTS
      strimzi-cluster-operator      1/1     Running  0
      console-kafka-kafka-0         1/1     Running  0
      console-kafka-kafka-0         1/1     Running  0
      console-kafka-kafka-0         1/1     Running  0
      prometheus-operator-...       1/1     Running  0
      prometheus-console-prometheus 1/1     Running  0
      console-...                   2/2     Running  0

独自の Kafka クラスターにサンプル設定を追加する

Kafka クラスターがすでにインストールされている場合は、必要な設定で Kafka リソースを更新できます。クラスター設定ファイルを適用するときは、Streams for Apache Kafka Console インストールファイルに付属する Kafka リソースではなく、更新した Kafka リソースを使用します。

Kafka リソースには次の設定が必要です。

  • コンソール接続用にクラスターを公開する route リスナー
  • クラスター上のメトリクスを取得するために Prometheus メトリクスが有効になっています。メタデータ管理に ZooKeeper を使用している場合は、ZooKeeper に同じ設定を追加します。
  • クラスター名がコンソールデプロイメントファイル (console- kafka) で使用されているクラスター名と一致しない場合は、console-kafka-user1.kafkauser.yaml などの Kafka クラスターの名前を参照するデプロイメントファイルを更新します。

Prometheus メトリクス設定は、コンソールに必要なメトリクス設定を提供する ConfigMap を参照する必要があります。メトリクス設定は、console-cluster-metrics.configmap.yaml リソース設定ファイルで提供されます。

コンソール接続用の Kafka クラスター設定の例

Copy to Clipboard Toggle word wrap
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: console-kafka
  namespace: my-project
spec:
  entityOperator:
    topicOperator: {}
    userOperator: {}
  kafka:
    authorization:
      type: simple
    config:
      allow.everyone.if.no.acl.found: 'true'
      default.replication.factor: 3
      inter.broker.protocol.version: '3.6'
      min.insync.replicas: 2
      offsets.topic.replication.factor: 3
      transaction.state.log.min.isr: 2
      transaction.state.log.replication.factor: 3
    listeners: 
1

      - name: route1
        port: 9094
        tls: true
        type: route
        authentication:
          type: scram-sha-512
    replicas: 3
    storage:
      type: jbod
      volumes:
      - id: 0
        type: persistent-claim
        size: 10Gi
        deleteClaim: false
    metricsConfig: 
2

      type: jmxPrometheusExporter
      valueFrom:
        configMapKeyRef:
          name: console-cluster-metrics
          key: kafka-metrics-config.yml
    version: 3.6.0
  zookeeper:
    replicas: 3
    storage:
      deleteClaim: false
      size: 10Gi
      type: persistent-claim
    metricsConfig: 
3

      type: jmxPrometheusExporter
      valueFrom:
        configMapKeyRef:
          name: console-cluster-metrics
          key: zookeeper-metrics-config.yml

1
コンソール接続用にクラスターを公開するリスナー。この例では、ルートリスナーが設定されています。
2
Prometheus メトリクス。Prometheus JMX エクスポーターの設定が含まれる ConfigMap を参照して有効になります。
3
クラスター管理に ZooKeeper を備えた Streams for Apache Kafka を使用している場合にのみ、ZooKeeper 設定を追加します。KRaft モードでは必要ありません。

コンソールのデプロイメント環境変数を確認する

独自の Kafka クラスターを使用している場合は、コンソールのデプロイメント設定に必要な環境変数が含まれていることを確認してください。

次の接頭辞は環境変数値のスコープを決定します。

  • KAFKA は、すべての Kafka クラスターの設定を表します。
  • CONSOLE_KAFKA_<UNIQUE_NAME_ID_FOR_CLUSTER> は、特定のクラスターごとの設定を表します。

コンソールデプロイメント設定の例

Copy to Clipboard Toggle word wrap
apiVersion: apps/v1
kind: Deployment
metadata:
  name: console
spec:
  replicas: 1
  # ...
  template:
    metadata:
      labels:
        app: console
    spec:
      # ...
      containers:
      - name: console-api
        # ...
        env:
        - name: KAFKA_SECURITY_PROTOCOL 
1

          value: SASL_SSL
        - name: KAFKA_SASL_MECHANISM 
2

          value: SCRAM-SHA-512
        - name: CONSOLE_KAFKA_CLUSTER1 
3

          value: my-project/console-kafka
        - name: CONSOLE_KAFKA_CLUSTER1_BOOTSTRAP_SERVERS 
4

          value: console-kafka-route1-bootstrap-my-project.router.com:443
        - name: CONSOLE_KAFKA_CLUSTER1_SASL_JAAS_CONFIG 
5

          valueFrom:
            secretKeyRef:
              name: console-kafka-user1
              key: sasl.jaas.config
      - name: console-ui
        # ...
        env:
        - name: NEXTAUTH_SECRET 
6

          valueFrom:
            secretKeyRef:
              name: console-ui-secrets
              key: NEXTAUTH_SECRET
        - name: SESSION_SECRET 
7

          valueFrom:
            secretKeyRef:
              name: console-ui-secrets
              key: SESSION_SECRET
        - name: NEXTAUTH_URL 
8

          value: 'https://console-ui-route-my-project.router.com'
        - name: BACKEND_URL  
9

          value: 'http://127.0.0.1:8080'
        - name: CONSOLE_METRICS_PROMETHEUS_URL 
10

          value: 'http://prometheus-operated.my-project.svc.cluster.local:9090'

1
Kafka ブローカーとの通信に使用されるセキュリティープロトコル。
2
Kafka ブローカーへのコンソール (クライアント) 認証用の SASL メカニズム。
3
Kafka リソース設定でクラスターに指定された namespace および名前と一致するようにする必要があります。
4
Kafka クラスターのすべてのブローカーを検出し、接続するブートストラップブローカーアドレスのホストとポートのペア。この例では、ルートリスナーアドレスが使用されています。リスナーは Kafka リソースで設定されました。
5
Secret としてマウントされたコンソールを表す Kafka ユーザーの認証情報。対応するユーザーが作成されると、console-kafka-user1 シークレットが自動的に作成されます。シークレット内の sasl.jaas.config プロパティーには、SASL 認証用の JAAS 設定が含まれています。
6
コンソール内での認証用のシークレット。
7
コンソール内のセッション管理のシークレット
8
Streams for Apache Kafka ユーザーインターフェイスに接続し、ユーザーがコンソールにアクセスするための URL。
9
コンソールユーザーインターフェイスがデータ取得のために通信するバックエンドサーバー。
10
Kafka リソースの namespace (my-project) を含む Prometheus インスタンスに接続するための URL。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat, Inc.