kubectlを使用してCloudflare Access経由で接続する
CloudflareのZero Trustプラットフォームを使用して、kubectl経由でマシンに接続できます。
この手順では、以下の内容を説明します:
- マシンを保護するためにCloudflare Accessでポリシーを構築する
- kubectlを使用してマシンをCloudflareのネットワークに接続する
- クライアントマシンから接続する
始める前に
完了までの時間:
30分
-
新しいアプリケーションを作成するには、Zero Trustに移動します。サイドバーからApplicationsページを選択し、Add an applicationを選択します。

-
次のページで、Self-hostedを選択します。
-
Application Domain内にサブドメインを入力します。これが、ユーザーがアプリケーションにアクセスできるホスト名になります。
-
アプリケーションにアクセスできるユーザーを制御するためのルールを作成します。
-
ポリシーを保存するには、Saveを選択します。後でポリシーを編集して、許可されたユーザーや認証プロバイダーを変更できます。
Cloudflare Tunnelは、このマシンとCloudflareのネットワークの間に安全なアウトバウンド専用接続を作成します。アウトバウンド専用モデルを使用することで、このマシンへの直接アクセスを防ぎ、外部に公開された侵入ポイントをロックダウンできます。そのため、オープンファイアウォールポートはありません。
Cloudflare Tunnelは、Cloudflareの軽量デーモンであるcloudflaredを通じて実現されます。Downloadsページに記載されている手順に従って、DigitalOceanマシンにcloudflaredをダウンロードしてインストールします。
次のコマンドを実行して、cloudflaredをCloudflareアカウントに認証します。
cloudflared tunnel logincloudflaredはブラウザウィンドウを開き、Cloudflareアカウントにログインするように促します。ブラウザがないマシンで作業している場合や、ブラウザウィンドウが開かない場合は、コマンドライン出力からURLをコピーし、任意のマシンのブラウザでそのURLにアクセスできます。
リストに表示された任意のホスト名を選択します。Cloudflareは、あなたのアカウントにスコープされた証明書を発行します。トンネルを提供する特定のホスト名を選択する必要はありません。
次に、以下のコマンドでトンネルを作成します。
cloudflared tunnel create <NAME><NAME>をトンネルの名前に置き換えます。この名前は任意の値にできます。単一のトンネルは、SSHやHTTPなどの接続タイプの混合を含む、複数のホスト名に対して複数のサービスのトラフィックを提供することもできます。
コマンドはトンネルのIDを出力し、関連する認証情報ファイルを生成します。いつでも次のコマンドでアカウント内のトンネルをリストできます。
cloudflared tunnel listトンネルをトラフィックを提供するように構成することができます。
cloudflaredがアクセスできるYAMLファイルを作成します。デフォルトでは、cloudflaredはインストールされたフォルダ内でファイルを探します。
vim ~/.cloudflared/config.yml次に、トンネルを構成します。以下の例のIDを上で作成したトンネルのIDに置き換えます。また、この例のホスト名をCloudflare Accessで構成されたアプリケーションのホスト名に置き換えます。
tunnel: 6ff42ae2-765d-4adf-8112-31c55c1551efcredentials-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ルールで定義されている限り、構成されたサービスにトラフィックを送信します。
-
Cloudflareダッシュボード ↗にログインし、アカウントを選択します。ドメインを選択し、DNSに移動します。
-
Add recordを選択します。レコードタイプとして
CNAMEを選択します。Nameには、トンネルを作成したいホスト名を選択します。これはAccessポリシーのホスト名と一致する必要があります。 -
Targetには、トンネルのIDの後に
.cfargotunnel.comを入力します。例えば:
6ff42ae2-765d-4adf-8112-31c55c1551ef.cfargotunnel.com- Saveを選択します。
トンネルを実行して、ターゲットサービスをCloudflareに接続できます。以下のコマンドを使用してトンネルを実行し、<NAME>をトンネルのために作成した名前に置き換えます。
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"