コンテンツにスキップ

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

Last reviewed: about 2 years ago

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

この手順では、以下の内容を説明します:

  • マシンを保護するためにCloudflare Accessでポリシーを構築する
  • kubectlを使用してマシンをCloudflareのネットワークに接続する
  • クライアントマシンから接続する

始める前に

完了までの時間:

30分


Zero Trustポリシーを作成する

  1. 新しいアプリケーションを作成するには、Zero Trustに移動します。サイドバーからApplicationsページを選択し、Add an applicationを選択します。 アプリケーションリストの上にある「Add an application」ボタンの位置

  2. 次のページで、Self-hostedを選択します。

  3. Application Domain内にサブドメインを入力します。これが、ユーザーがアプリケーションにアクセスできるホスト名になります。

  4. アプリケーションにアクセスできるユーザーを制御するためのルールを作成します。

  5. ポリシーを保存するには、Saveを選択します。後でポリシーを編集して、許可されたユーザーや認証プロバイダーを変更できます。

cloudflaredをインストールする

Cloudflare Tunnelは、このマシンとCloudflareのネットワークの間に安全なアウトバウンド専用接続を作成します。アウトバウンド専用モデルを使用することで、このマシンへの直接アクセスを防ぎ、外部に公開された侵入ポイントをロックダウンできます。そのため、オープンファイアウォールポートはありません。

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

cloudflaredを認証する

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

Terminal window
cloudflared tunnel login

cloudflaredはブラウザウィンドウを開き、Cloudflareアカウントにログインするように促します。ブラウザがないマシンで作業している場合や、ブラウザウィンドウが開かない場合は、コマンドライン出力からURLをコピーし、任意のマシンのブラウザでそのURLにアクセスできます。

リストに表示された任意のホスト名を選択します。Cloudflareは、あなたのアカウントにスコープされた証明書を発行します。トンネルを提供する特定のホスト名を選択する必要はありません。

トンネルを作成する

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

Terminal window
cloudflared tunnel create <NAME>

<NAME>をトンネルの名前に置き換えます。この名前は任意の値にできます。単一のトンネルは、SSHやHTTPなどの接続タイプの混合を含む、複数のホスト名に対して複数のサービスのトラフィックを提供することもできます。

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

Terminal window
cloudflared tunnel list

トンネルを構成する

トンネルをトラフィックを提供するように構成することができます。

cloudflaredがアクセスできるYAMLファイルを作成します。デフォルトでは、cloudflaredはインストールされたフォルダ内でファイルを探します。

Terminal window
vim ~/.cloudflared/config.yml

次に、トンネルを構成します。以下の例のIDを上で作成したトンネルの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
# 以前のルールに一致しないトラフィックに404で応答するキャッチオールルール

トンネルへのルートを作成する

このトンネルにトラフィックをルーティングするDNSレコードを作成できます。複数のDNSレコードが単一のトンネルを指し、ホスト名がingressルールで定義されている限り、構成されたサービスにトラフィックを送信します。

  1. Cloudflareダッシュボードにログインし、アカウントを選択します。ドメインを選択し、DNSに移動します。

  2. Add recordを選択します。レコードタイプとしてCNAMEを選択します。Nameには、トンネルを作成したいホスト名を選択します。これはAccessポリシーのホスト名と一致する必要があります。

  3. Targetには、トンネルのIDの後に.cfargotunnel.comを入力します。例えば:

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

トンネルを実行する

トンネルを実行して、ターゲットサービスをCloudflareに接続できます。以下のコマンドを使用してトンネルを実行し、<NAME>をトンネルのために作成した名前に置き換えます。

Terminal window
cloudflared tunnel run <NAME>

cloudflaredサービスとして実行することをお勧めします。これは起動時に起動するように構成されています。

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

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

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

Terminal window
brew install cloudflared

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

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

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

kubeconfigは現在、プロキシコマンドの構成をサポートしていませんが、コミュニティはその計画を提出しています。その間、ユーザーはクラスターのAPIサーバーをエイリアスして時間を節約できます。

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