Легко отлаживайте и разрабатывайте приложения Kubernetes локально с помощью Telepresence.
Легко отлаживайте и разрабатывайте приложения Kubernetes локально с помощью Telepresence.

Предисловие

Что касается удаленной отладки golang-программ в k8s, то можно обратиться к использованию dlv. Однако недостатки этого метода также очевидны. Развернутую рабочую нагрузку необходимо пересоздавать и перераспределять, что также навязчиво для бизнеса и негибко. достаточно.

В этой статье представлен метод, который больше подходит для удаленной отладки бизнеса, развернутого в k8s. Этот метод также рекомендуется k8s в официальной документации: телеприсутствие.

https://github.com/telepresenceio/telepresence

1.Подготовка

телеприсутствие скачать

https://www.telepresence.io/docs/latest/install/

kubectl скачать

https://kubernetes.io/docs/tasks/tools/

2. Определение версии

Язык кода:javascript
копировать
$telepresence version
Client: v2.5.3 (api v3)
Root Daemon: not running
User Daemon: not running

Примечание. Если версия ниже v2.0.3.,вам нужно обновитьtelepresence(https://www.telepresence.io/docs/latest/install/upgrade/

3. Подключитесь к кластеру k8s.

Выполните следующую команду для подключения к кластеру k8s:

Язык кода:javascript
копировать
$telepresence connect
Launching Telepresence Root Daemon
Need root privileges to run: /usr/local/bin/telepresence daemon-foreground /Users/xxx/Library/Logs/telepresence '/Users/xxx/Library/Application Support/telepresence'
Password:
Launching Telepresence User Daemon
Connected to context kubernetes-admin@kubernetes (https://8.16.0.211:6443)

Примечание. Подключенный кластер — это кластер, указанный в kubeconfig, и он должен быть действительно доступен. При этом телеприсутствие автоматически откроет браузер и попросит авторизоваться:

Этот шаг нельзя пропустить, иначе последующие шаги потребуют входа в систему, прежде чем вы сможете продолжить.

После выполнения вышеуказанных шагов проверьте кластер k8s и вы обнаружите, что в кластере будет создан контроллер с именем Traffic-Manager:

Язык кода:javascript
копировать
$kubectl get po -n ambassador
NAME                               READY   STATUS    RESTARTS   AGE
traffic-manager-5bcfc9766f-lbrsz   1/1     Running   0          15m

4.Перехватчик

Как показано на рисунке выше, в k8s развернуты две службы: «Пользователи» и «Заказы».

В качестве примера мы возьмем Сервисные Заказы. В обычных обстоятельствах запрос на доступ к Заказам будет отправлен и получен в обычном режиме. Функция телеприсутствия заключается в перехвате запросов, отправленных в Заказы, и пересылке их на указанный пользователем адрес (обычно локальный).

Поэтому, прежде чем приступить к настройке, нужно понять концепцию перехватчиков в телеприсутствии:

• Глобальный перехват: перехватывайте весь трафик, обращающийся к услуге в k8s, и пересылайте его на локальный сервер.

Как показано на рисунке, с помощью глобального перехвата весь трафик, обращающийся к сервису Orders, можно перехватить и перенаправить на локальный. Конечно, нам нужно запускать локальный код для получения перенаправленных запросов. В то же время мы можем использовать любой инструмент отладки для локальной отладки.

• Персональный перехват: выборочно перехватывать только часть трафика службы, не мешая остальному трафику.

Вы можете установить идентификатор того, следует ли перехватывать запрос, через следующие параметры:

Язык кода:javascript
копировать
--http-match=key=value Определите, нужно ли перехватывать и пересылать запрос, на основе заголовка запроса.
--http-path-equal <path> На основе пути запроса
--http-path-prefix <prefix>  На основе пути префикс запроса
--http-path-regex <regex> На основе пути запроса Соответствовать ли данному регулярному выражению

5. Практика

Перед началом необходимо развернуть сервис удаленной отладки на кластере k8s:

Язык кода:javascript
копировать
$kubectl get po,svc  -lk8s-app=lsh-mcp-idp-cd-test
NAME                                  READY   STATUS    RESTARTS   AGE
pod/lsh-mcp-idp-cd-6c68876d48-v6c88   1/1     Running   0          30s

NAME                     TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)                         AGE
service/lsh-mcp-idp-cd   NodePort   20.102.1.158   <none>        9090:30323/TCP,2345:30886/TCP   30s

И запустите код lsh-mcp-idp-cd в локальной отладке:

Затем используйте следующую команду, чтобы найти службу для перехвата пересылки, а именно lsh-mcp-idp-cd:

Язык кода:javascript
копировать
$telepresence list 
lsh-mcp-idp-cd: ready to intercept (traffic-agent not yet installed)

Обратите внимание: если вы хотите указать пространство имен, вы можете добавить параметр --namespace, как показано ниже:

Язык кода:javascript
копировать
$telepresence list --namespace=kube-system

Добавьте глобальный перехватчик:

Язык кода:javascript
копировать
telepresence intercept <service-name> --port <local-port>[:<remote-port>] --http-match=all --env-file <path-to-env-file> [--namespace необязательный]

Соответствует практическим сценариям:

Язык кода:javascript
копировать
$telepresence intercept lsh-mcp-idp-cd --port 9090:9090 --http-match=all --env-file ~/lsh-mcp-idp-cd-intercept.env  

Flag --http-match has been deprecated, use --http-header
Using Deployment lsh-mcp-idp-cd
intercepted
    Intercept name         : lsh-mcp-idp-cd
    State                  : ACTIVE
    Workload kind          : Deployment
    Destination            : 127.0.0.1:9090
    Service Port Identifier: 9090
    Volume Mount Error     : sshfs is not installed on your local machine
    Intercepting           : matching all HTTP requests
    Preview URL            : https://sad-thompson-7927.preview.edgestack.me
    Layer 5 Hostname       : lsh-mcp-idp-cd.default.svc.cluster.local

После завершения выполнения вы обнаружите, что рабочая нагрузка была внедрена с помощью сайдкара:

Язык кода:javascript
копировать
$kubectl get po -lk8s-app=lsh-mcp-idp-cd-test -oyaml | grep -A 5  containerID
    - containerID: docker://6aea792f32af00b2e71f643ea41630de9bb6b0ebbe91251877fd79f67630efa1
      image: registry.cn-beijing.aliyuncs.com/launcher-agent-only-dev/idp:v1
      imageID: docker-pullable://registry.cn-beijing.aliyuncs.com/launcher-agent-only-dev/idp@sha256:c3be2545c30eb75fb652d383e9ec5545df9142e40d3b6f7f78633316b0db8103
      lastState: {}
      name: idp-cd
      ready: true
--
    - containerID: docker://5acc04048950fdd38be3a8012c4cc0edbfd83079883717e34992f6f31036176f
      image: datawire/ambassador-telepresence-agent:1.11.10
      imageID: docker-pullable://datawire/ambassador-telepresence-agent@sha256:9008fc1a6a91dd27baf3da9ebd0aee024f0d6d6a3f9c24611476474f6583e7f8
      lastState: {}
      name: traffic-agent
      ready: true

Добавляется контейнер с именем Traffic-Agent. Именно этот контейнер отвечает за перехват трафика, отправляемого в под, и его пересылку.

Выполните следующую команду в кластере k8s, чтобы запросить службу lsh-mcp-idp-cd:

Язык кода:javascript
копировать
$curl 20.102.1.158:9090/version

Снова взглянув на локальный код, мы обнаружим, что запрос получен:

Вышеизложенное представляет собой практическую часть глобального перехвата. Студенты, интересующиеся личным перехватом, могут практиковать его самостоятельно. Кроме того, что касается личного перехвата, кажется, что существует ограничение на количество использований для каждой учетной записи. превышено, то при создании персонального перехватчика будет выдано сообщение об ошибке:

Язык кода:javascript
копировать
telepresence: error: Failed to establish intercept: intercept in error state AGENT_ERROR: You’ve reached your limit of personal intercepts available for your subscription. See usage and available plans at https://app.getambassador.io/cloud/subscriptions

See logs for details (1 error found): "/Users/xxx/Library/Logs/telepresence/daemon.log"

See logs for details (13609 errors found): "/Users/xxx/Library/Logs/telepresence/connector.log"
If you think you have encountered a bug, please run `telepresence gather-logs` and attach the telepresence_logs.zip to your github issue or create a new one: https://github.com/telepresenceio/telepresence/issues/new?template=Bug_report.md .

6.Удалить

Удаление перехватчика: после выполнения добавленный в рабочую нагрузку дополнительный компонент будет удален.

Язык кода:javascript
копировать
$telepresence leave lsh-mcp-idp-cd

Удалите агенты и менеджеры телеприсутствия, очистите все коляски и контроллеры диспетчера трафика после выполнения и закройте локальный фоновый процесс телеприсутствия.

Язык кода:javascript
копировать
$telepresence uninstall --everything
Telepresence Network quitting...done
Telepresence Traffic Manager quitting...done

Исходный текст: LStack Langcheyun

- END -

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose