Использование Bridge to Kubernetes

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

Перед началом

В контексте этой статьи предполагается, что у вас уже есть собственный кластер с архитектурой микрослужб и вы хотите отладить один из модулей в своем кластере. Если вы хотите узнать, как использовать Bridge to Kubernetes с существующим примером приложения, см. раздел Использование Bridge to 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 перенаправляется для вашей службы в версию вашего приложения, работающую на вашем компьютере разработки. Функция Bridge to Kubernetes также направляет весь исходящий трафик из приложения обратно в кластер Kubernetes.

    Важно!

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

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

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

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

Примечание

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

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

Снимок экрана, показывающий команду Debug (Local Tunnel) в VS Code

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

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

Снимок экрана, отображающий контекстное меню Debug Local Tunnel в VS Code

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

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

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

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

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

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

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

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

Щелкните значок Отладка слева и выберите недавно добавленную конфигурацию запуска Kubernetes, например Запуск через NPM с Kubernetes вверху. Если вы выберете этот вариант, эта конфигурация запуска создается Bridge to Kubernetes.

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

Примечание

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

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

Отладка при помощи Bridge to Kubernetes

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

Примечание

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

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

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

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

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

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

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

Отредактируйте код, сохраните изменения и нажмите CTRL+SHIFT+F5 (⇧⌘F5 на Mac) или выберите Выполнить, затем Перезапустить отладку. После повторного подключения обновите страницу в браузере и подтвердите свои изменения.

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

Примечание

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

Дополнительная настройка

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

Если вы используете кластер AKS, который использует управляемое удостоверение, функцию безопасности, предоставляемую Azure Active Directory, см. раздел Использование управляемой идентификации с 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# вы можете использовать код, подобный следующему:

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 в репозитории mindaro:

    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-адресе для запроса, но это не будет работать в некоторых сценариях, например, при использовании Remote 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 для их использования, как описано в разделе Переменные среды службы.

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

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

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

Сведения о поддерживаемых сейчас функциях и будущих планах для Bridge to Kubernetes см. в стратегии развития Bridge to Kubernetes.