Cloudflare Zero Trustをk8sで使ってみる

AvatarPosted by

この記事は GRIPHONE Advent Calendar 2022 25日目の記事です。

Cloudflare Zero Trustが流行ってる(た?)ので、ちょっと試すのと、どうせならk8s上で動かしてみよう、ということでこちらを参考に試していこうと思います。

前提

以下の作業は済ましておきましょう!

今回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を適用し、cloudflaredkubectl rollout restart を使って再起動させます。

kubectl apply -f cm-cloudflared.yaml
kubectl rollout restart deploy cloudflared

tunnelに紐付けたドメインにアクセスしてみる

ブラウザなどでtunnelに紐付けたドメインにアクセスしてみると、正しく構成されていればhttpbinのページが表示されると思います🎉

最後に

ローカルのクラスタのhttpbinにブラウザを使ってアクセスすることができました。

cloudflaredとtunnel使って簡単に疎通性が取れるようになるし、この記事では書いていないですが、このページに対して認証をかけることも簡単にできました。

Cloudflare Zero Trust、非常に便利だと思うので今後うまく使っていければなと思っております!