Я не являюсь экспертом ни в Lens, ни в Teleport, но в какой-то момент моей разработческой жизни возникла необходимость подключиться к кластеру Kubernetes с помощью Lens, т.к. не могу сказать, что очень удобно пользоваться kubectl. Подробной инструкции на этот счет, к сожалению, в Интернете мне найти не удалось. Поэтому решил написать свою (описание настройки серверной части оставим другим авторам).

Если вы, как я, и все остальные «нетрушные» программисты, предпочитаете оставаться на Windows и не спешите уходить на Linux или Mac, а встроенный WSL2 (подсистема Linux для Windows) вас белее чем устраивает, то добро пожаловать под кат.

Забегая вперед, скажу, что моя главная ошибка была в том, что для Lens я пытался использовать конфиг Kubernetes, который лежал в директории WSL2. Почему? Потому что думал, что Lens может взаимодействовать с WSL2 также, как Docker Desktop. Но (шок контент) это оказалось не так. Внятного объяснения этому я найти не смог, но основной совет: не пытайтесь так делать (или пытайтесь и, если у вас получилось, напишите в комментах). Не смотря на отсутствие различий в конфигурациях, Lens стал работать только с тем конфигом, который лежал в директории Windows.

Итак, разберем все по шагам:

  1. Для работы с прокси Teleport вам понадобится утилита tsh. Та, которую вы, возможно, уже установили в WSL2 не пойдет, нужно будет установить утилиту для Windows. Инструкция доступна на официальном сайте, но я также продублирую ее здесь. Для установки tshв Windows выполните следующие команды в PowerShell (эти команды не будут работать в Windows cmd.exe): Установите уровень TLS на TLS 1.2 (требуется в Windows Server 2016 и более ранних версиях).

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

Получите ожидаемую контрольную сумму для пакета Windows tsh. Версия клиента teleport должна быть не ниже, чем установлена на сервере!

$Resp = Invoke-WebRequest https://get.gravitational.com/teleport-v14.1.1-windows-amd64-bin.zip.sha256

PowerShell вернет двоичное представление содержимого ответа по умолчанию, поэтому вам нужно преобразовать его в строку

[System.Text.Encoding]::UTF8.getstring($Resp.Content)

<контрольная сумма> <имя файла>

Invoke-WebRequest -OutFile teleport-v14.1.1-windows-amd64-bin.zip -Uri https://cdn.teleport.dev/teleport-v14.1.1-windows-amd64-bin.zip
certUtil -hashfile teleport-v14.1.1-windows-amd64-bin.zip SHA256

SHA256 hash of teleport-v14.1.1-windows-amd64-bin.zip: <контрольная сумма> CertUtil: -hashfile command completed successfully.

После того, как вы убедились в совпадении контрольных сумм, вы можете извлечь архив. Исполняемый файл будет доступен по адресу teleport-v14.1.1-windows-amd64-bin\teleport\tsh.exe

Expand-Archive teleport-v-v14.1.1-windows-amd64-bin.zip
cd teleport-v14.1.1-windows-amd64-bin\teleport
.\tsh.exe version

Обязательно переместите tsh.exe в свой PATH, чтобы использовать короткую команду tsh, вместо необходимости каждый раз указывать путь к исполняемому файлу.

После установки tsh перейдите на страницу вашего Teleport и выполните действия в командной строке согласно указанным инструкциям.

2. Скачайте и установите Lens с официального сайта. После установки откройте Lens. Выберите "настройки" (иконка "бургер меню") -> file -> preferences, чтобы установить файл или папку, откуда Lens будет читать конфиг Kubernetes. и выберите опцию "Add Cluster".

В указанной директории должен лежать конфиг примерно такого содержания:

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: ${CLUSTER_CA}
    server: ${TELEPORT_ENDPOINT}
    tls-server-name: ${TELEPORT_ENDPOINT} 
  name: ${CLUSTER_NAME}
contexts:
- context:
    cluster: ${CLUSTER_NAME}
    user: ${USER_NAME}
  name: ${CONTEXT_NAME}
