Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

kubectl を使って Cloudflare Access 経由で接続する

最終更新 Markdown で表示Agent セットアップ

kubectl 経由で、Cloudflare の Zero Trust プラットフォームを使ってマシンに接続できます。

このウォークスルーで扱う内容:

  • Cloudflare Access でポリシーを作成し、マシンを保護する
  • kubectl を使ってマシンを Cloudflare のネットワークに接続する
  • クライアントマシンから接続する

始める前に

所要時間:

30 分


Access ポリシーを作成する

  1. Cloudflare ダッシュボードZero Trust > Access controls > Applications を開きます。
  2. Create new application を選びます。
  3. Self-hosted and private を選びます。
  4. Add public hostname を選び、サブドメインを入力します。これが、ユーザーがアプリケーションにアクセスするホスト名になります。
  5. アプリケーションに到達できる人を制御する 新しいポリシーを作成する か、既存のポリシーを選びます。
  6. 残りの セルフホストアプリケーション作成手順 に従って、アプリケーションを公開します。

cloudflared をインストールする

Cloudflare Tunnel は、このマシンと Cloudflare のネットワークのあいだに、安全なアウトバウンドのみの接続を作ります。アウトバウンドのみのモデルなら、このマシンへの直接アクセスを防ぎ、外部に露出したイングレスポイントを封鎖できます。ファイアウォールポートを開く必要もありません。

Cloudflare Tunnel は、Cloudflare の軽量デーモン cloudflared で実現します。Downloads ページの手順に従って、DigitalOcean のマシンに cloudflared をダウンロードしてインストールします。

cloudflared を認証する

次のコマンドを実行して、cloudflared を Cloudflare アカウントに認証します。

cloudflared tunnel login

cloudflared はブラウザーウィンドウを開き、Cloudflare アカウントへのログインを求めます。ブラウザーがないマシンで作業している場合、またはブラウザーウィンドウが開かない場合は、コマンドライン出力の URL をコピーし、任意のマシンのブラウザーでその URL を開きます。

リストに表示されたホスト名をどれでも選んでください。Cloudflare は、アカウントにスコープされた証明書を発行します。Tunnel を提供する特定のホスト名を選ぶ必要はありません。

Tunnel を作成する

次のコマンドでトンネルを作成します。

cloudflared tunnel create <NAME>

<NAME> を Tunnel の名前に置き換えます。この名前は任意の値で構いません。1 つの Tunnel で、複数のホスト名と環境内の複数のサービスへトラフィックを提供でき、SSH と HTTP など接続タイプの混在も可能です。

コマンドは Tunnel の ID を出力し、関連する認証情報ファイルを生成します。アカウント内の Tunnel は、次のコマンドでいつでも一覧できます。

cloudflared tunnel list

Tunnel を設定する

トラフィックを提供するように、トンネルを設定 できます。

cloudflared が到達できる YAML ファイルを作成します。デフォルトでは、cloudflaredcloudflared がインストールされている同じフォルダーを探します。

vim ~/.cloudflared/config.yml

次に Tunnel を設定します。下の例の ID を、上で作成した Tunnel の ID に置き換えてください。あわせて、この例のホスト名を、Cloudflare Access で設定したアプリケーションのホスト名に置き換えます。

tunnel: 6ff42ae2-765d-4adf-8112-31c55c1551ef
credentials-file: /root/.cloudflared/6ff42ae2-765d-4adf-8112-31c55c1551ef.json

ingress:
  - hostname: azure.widgetcorp.tech
    service: tcp://kubernetes.docker.internal:6443
    originRequest:
      proxyType: socks
  - service: http_status:404
  # Catch-all rule, which responds with 404 if traffic doesn't match any of
  # the earlier rules

Tunnel へルーティングする

この Tunnel へトラフィックをルーティングする DNS レコードを作成できます。複数の DNS レコードを 1 つの Tunnel に向けられ、ホスト名が ingress ルール で定義されていれば、設定したサービスへトラフィックが送られます。

  1. Cloudflare ダッシュボード にログインし、ドメインの DNS Records ページを開きます。

    Records を開く ↗
  2. Add record を選びます。レコードタイプは CNAME を選びます。Name には、Tunnel を作成するホスト名を指定します。Access ポリシーのホスト名と一致させてください。

  3. Target には、Tunnel の ID のあとに .cfargotunnel.com を付けて入力します。例:

  6ff42ae2-765d-4adf-8112-31c55c1551ef.cfargotunnel.com
  1. Save を選びます。

Tunnel を実行する

これで Tunnel を実行し、対象サービスを Cloudflare に接続できます。次のコマンドで Tunnel を実行します。<NAME> は作成した Tunnel の名前に置き換えてください。

cloudflared tunnel run <NAME>

起動時に立ち上がるように設定した サービス として cloudflared を実行することを推奨します。

クライアントマシンから接続する

cloudflared を使って、クライアントマシンから接続できます。

この例では macOS のラップトップを使います。macOS では、Homebrew で次のコマンドを実行して cloudflared をインストールできます。

brew install cloudflared

次のコマンドを実行して、デバイスから Cloudflare への接続を作成します。利用可能な任意のポートを指定できます。

cloudflared access tcp --hostname azure.widgetcorp.tech --url 127.0.0.1:1234

このサービスが動作している状態で kubectl コマンドを実行すると、cloudflared がブラウザーウィンドウを開き、SSO プロバイダーでの認証を求めます。認証が完了すると、cloudflared はコマンドで指定したローカル URL で、クライアントマシンに接続を公開します。

現時点では kubeconfig はプロキシコマンドの設定に対応していません。コミュニティからは対応の提案が出ています。当面は、クラスターの API サーバーにエイリアスを付けて時間を節約できます。

alias kubeone="env HTTPS_PROXY=socks5://127.0.0.1:1234 kubectl"

役に立ちましたか?