Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

Kubernetes の client-go credential プラグインで Cloudflare Tunnel を使う

最終更新 Markdown で表示Agent セットアップ

このチュートリアルでは、Kubernetes の client-go credential プラグインで Cloudflare Tunnel を認証に使う方法を説明します。手順に従うと、kubectl コマンドラインツールを使い、Cloudflare Tunnel 経由で Kubernetes クラスターへ安全にアクセスできます。

前提条件

  • Cloudflare アカウント
  • マシンにインストールした Cloudflare Tunnel クライアント(cloudflared
  • Kubernetes クラスターへのアクセス
  • マシンにインストールした kubectl

1. Cloudflare Tunnel をセットアップする

  1. cloudflared を Cloudflare アカウントで認証します。

    cloudflared tunnel login
  2. 新しいトンネルを作成します。

    cloudflared tunnel create k8s-tunnel
  3. 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 に置き換え、ホスト名も必要に応じて調整します。

  4. トンネルを起動します。

    cloudflared tunnel run k8s-tunnel

2. Kubernetes API サーバーを設定する

Kubernetes API サーバーが、Cloudflare Tunnel からの認証を受け付けるよう設定されていることを確認します。認証 webhook の設定や、Cloudflare Tunnel のクライアント証明書を信頼する設定が必要になる場合があります。

3. client-go credential プラグインをセットアップする

  1. 次の内容で 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
  2. ~/.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

4. Cloudflare Tunnel 経由で kubectl を使う

これで、いつもどおり kubectl コマンドを使えます。client-go credential プラグインが、Cloudflare Tunnel 経由の認証を自動で処理します。

kubectl get pods

トラブルシューティング

問題が起きた場合は、次を確認してください。

  • cloudflared が稼働し、トンネルが有効であること
  • ~/.kube/config が正しく設定されていること
  • Kubernetes API サーバーが、Cloudflare Tunnel からの認証を受け付けるよう設定されていること
  • Cloudflare Tunnel のログにエラーがないこと

詳細は Cloudflare Tunnel のドキュメントKubernetes の client-go credential プラグインのドキュメント を参照してください。

役に立ちましたか?