はじめに
Cloudflare Tunnelを利用して、Kubernetes上のアプリをオープンネットワークに公開する。 AWSでKubernetesを構築している場合、アプリをオープンネットワークへ公開するには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のインストール
上記を参考に、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を用いた簡易的なトンネルの作成
上記を参考に簡易的なトンネルの作成してサービスをアプリをオープンネットワークへ公開する。 まず、公開するアプリを作成する。
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の作成を行う。
上記を参考にTunnelのサービスを作成し、Tunnel name, Tunnel IDを取得した。
ただし、ログインが成功せず、cert.pemを作成できなかったため断念した。
補足
ドメインの登録が最大24時間かかるらしいので、そのあとにログインを実施すれば成功するかもしれない。確認する。