Cloudflare Tunnelを利用したサービスの公開

はじめに

Cloudflare Tunnelを利用して、Kubernetes上のアプリをオープンネットワークに公開する。 AWSKubernetesを構築している場合、アプリをオープンネットワークへ公開するにはAWS から提供される load balancerを使うことが一般的である。ただし、今回は確認用にアプリを公開したいため、 無償のCloudflare Tunnelを使用してオープンネットワークへ公開する。

環境

  • Windows11(ホストOS)
  • Ubuntu22.04.3(ゲストOS、WSL2)
  • k3s v1.29.4+k3s1

Cloudflare Tunnelについて

Cloudflare TunnelはCloudflare社が提供するTunnelを構築できるサービスである。ngrokなども同様のことを実施することができる。

Cloudflare Tunnelのインストール

developers.cloudflare.com

上記を参考に、CLIを用いてインストールを行う。

$ sudo mkdir -p --mode=0755 /usr/share/keyrings
$ curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null

$ echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflared.list

$ sudo apt-get update && sudo apt-get install cloudflared

Quick Tunnelsを用いた簡易的なトンネルの作成

developers.cloudflare.com

上記を参考に簡易的なトンネルの作成してサービスをアプリをオープンネットワークへ公開する。 まず、公開するアプリを作成する。

python3 -m http.server 8080

次に、トンネルを作成してアプリを公開する。表示されるURLにアクセスして、アプリが公開されていることを確認した。

$ cloudflared tunnel --url http://localhost:8080
(省略)
INF +--------------------------------------------------------------------------------------------+
INF |  Your quick Tunnel has been created! Visit it at (it may take some time to be reachable):  |
INF |  https://*************************************************************                              |
INF +--------------------------------------------------------------------------------------------+
(省略)

なお、URLは起動のたびに毎回変更される。 これを利用すれば、urlの指定をKubernetes上のサービスのURLを指定することで、公開できそうである。

アカウント情報を用いたトンネルの作成(失敗)

次にcloudflareへ認証を行う。なお事前にcloudflareへのアカウントの登録を済ませておく。

$ cloudflared tunnel login
Please open the following URL and log in with your Cloudflare account:

https://dash.cloudflare.com/argotunnel?aud=&callback=https*** ←ここにログインして、GUIでDNSの登録を行う。

Leave cloudflared running to download the cert automatically.

次にTunnelの作成を行う。

zenn.dev

上記を参考にTunnelのサービスを作成し、Tunnel name, Tunnel IDを取得した。

ただし、ログインが成功せず、cert.pemを作成できなかったため断念した。

補足

ドメインの登録が最大24時間かかるらしいので、そのあとにログインを実施すれば成功するかもしれない。確認する。

参考

developers.cloudflare.com

qiita.com

qiita.com