重要
このページは英語版のページを機械翻訳しています。原文はこちらからご覧ください。

リバースプロキシの背後でTiDBダッシュボードを使用する

リバースプロキシを使用して、TiDBダッシュボードサービスを内部ネットワークから外部に安全に公開できます。

手順

ステップ1:実際のTiDBダッシュボードアドレスを取得する

複数のPDインスタンスがクラスタにデプロイされている場合、実際にTiDBダッシュボードを実行するのは1つのPDインスタンスのみです。したがって、リバースプロキシのアップストリームが正しいアドレスを指していることを確認する必要があります。このメカニズムの詳細については、 複数のPDインスタンスを使用した展開を参照してください。

展開にTiUPツールを使用する場合は、次のコマンドを実行して、実際のTiDBダッシュボードアドレスを取得します( CLUSTER_NAMEをクラスタ名に置き換えます)。

tiup cluster display CLUSTER_NAME --dashboard

出力は実際のTiDBダッシュボードアドレスです。サンプルは次のとおりです。

http://192.168.0.123:2379/dashboard/

ノート:

この機能は、 tiup clusterデプロイメントツールの新しいバージョン(v1.0.3以降)でのみ使用できます。

TiUPクラスターをアップグレードする
tiup update --self
tiup update cluster --force

手順2:リバースプロキシを構成する

HAProxyを使用する