current-context: ${CONTEXT_NAME}
kind: Config
preferences: {}
users:
- name: ${USER_NAME}
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1beta1
      args:
      - kube
      - credentials
      - --kube-cluster=${KUBE_CLUSTER}
      - --teleport-cluster=${CLUSTER_NAME}
      - --proxy=${TELEPORT_HOST}:${TELEPORT_PORT}
      command: C:\Users\user\teleport-v12.4.23-windows-amd64-bin\teleport\tsh.exe
      env: null
      provideClusterInfo: false

Если у вас уже настроен доступ к Kubernetes из вашего WSL2, можно скопировать конфиг оттуда, заменив только секцию command для вызова вашего tsh-клиента.

Теперь у вас должен быть доступ к вашему кластеру Kubernetes через Lens, где вы сможете просматривать, управлять и анализировать ресурсы кластера, а также работать над вашими приложениями. Не забывайте делать коннект к tsh после каждой перезагрузке системы. Думаю, это очевидно, но мало ли ????

Обратите внимание, что для работы с Kubernetes через прокси Teleport вам необходимо иметь соответствующие права доступа в Teleport. Если у вас нет таких прав, обратитесь к администратору системы.

Спасибо за прочтение!

Комментарии (7)


  1. DesertEagle
    19.11.2023 05:48

    Не совсем понял смысл написанного, так как сам уж сколько лет юзаю wsl и проблем с tsh или lens не испытываю от слова совсем.


    1. Tyazhik Автор
      19.11.2023 05:48

      Это здорово, что у вас не возникло проблем с настройкой. Но статью я написал не для тех, кто с этим проблем не испытывает, а как раз наоборот)


  1. Cib0rg
    19.11.2023 05:48

    Проблемы с линзой начинаются, если авторизация в класстер идёт через сторонние тулы типа awscli. Со всем остальным она коннектится сразу после установки.

    А ещё конфиги можно указать напрямую из WSL путем прописывания в путь ссылки на скрытую шару - \\wsl$\...


    1. Tyazhik Автор
      19.11.2023 05:48

      Как я и написал в начале статьи, не знаю с чем это связано, но "ссылка на скрытую шару - \\wsl$\... " в моем случае не сработала от слова совсем. Т.е. tsh, kubectl под wsl работает, но когда подсовываю конфиг (вне зависимости от того, какой клиент tsh указан в command с путем \\wsl$\... или C:\) в Lens, получаю ошибку подобную той, что на первом скрине в статье. Для меня сработал только способ, описанный мною в статье. И я буду очень рад, если кому-нибудь мой опыт будет полезен)


      1. Cib0rg
        19.11.2023 05:48

        Ну так ещё раз - линза стартует в винде, там по умолчанию сторонние тулы типа awscli или tsh недоступны или не настроены. После синхронизации энвов конфиг можно хоть с Марса подключать. Пройденный этап)


        1. Tyazhik Автор
          19.11.2023 05:48

          Если не затруднит, не могли бы вы пояснить, что вы имеете ввиду под синхронизацией энвов? Не совсем понимаю о чем речь.


          1. Cib0rg
            19.11.2023 05:48

            Не затруднит)

            В линухе обычно уже установлены тулы типа awscli и настроены аккаунты. И это отражено в конфиге доступа к куберу. Например, так:

            - name: arn:aws:eks:us-west-2:11111111111:cluster/test
              user:
                exec:
                  apiVersion: client.authentication.k8s.io/v1beta1
                  args:
                  - --region
                  - us-west-2
                  - eks
                  - get-token
                  - --cluster-name
                  - test
                  - --output
                  - json
                  command: aws
                  env:
                  - name: AWS_PROFILE
                    value: test
                  interactiveMode: IfAvailable
                  provideClusterInfo: false

            И этот конфиг мы внезапно скармливаем линзе, которая запускается в винде.Она будет добросовестно пытаться выполнить эти инструкции по получению доступа, но command такая недоступна - её физически нет в PowerShell. Отсюда и ошибка. Как только мы устанавливаем в винду awscli и копируем файл с профилями входа - Lens получает возможность получить токен и успешно соединяется с кластером.

            Это лично проверено на AWS, GCP и YC. Никакой магии, хотя да - не самая очевидная в мире вещь.