cloudflaredを使用してKubernetesアプリをインターネットに公開する
Cloudflare Tunnelを使用して、アプリケーションやサーバーをCloudflareのネットワークに接続できます。Tunnelは、これらの接続を作成するためにソフトウェアcloudflared ↗に依存しています。
同じTunnelは複数のcloudflaredインスタンスから実行できるため、受信トラフィックが変化したときにシステムをスケールするために多くのcloudflaredレプリカを実行することができます。
このチュートリアルでは、KubernetesのService ↗としてアプリケーションを実行し、その後、別のDeployment ↗でcloudflaredを実行する方法を説明します。
このアーキテクチャにより、cloudflaredインスタンスは、構成されたKubernetes Serviceにインターネットトラフィックをプロキシすることができます。
このチュートリアルでは、以下の内容をカバーします:
- レプリカモデルで
cloudflaredをデプロイする - Tunnelを使用してKubernetesサービスにトラフィックをプロキシする
完了までの時間:45分
まず、軽量のCloudflare Tunnelデーモンcloudflaredをダウンロードしてインストールします。お使いのオペレーティングシステムにcloudflaredをインストールする方法については、インストールガイドを参照してください。
インストールが完了したら、cloudflaredのtunnel loginコマンドを使用して証明書を取得できます。
cloudflared tunnel login以下の例では、単に<example-tunnel>をTunnelに割り当てたい名前に変更します。
cloudflared tunnel create example-tunnelTunnel credentials written to /Users/cf000197/.cloudflared/ef824aef-7557-4b41-a398-4684585177ad.json. cloudflared chose this file based on where your origin certificate was found. Keep this file secret. To revoke these credentials, delete the tunnel.
Created tunnel example-tunnel with id ef824aef-7557-4b41-a398-4684585177ad次に、生成されたTunnel資格情報ファイルをKubernetesクラスターにシークレットとしてアップロードします。また、Tunnel資格情報ファイルが作成されたファイルパスを提供する必要があります。そのパスは、上記のcloudflared tunnel create <example-tunnel>の出力で見つけることができます。
kubectl create secret generic tunnel-credentials \--from-file=credentials.json=/Users/cf000197/.cloudflared/ef824aef-7557-4b41-a398-4684585177ad.json- Cloudflareダッシュボードに移動します。
- DNSタブに移動します。
.cfargotunnel.comをターゲットにするCNAMEを作成します。この例では、トンネルIDはef824aef-7557-4b41-a398-4684585177adなので、特にef824aef-7557-4b41-a398-4684585177ad.cfargotunnel.comをターゲットにするCNAMEレコードを作成します。
必要に応じて、同じTunnelをターゲットにする複数のCNAMEレコードを作成することもできます。
または、cloudflared tunnel route dns <tunnel> <hostname>を実行することで、コマンドラインからこのステップを実行することもできます。例えば、cloudflared tunnel route dns example-tunnel tunnel.example.comのようにです。Cloudflare Load Balancerからcloudflaredにトラフィックをルーティングするために、同様の方法を使用できます。詳細についてはdocsを参照してください。
次に、cloudflaredのマニフェスト ↗を適用してcloudflaredをデプロイします。これにより、cloudflaredを実行するためのDeployment ↗と、cloudflaredの設定を持つConfigMap ↗が開始されます。Cloudflareが前のステップで構成したDNSまたはLoad Balancingホスト名に対してトラフィックを受信すると、そのトラフィックはこのデプロイメントで実行されているcloudflaredインスタンスに送信されます。その後、これらのcloudflaredインスタンスは、あなたのアプリケーションのService ↗にリクエストをプロキシします。
kubectl apply -f cloudflared.yamldeployment.apps/cloudflared createdconfigmap/cloudflared configured $ kubectl get pods NAME READY STATUS RESTARTS AGE cloudflared-57746f77fd-frc99 1/1 Running 0 12m cloudflared-57746f77fd-xht8n 1/1 Running 0 12m httpbin-deployment-67f749774f-42tqj 1/1 Running 0 20h $ kubectl logs $(kubectl get pod -l app=cloudflared -o jsonpath="{.items[0].metadata.name}") 2021-05-04T17:39:49Z INF Starting tunnel tunnelID=ef824aef-7557-4b41-a398-4684585177ad 2021-05-04T17:39:49Z INF Version 2021-05-04T17:39:49Z INF GOOS: linux, GOVersion: go1.15.7, GoArch: amd64 2021-05-04T17:39:49Z INF Settings: map[config:/etc/cloudflared/config/config.yaml cred-file:/etc/cloudflared/creds/credentials.json credentials-file:/etc/cloudflared/creds/credentials.json metrics:0.0.0.0:2000 no-autoupdate:true] 2021-05-04T17:39:49Z INF Generated Connector ID: 4c5dc5d3-8e10-480e-ac74-e385e591553e 2021-05-04T17:39:49Z INF Initial protocol h2mux 2021-05-04T17:39:49Z INF Starting metrics server on [::]:2000/metrics 2021-05-04T17:39:49Z INF Connection 1daced2f-466c-4610-8ba6-7642a8ddec68 registered connIndex=0 location=MCI 2021-05-04T17:39:50Z INF Connection 1a5276bc-3313-4bb7-a677-d93deccab24f registered connIndex=1 location=DFW 2021-05-04T17:39:51Z INF Connection aa7adacc-e855-4b11-bf41-e113419b7ef4 registered connIndex=2 location=MCI 2021-05-04T17:39:51Z INF Connection a8055c76-2a90-4be5-8dc9-ebaa5c58fb5f registered connIndex=3 location=DFWこの時点で、httpbinのウェルカムページが表示されます。
このチュートリアルでは、同じTunnelを多くのcloudflaredプロセスで実行できる方法を説明しました。この知識を使用して、弾力的なスケーリング、優雅なcloudflaredの再起動、および将来のローリングアップグレードをサポートすることもできます。
皆様のフィードバックをお待ちしております!私たちのコミュニティ ↗でディスカッションに参加してください。