本教程介绍如何将 Cloudflare Tunnel 与 Kubernetes client-go 凭据插件结合进行身份验证。通过遵循这些步骤,您可以使用 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,或将 API 服务器配置为信任 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文件以使用凭据插件: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 凭据插件将自动通过 Cloudflare Tunnel 处理身份验证:
kubectl get pods如果遇到问题:
- 确保
cloudflared正在运行且隧道处于活动状态 - 检查您的
~/.kube/config文件是否正确配置 - 验证 Kubernetes API 服务器是否已正确设置以接受来自 Cloudflare Tunnel 的身份验证
- 查看 Cloudflare Tunnel 日志以查找任何错误消息
有关更多信息,请参阅 Cloudflare Tunnel 文档 和 Kubernetes client-go 凭据插件文档 ↗。