Прочитать на английском

Поделиться через


Используйте Bridge to Kubernetes (VS Code)

Примечание

Kubernetes Bridge будет снят с эксплуатации 30 апреля 2025 года. Чтобы узнать больше о прекращении поддержки и альтернативах с открытым исходным кодом, пожалуйста, ознакомьтесь с вопросом на GitHub.

Bridge to Kubernetes позволяет запускать и отлаживать код на компьютере разработки, а также подключаться к кластеру Kubernetes с остальными приложениями или службами. В этом руководстве вы узнаете, как использовать Bridge to Kubernetes для перенаправления трафика между кластером Kubernetes и кодом, работающим на компьютере разработки.

Перед началом работы

В этой статье предполагается, что у вас уже есть собственный кластер с архитектурой микрослужб, и вы хотите выполнить отладку одного из модулей pod в кластере. Если вы хотите узнать, как использовать Bridge to Kubernetes с существующим примером приложения, см. статью Использование моста для Kubernetes с примером. Если вы используете службу Azure Kubernetes и хотите использовать более сложный пример приложения, ознакомьтесь с Bridge to Kubernetes (AKS).

Необходимые условия

  • Кластер Kubernetes с приложением, которое требуется выполнить отладку.
  • Visual Studio Code работает в macOS, Windows 10 или более поздней версии или Linux.

Подключение к кластеру и отладка службы

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

  1. На компьютере разработки убедитесь, что в текущем контексте задан кластер и пространство имен, в котором работает ваше приложение.

  2. Откройте рабочую область для приложения, которое вы хотите отлаживать в Visual Studio Code. В окне расширения Kubernetes в разделе Кластерыубедитесь, что выбраны ваш кластер и пространство имен. Откройте палитру команд (CTRL+SHIFT+P или cmd+SHIFT+P на компьютере Mac) и выполните команду Bridge to Kubernetes: настройте для запуска процесса настройки.

  3. Выберите службу Kubernetes, которую вы хотите перенаправить на локальную версию.

    Выберите службу для подключения к

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

    Важно!

    Вы можете перенаправлять только те службы, у которых есть один pod.

  4. После выбора службы пропустите следующий раздел и выполните действия, описанные в разделе Настройка отладчика для отладки локального туннеля с помощью Bridge to Kubernetes.

Установка и использование локальной отладки туннеля

Выполните следующие действия, чтобы начать отладку локального туннеля при наличии расширения с открытым исходным кодом Kubernetes и иметь кластер Kubernetes со службами, которые необходимо выполнить отладку. В этом разделе описано, как установить Bridge to Kubernetes и запустить процесс настройки для отладки локального туннеля.

Примечание

Расширение Kubernetes для VS Code предоставляет точку входа API, которая позволяет авторам расширений вносить другие локальные решения туннелирования из VS Code Marketplace. Мост к Kubernetes — это одна из возможных реализаций возможности отладки локального туннеля.

Существует два способа начать использовать отладку локального туннеля в VS Code. Первым способом является открытие палитры команд (CTRL+SHIFT+P или cmd+Shift+P на компьютере Mac) и введите Kubernetes: Debug (Local Tunnel).

Снимок экрана, показывающий команду отладки (локального туннеля) в VS Code

Кроме того, перейдите в обозреватель кластеров Kubernetes. Откройте ресурсы активного кластера и найдите службу или pod, которую вы хотите отладить. Затем щелкните правой кнопкой мыши на службу и выберите Отладка: локальный туннель.

На этом этапе, если у вас нет расширения VS Code, которое предлагает возможности локальной отладки, вы будете перенаправлены в Marketplace, чтобы выбрать расширение, которое обеспечивает локальную отладку. Выберите расширение Bridge to Kubernetes.

снимок экрана, на котором показано контекстное меню отладки локального туннеля в VS Code

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

Настройка отладчика для отладки локального туннеля с помощью Bridge to Kubernetes

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

Введите номер порта

Выберите конфигурацию запуска отладки, которая обычно используется при локальном запуске приложения. Если у вас нет конфигурации запуска, вы можете либо разрешить Bridge to Kubernetes создать его, либо не создать его, в этом случае необходимо запустить приложение или службу вручную. Дополнительную информацию см. в конфигурациях запуска .

Выбор конфигурации запуска отладчика

У вас есть возможность работать в изолированном режиме или без изоляции. При изолированном выполнении только ваши запросы направляются в локальный процесс; другие разработчики могут использовать кластер, не затрагивая его. Если вы не запускаете в изолированном режиме, весь трафик перенаправляется в локальный процесс. Дополнительные сведения об этом параметре см. в разделе Использование возможностей маршрутизации для разработки в изоляции.

Выбор изоляции

Щелкните значок отладки слева и выберите одну из недавно добавленных конфигураций запуска Kubernetes, например Запустить через NPM с Kubernetes, в верхней части. Эта конфигурация запуска создается мостом к Kubernetes, если выбрать этот параметр.

Выбор профиля запуска отладки

Примечание

Вам будет предложено разрешить EndpointManager запускаться с повышенными привилегиями и изменять файл hosts.

Компьютер разработки подключен, когда строка состояния VS Code становится оранжевым, а расширение Kubernetes показывает, что вы подключены.

отладка с помощью моста к Kubernetes

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

Примечание

При последующих запусках вам не будет предложено указать имя службы, порт, задачу запуска или изолированный запуск. Эти значения сохраняются в .vscode/tasks.json. Чтобы изменить эти параметры позже, откройте палитру команд (CTRL+SHIFT+P или cmd+SHIFT+P на компьютере Mac) и выполните команду Bridge to Kubernetes: Настройка. Вы можете открыть .vscode/launch.json и .vscode/tasks.json, чтобы просмотреть определенные параметры конфигурации, добавляемые в профиль запуска Bridge to Kubernetes.

Если в кластере используется C coregRPC, реализация gRPC, использующая c-ares, в профиль запуска добавляется переменная среды GRPC_DNS_RESOLVER со значением native. Эта переменная задаёт использование обходного пути для исключения 2-минутной задержки при подключении. Дополнительные сведения см. в этом вопросе gRPC .

Установка точки останова

Установите точку останова с помощью F9 или выберите Выполнить, затем Переключить точку останова.

Перейдите к примеру приложения, открыв общедоступный URL-адрес. Когда код достигнет точки останова, он должен открыться в отладчике. Чтобы возобновить работу службы, нажмите Ctrl+F5 или выберите Запустить затем Продолжить. Вернитесь в браузер и убедитесь, что видите временное изображение велосипеда.

Обновление приложения

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

Измените код, сохраните изменения и нажмите клавиши Ctrl +Shift+F5 (⇧⌘F5 на Mac) или нажмите Запустить затем Перезапустить отладку. После повторного подключения обновите браузер и проверьте изменения.

Выберите Запуститьостановить отладку или нажмите клавиши SHIFT SHIFT+F5, чтобы остановить отладчик.

Примечание

По умолчанию остановка задачи отладки также отключает компьютер разработки от кластера Kubernetes. Это поведение можно изменить, выполнив поиск Bridge to Kubernetes: Отключение после отладки в параметрах Visual Studio Code и удалить флажок рядом с Автоматическое отключение при остановке отладки. После обновления этого параметра компьютер разработки останется подключенным при остановке и запуске отладки. Чтобы отключить компьютер разработки от кластера, на строке состояния щелкните на расширении Bridge to Kubernetes, а затем выберите Отключить текущий сеанс.

Дополнительная конфигурация

Мост к Kubernetes может обрабатывать маршрутизацию трафика и репликацию переменных среды без дополнительной настройки. Если вам нужно скачать все файлы, подключенные к контейнеру в кластере Kubernetes, например файл ConfigMap, можно создать KubernetesLocalProcessConfig.yaml для скачивания этих файлов на компьютер разработки. Дополнительные сведения см. в разделе Настройка моста в Kubernetes.

Если вы используете кластер AKS, использующий управляемую идентификацию — функцию безопасности, предоставляемую Microsoft Entra, см. раздел Управляемая идентификация с Bridge to Kubernetes для информации о том, как настроить Bridge to Kubernetes для этого сценария.

Использование ведения журнала и диагностики

Выходные данные журнала записываются в окно Bridge to Kubernetes после подключения компьютера разработки к кластеру Kubernetes.

Нажмите на строку состояния Kubernetes и выберите Показать информацию о диагностике подключения. Эта команда выводит текущие переменные среды и записи DNS в выходных данных ведения журнала.

