跳转到内容
搜索文档

将 Cloudflare Tunnel 与 Kubernetes client-go 凭据插件结合使用

最后更新 查看 MarkdownAgent 设置

本教程介绍如何将 Cloudflare Tunnel 与 Kubernetes client-go 凭据插件结合进行身份验证。通过遵循这些步骤,您可以使用 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,或将 API 服务器配置为信任 Cloudflare Tunnel 的客户端证书。

3. 设置 client-go 凭据插件

  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 文件以使用凭据插件:

    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. 使用 kubectl 结合 Cloudflare Tunnel

现在,您可以像往常一样使用 kubectl 命令。client-go 凭据插件将自动通过 Cloudflare Tunnel 处理身份验证:

kubectl get pods

故障排除

如果遇到问题:

  • 确保 cloudflared 正在运行且隧道处于活动状态
  • 检查您的 ~/.kube/config 文件是否正确配置
  • 验证 Kubernetes API 服务器是否已正确设置以接受来自 Cloudflare Tunnel 的身份验证
  • 查看 Cloudflare Tunnel 日志以查找任何错误消息

有关更多信息,请参阅 Cloudflare Tunnel 文档Kubernetes client-go 凭据插件文档

这篇文档对您有帮助吗?