このチュートリアルでは、Kubernetes の client-go credential プラグインで Cloudflare Tunnel を認証に使う方法を説明します。手順に従うと、kubectl コマンドラインツールを使い、Cloudflare Tunnel 経由で Kubernetes クラスターへ安全にアクセスできます。
- Cloudflare アカウント
- マシンにインストールした Cloudflare Tunnel クライアント(
cloudflared) - Kubernetes クラスターへのアクセス
- マシンにインストールした
kubectl
-
cloudflaredを Cloudflare アカウントで認証します。cloudflared tunnel login -
新しいトンネルを作成します。
cloudflared tunnel create k8s-tunnel -
config.ymlという設定ファイルを作成し、トンネルを構成します。tunnel: <TUNNEL_ID> credentials-file: /path/to/credentials.json ingress: - hostname: k8s.example.com service: tcp://kubernetes.default.svc.cluster.local:443 - service: http_status:404<TUNNEL_ID>を自分のトンネル ID に置き換え、ホスト名も必要に応じて調整します。 -
トンネルを起動します。
cloudflared tunnel run k8s-tunnel
Kubernetes API サーバーが、Cloudflare Tunnel からの認証を受け付けるよう設定されていることを確認します。認証 webhook の設定や、Cloudflare Tunnel のクライアント証明書を信頼する設定が必要になる場合があります。
-
次の内容で
cloudflare-k8s-auth.shというスクリプトを作成します。#!/bin/bash echo '{ "apiVersion": "client.authentication.k8s.io/v1beta1", "kind": "ExecCredential", "status": { "token": "'"$(cloudflared access token -app=https://k8s.example.com)"'" } }'スクリプトを実行可能にします。
chmod +x cloudflare-k8s-auth.sh -
~/.kube/configを更新し、credential プラグインを使うようにします。apiVersion: v1 kind: Config clusters: - cluster: server: https://k8s.example.com name: cloudflare-k8s users: - name: cloudflare-user user: exec: apiVersion: client.authentication.k8s.io/v1beta1 command: /path/to/cloudflare-k8s-auth.sh interactiveMode: Never contexts: - context: cluster: cloudflare-k8s user: cloudflare-user name: cloudflare-k8s-context current-context: cloudflare-k8s-context
これで、いつもどおり kubectl コマンドを使えます。client-go credential プラグインが、Cloudflare Tunnel 経由の認証を自動で処理します。
kubectl get pods問題が起きた場合は、次を確認してください。
cloudflaredが稼働し、トンネルが有効であること~/.kube/configが正しく設定されていること- Kubernetes API サーバーが、Cloudflare Tunnel からの認証を受け付けるよう設定されていること
- Cloudflare Tunnel のログにエラーがないこと
詳細は Cloudflare Tunnel のドキュメント と Kubernetes の client-go credential プラグインのドキュメント ↗ を参照してください。