INTEGRITY Документация

Используйте Cloudflare Tunnel с подключаемыми модулями учётных данных Kubernetes client-go

В этом руководстве описано, как использовать Cloudflare Tunnels с плагинами учетных данных Kubernetes client-go для аутентификации. Следуя этим шагам, вы сможете безопасно получать доступ к своему кластеру Kubernetes через Cloudflare Tunnel с помощью kubectl инструмент командной строки.

Предварительные требования

1. Настройте Cloudflare Tunnel

  1. Аутентификация cloudflared с вашим аккаунтом Cloudflare:

    cloudflared tunnel login
  2. Создайте новый туннель:

    cloudflared tunnel create k8s-tunnel
  3. Настройте свой 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 вашего туннеля и при необходимости измените имя хоста.

  4. Запустите туннель:

    cloudflared tunnel run k8s-tunnel

2. Настройте API-сервер Kubernetes

Убедитесь, что ваш API сервер Kubernetes настроен на прием аутентификации от Cloudflare Tunnels. Для этого может потребоваться настроить вебхук аутентификации или настроить API сервер так, чтобы он доверял клиентским сертификатам Cloudflare Tunnel.

3. Настройте client-go credential plugin

  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 plugin:

    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

Устранение неполадок

Если у вас возникнут проблемы:

Дополнительные сведения см. в Документация Cloudflare Tunnels и Kubernetes client-go credential plugins documentation.