Кроме того, журналы диагностики можно найти в каталоге Bridge to Kubernetes в каталоге TEMP компьютера разработки. В Windows 10 это находится в %TEMP%\Bridge to Kubernetes. В Mac каталог TEMP можно найти, выполнив echo $TMPDIR из окна терминала. В Linux это /tmp/Bridge to Kubernetes.

Выполнение в режиме изоляции

С помощью Bridge to Kubernetes вы также можете настроить изолированную версию служб, над которыми вы работаете, что означает, что другие пользователи, использующие кластер, не будут затронуты изменениями. Этот режим изоляции выполняется путем маршрутизации ваших запросов в ваш экземпляр каждой затронутой службы, а весь остальной трафик маршрутизируется обычным образом. Чтобы получить доступ к URL-адресу локальной конечной точки для изолированного приложения, запустите отладчик в режиме изоляции, откройте меню Kubernetes в строке состояния и выберите запись конечной точки. Дополнительные сведения о том, как работает маршрутизация в режиме изоляции, см. в разделе "Как работает Bridge to Kubernetes".

Распространение заголовков

Чтобы использовать Bridge to Kubernetes таким образом, необходимо распространить заголовок Bridge to Kubernetes из входящих запросов на любые запросы, которые ваши службы вносят в другие службы в кластере. Все API HTTP-запросов, независимо от языка, предоставляют определенный способ выполнения этого, зависящий от конкретного фреймворка. Например, для кода .NET в C#можно использовать следующий код:

C#
var request = new HttpRequestMessage();
request.RequestUri = new Uri("http://mywebapi/api/values/1");
if (this.Request.Headers.ContainsKey("kubernetes-route-as"))
{
    // Propagate the dev space routing header
    request.Headers.Add("kubernetes-route-as", this.Request.Headers["kubernetes-route-as"] as IEnumerable<string>);
}
var response = await client.SendAsync(request);

Примечание

Чтобы избежать влияния на код при каждом запросе, можно создать класс, наследующий от System.Net.Http.DelegatingHandler и переопределить метод SendAsync с помощью кода, аналогичного предыдущему примеру. Вы можете найти код с помощью этого метода в Интернете; одним из примеров является правильное распространение kubernetes-route-as в Bridge to Kubernetes.

Для служб Node.js можно использовать следующий код, взятый из примера приложения todo-app в репозитории Bridge to Kubernetes:

JavaScript
    server.get("/api/stats", function (req, res) {
        var options = {
            host: process.env.STATS_API_HOST,
            path: '/stats',
            method: 'GET'
        };
        const val = req.get('kubernetes-route-as');
        if (val) {
            console.log('Forwarding kubernetes-route-as header value - %s', val);
            options.headers = {
                'kubernetes-route-as': val
            }
        }
        var req = http.request(options, function(statResponse) {
            res.setHeader('Content-Type', 'application/json');
            var responseString = '';
            //another chunk of data has been received, so append it to `responseString`
            statResponse.on('data', function (chunk) {
                responseString += chunk;
            });
            statResponse.on('end', function () {
                res.send(responseString);
            });
        });

        req.on('error', function(e) {
            console.log('problem with request: ' + e.message);
          });

          req.end();
    });

Взаимодействие с другими службами

При взаимодействии с другой службой в том же кластере Kubernetes, например с HTTP-запросом, обычно используется жестко закодированное имя службы в URL-адресе запроса, но это не будет работать в некоторых сценариях, например при использовании удаленных SSH, WSL и Codespaces. Этой статье описывается использование переменных среды службы Kubernetes для указания URL-адреса подключения для этих сценариев.

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

Если при активации расширения Bridge to Kubernetes возникает эта ошибка:

"Не удалось обновить зависимости: максимальное число повторных попыток превышено"

Сначала повторите активацию с помощью кнопки. Если неоднократно не удается, см. https://github.com/microsoft/mindaro/issues/32.

При использовании Bridge to Kubernetes в удаленном сеансе SSH, если EndpointManager завершается сбоем, причиной может быть то, что Bridge to Kubernetes не может изменить файл hosts из-за проблем с разрешениями. Чтобы включить удаленный SSH или запуск от имени пользователя без повышенных привилегий, необходимо обновить код для использования переменных среды Kubernetes и настроить VS Code для их использования, как описано в разделе Переменные среды Kubernetes.

Дальнейшие действия

Дополнительные сведения о Bridge to Kubernetes см. в разделе Как работает Bridge to Kubernetes.

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