この記事は GRIPHONE Advent Calendar 2022 25日目の記事です。
Cloudflare Zero Trustが流行ってる(た?)ので、ちょっと試すのと、どうせならk8s上で動かしてみよう、ということでこちらを参考に試していこうと思います。
前提
以下の作業は済ましておきましょう!
- 使用するドメインの確保
- 持ってるドメインのサブドメイン切る
- 無料ドメイン取る
など
- Siteの追加
- cloudflaredのインストール
cloudflared tunnel login
で認証もしておきましょう
今回k8sはkindを使ったローカルのクラスタを使います。クラスタの作成やk8sへの認証はできていることを前提にします。
また、今回記事の例として使用するドメインは cstoku.cf
とします。
作る構成
作る構成としては結構シンプルで、tunnel作ってくれる cloudflared
の後ろにサンプルのアプリとして httpbin
を置くだけです。
構築していく
トンネルの作成
下記コマンドで example-tunnel
という名前でトンネルを作ります。
cloudflared tunnel create example-tunnel
トンネルを作るとトンネルのクレデンシャルを作成してくれます。これを使ってtunnel-credentials
というSecretを作成します。
(下記コマンドでは ef824aef-7557-4b41-a398-4684585177ad.json
というファイルで作成された場合のものになります)
kubectl create secret generic tunnel-credentials \
--from-file=credentials.json=/Users/hoge/.cloudflared/ef824aef-7557-4b41-a398-4684585177ad.json
トンネルとDNSレコードの紐付け
アクセスする際に使用するDNSレコードをトンネルと紐付けます。
cloudflared tunnel route dns example-tunnel cstoku.cf
各コンポーネントのデプロイ
cloudflaredのデプロイ
サンプルのmanifestを使ってcloudflaredをデプロイします。
kubectl apply -f \
https://raw.githubusercontent.com/cloudflare/argo-tunnel-examples/master/named-tunnel-k8s/cloudflared.yaml
サンプルアプリのデプロイ
下記コマンドを実行してサンプルアプリとして使う httpbin
をデプロイします。
kubectl apply -f \
https://raw.githubusercontent.com/cloudflare/argo-tunnel-examples/master/named-tunnel-k8s/app.yaml
設定の変更とcloudflaredの再起動
サンプルの設定そのままだとルーティングがうまくされず404が表示されます😢
設定を変更してサンプルアプリに正しくルーティングされるようにしましょう。
# cm-cloudflared.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: cloudflared
data:
config.yaml: |
tunnel: example-tunnel
credentials-file: /etc/cloudflared/creds/credentials.json
ingress:
- hostname: cstoku.cf
service: http://web-service:80
- service: http_status:404
上記のmanifestの config.yaml
内の hostname
の値をtunnelに紐付けたドメインに書き換えます。
そしてこのmanifestを適用し、cloudflared
を kubectl rollout restart
を使って再起動させます。
kubectl apply -f cm-cloudflared.yaml
kubectl rollout restart deploy cloudflared
tunnelに紐付けたドメインにアクセスしてみる
ブラウザなどでtunnelに紐付けたドメインにアクセスしてみると、正しく構成されていればhttpbinのページが表示されると思います🎉
最後に
ローカルのクラスタのhttpbinにブラウザを使ってアクセスすることができました。
cloudflaredとtunnel使って簡単に疎通性が取れるようになるし、この記事では書いていないですが、このページに対して認証をかけることも簡単にできました。
Cloudflare Zero Trust、非常に便利だと思うので今後うまく使っていければなと思っております!