HAProxyをリバースプロキシとして使用する場合は、次の手順を実行します。

  1. たとえば、 8033ポートでTiDBダッシュボードにリバースプロキシを使用します。 HAProxy構成ファイルで、次の構成を追加します。

    frontend tidb_dashboard_front
      bind *:8033
      use_backend tidb_dashboard_back if { path /dashboard } or { path_beg /dashboard/ }
    
    backend tidb_dashboard_back
      mode http
      server tidb_dashboard 192.168.0.123:2379
    

    192.168.0.123:2379ステップ1で取得したTiDBダッシュボードの実際のアドレスのIPとポートに置き換えます。

    警告

    このパスのサービスのみがリバースプロキシの背後にあることを保証するために、 use_backendディレクティブのifの部分を保持する必要があります。そうしないと、セキュリティリスクが発生する可能性があります。 セキュリティTiDBダッシュボードを参照してください。

  2. 設定を有効にするためにHAProxyを再起動します。

  3. リバースプロキシが有効かどうかをテストします。HAProxyが配置されているマシンの8033ポート( http://example.com:8033/dashboard/など)の/dashboard/アドレスにアクセスして、TiDBダッシュボードにアクセスします。

NGINXを使用する

NGINXをリバースプロキシとして使用する場合は、次の手順を実行します。

  1. たとえば、 8033ポートでTiDBダッシュボードにリバースプロキシを使用します。 NGINX構成ファイルで、次の構成を追加します。

    server {
        listen 8033;
        location /dashboard/ {
        proxy_pass http://192.168.0.123:2379/dashboard/;
        }
    }
    

    http://192.168.0.123:2379/dashboard/ステップ1で取得したTiDBダッシュボードの実際のアドレスに置き換えます。

    警告

    このパスの下のサービスのみがリバースプロキシされるようにするには、 proxy_passディレクティブの/dashboard/パスを保持する必要があります。そうしないと、セキュリティリスクが発生します。 セキュリティTiDBダッシュボードを参照してください。

  2. 構成を有効にするためにNGINXをリロードします。

    sudo nginx -s reload
    
  3. リバースプロキシが有効かどうかをテストします。NGINXが配置されているマシンの8033ポートの/dashboard/アドレス( http://example.com:8033/dashboard/など)にアクセスして、TiDBダッシュボードにアクセスします。

パスプレフィックスをカスタマイズする

TiDBダッシュボードは、デフォルトでhttp://example.com:8033/dashboard/などの/dashboard/のパスでサービスを提供します。これは、リバースプロキシの場合にも当てはまります。 TiDBダッシュボードサービスにhttp://example.com:8033/foo/http://example.com:8033/などのデフォルト以外のパスを提供するようにリバースプロキシを構成するには、次の手順を実行します。

手順1:PD構成を変更して、TiDBダッシュボードサービスのパスプレフィックスを指定します

PD構成の[dashboard]カテゴリーのpublic-path-prefix構成項目を変更して、TiDBダッシュボードサービスのパスプレフィックスを指定します。この項目を変更した後、PDインスタンスを再起動して、変更を有効にします。

たとえば、クラスタがTiUPを使用してデプロイされ、サービスをhttp://example.com:8033/foo/で実行する場合は、次の構成を指定できます。

server_configs:
  pd:
    dashboard.public-path-prefix: /foo
TiUPを使用して新しいクラスタをデプロイするときに構成を変更する

新しいクラスタをデプロイする場合は、上記の構成をtopology.yaml TiUPトポロジファイルに追加して、クラスタをデプロイできます。具体的な手順については、 TiUP展開ドキュメントを参照してください。

TiUPを使用してデプロイされたクラスタの構成を変更する

デプロイされたクラスタの場合:

  1. クラスタの構成ファイルを編集モードで開きます( CLUSTER_NAMEをクラスタ名に置き換えます)。

    tiup cluster edit-config CLUSTER_NAME
    
  2. server_configspd構成で構成アイテムを変更または追加します。 server_configsが存在しない場合は、最上位に追加します。

    monitored:
      ...
    server_configs:
      tidb: ...
      tikv: ...
      pd:
        dashboard.public-path-prefix: /foo
      ...
    

    変更後の構成ファイルは、次のファイルのようになります。

    server_configs:
      pd:
        dashboard.public-path-prefix: /foo
      global:
        user: tidb
        ...
    

    または

    monitored:
      ...
    server_configs:
      tidb: ...
      tikv: ...
      pd:
        dashboard.public-path-prefix: /foo
    
  3. 変更した構成を有効にするために、すべてのPDインスタンスに対してローリングリスタートを実行します( CLUSTER_NAMEをクラスタ名に置き換えます)。

    tiup cluster reload CLUSTER_NAME -R pd
    

詳細については、 一般的なTiUP操作-構成を変更しますを参照してください。

TiDBダッシュボードサービスをルートパス( http://example.com:8033/など)で実行する場合は、次の構成を使用します。

server_configs:
  pd:
    dashboard.public-path-prefix: /
警告

変更およびカスタマイズされたパスプレフィックスが有効になると、TiDBダッシュボードに直接アクセスできなくなります。パスプレフィックスと一致するリバースプロキシを介してのみTiDBダッシュボードにアクセスできます。

手順2:リバースプロキシ構成を変更する

HAProxyを使用する

http://example.com:8033/foo/を例にとると、対応するHAProxy構成は次のとおりです。

frontend tidb_dashboard_front
  bind *:8033
  use_backend tidb_dashboard_back if { path /foo } or { path_beg /foo/ }

backend tidb_dashboard_back
  mode http
  http-request set-path %[path,regsub(^/foo/?,/dashboard/)]
  server tidb_dashboard 192.168.0.123:2379

192.168.0.123:2379ステップ1で取得したTiDBダッシュボードの実際のアドレスのIPとポートに置き換えます。

警告

このパスのサービスのみがリバースプロキシの背後にあることを保証するために、 use_backendディレクティブのifの部分を保持する必要があります。そうしないと、セキュリティリスクが発生する可能性があります。 セキュリティTiDBダッシュボードを参照してください。

TiDBダッシュボードサービスをルートパス( http://example.com:8033/など)で実行する場合は、次の構成を使用します。

frontend tidb_dashboard_front
  bind *:8033
  use_backend tidb_dashboard_back
backend tidb_dashboard_back
  mode http
  http-request set-path /dashboard%[path]
  server tidb_dashboard 192.168.0.123:2379

構成を変更し、変更した構成を有効にするためにHAProxyを再起動します。

NGINXを使用する

http://example.com:8033/foo/を例にとると、対応するNGINX構成は次のとおりです。

server {
  listen 8033;
  location /foo/ {
    proxy_pass http://192.168.0.123:2379/dashboard/;
  }
}

http://192.168.0.123:2379/dashboard/ステップ1で取得したTiDBダッシュボードの実際のアドレスに置き換えます。

警告

proxy_passディレクティブの/dashboard/パスを保持して、このパスのサービスのみがリバースプロキシの背後にあることを確認する必要があります。そうしないと、セキュリティリスクが発生する可能性があります。 セキュリティTiDBダッシュボードを参照してください。

TiDBダッシュボードサービスをルートパス( http://example.com:8033/など)で実行する場合は、次の構成を使用します。

server {
  listen 8033;
  location / {
    proxy_pass http://192.168.0.123:2379/dashboard/;
  }
}

構成を変更し、変更した構成を有効にするためにNGINXを再起動します。

sudo nginx -s reload

次は何ですか

ファイアウォールの構成など、TiDBダッシュボードのセキュリティを強化する方法については、 セキュリティTiDBダッシュボードを参照してください。