Как работает Мост к Kubernetes
Заметка
Мост к Kubernetes будет выведен из эксплуатации 30 апреля 2025 года. Дополнительную информацию о завершении поддержки и альтернативах с открытым исходным кодом см. на GitHub в задаче .
Bridge to Kubernetes — это итеративное средство разработки приложений микрослужб, предназначенных для Kubernetes. Расширение Bridge to Kubernetes доступно для Visual Studio и Visual Studio Code (VS Code).
Мост с Kubernetes позволяет запускать и отлаживать код на компьютере разработки. Этот компьютер по-прежнему подключен к кластеру Kubernetes с остальными приложениями или службами. Если у вас есть большая архитектура микрослужб со многими взаимозависимыми службами и базами данных, репликация этих зависимостей на компьютере разработки может оказаться сложной. Создание и развертывание кода в кластере Kubernetes для каждого изменения кода может быть медленным, длительным и сложным.
Программа Bridge to Kubernetes создает подключение между вашим компьютером разработки и кластером. Этот подход позволяет избежать необходимости создавать и развертывать код в кластере. Вы можете тестировать и разрабатывать свою службу в контексте, подключенном к вашему кластеру. Этот подход позволяет выполнять отладку без создания конфигурации Docker или Kubernetes.
Мост к Kubernetes перенаправляет трафик между подключенным кластером Kubernetes и компьютером разработки. Локальный код и службы в кластере Kubernetes могут взаимодействовать, как если бы они были в одном кластере Kubernetes.
Программа Bridge to Kubernetes позволяет переносить переменные среды и подключенные тома из вашего кластера Kubernetes на компьютер для разработки. Доступ к переменным среды и подключенным томам позволяет работать над кодом, не реплицировав эти зависимости.
Требования
Заметка
Мост к Kubernetes не работает с кластерами Docker для настольных компьютеров Kubernetes. Чтобы использовать Bridge to Kubernetes, вам потребуется любая из следующих конфигураций:
- VS Code с установленным расширением Bridge to Kubernetes.
- Visual Studio 2019 версии 16.7 или более поздней, работающей на Windows 10 или более поздней. Убедитесь, что установлены ASP.NET и рабочая среда для веб-разработки. Установите расширение Bridge to Kubernetes.
С помощью Bridge to Kubernetes можно установить подключение к кластеру Kubernetes. Данное подключение перенаправляет трафик между существующим модулем в кластере и вашим компьютером для разработки.
Заметка
При использовании Bridge to Kubernetes вам предлагается указать имя службы, которую необходимо перенаправить на ваш компьютер разработчика. Этот параметр является удобным способом идентификации pod для перенаправления. Все перенаправление между кластером Kubernetes и компьютером разработки предназначено для модуля pod. Дополнительные сведения см. в статье Предоставление службы.
В VS Code мост к Kubernetes поддерживает все языки, если их можно запускать локально. В Visual Studio Bridge to Kubernetes поддерживает .NET Core. Bridge to Kubernetes не поддерживает .NET Framework в Visual Studio, так как для него требуется поддержка узлов Windows.
Осторожность
Bridge to Kubernetes предназначен только для использования в сценариях разработки и тестирования. Он не предназначен и не поддерживается для использования с рабочими кластерами или динамическими службами, находящимися в активном использовании.
Сведения о текущих функциях и будущих планах см. в дорожной карте Bridge to Kubernetes.
Установка подключения
Когда Bridge to Kubernetes устанавливает подключение к кластеру, он выполняет следующие действия:
- Предложит настроить службу для замены в кластере, порт на компьютере разработки, используемый для кода, и задачу запуска кода в качестве одноразового действия.
- Заменяет контейнер в модуле кластера на контейнер удаленного агента, который перенаправляет трафик на ваш компьютер для разработки.
- Выполняет команду kubectl port-forward на разработческом компьютере для перенаправления трафика с разработческого компьютера на удаленного агента, работающего в кластере.
- Собирает сведения о среде из кластера с помощью удаленного агента. Эта информация о среде включает переменные среды, видимые службы, монтирование томов и монтирование секретов.
- Настраивает среду в Visual Studio так, чтобы служба на компьютере разработки могла получить доступ к тем же переменным, как если бы она выполнялась в кластере.
- Обновляет файл hosts, чтобы сопоставлять службы в кластере с локальными IP-адресами на вашем компьютере разработки. Эти хосты записи файла позволяют выполняемому на вашем компьютере разработки коду делать запросы к другим службам, работающим в кластере. Чтобы обновить файл на узле, Bridge to Kubernetes требуется доступ администратора на вашем компьютере для разработки.
- Начинайте выполнение и отладку вашего кода на компьютере разработки. При необходимости bridge to Kubernetes освобождает необходимые порты на компьютере разработки путем остановки служб или процессов, которые в настоящее время используют эти порты.
Использование Bridge to Kubernetes
После установки подключения к кластеру запустите и отладьте код на локальной машине без использования контейнеров. Код взаимодействует с кластером. Любой сетевой трафик, получаемый удаленным агентом, перенаправляется на локальный порт, указанный во время подключения. Собственный запущенный код может принимать и обрабатывать этот трафик. Переменные среды, тома и секреты из вашего кластера становятся доступными для кода, выполняемого на вашем компьютере для разработки.
Bridge to Kubernetes добавляет узлы записи файлов и перенос на компьютер разработчика. Код может отправлять сетевой трафик службам, работающим в кластере, с помощью имен служб из кластера. Этот трафик перенаправляется в службы, работающие в кластере. Трафик направляется между компьютером разработки и кластером в течение всего времени подключения.
Кроме того, Bridge to Kubernetes предоставляет возможность реплицировать переменные окружения и подключенные файлы, доступные на pod в вашем кластере, на вашем локальном компьютере разработки через файл KubernetesLocalProcessConfig.yaml
. Этот файл также можно использовать для создания новых переменных среды и точек монтирования томов.
Заметка
В течение времени подключения к кластеру плюс 15 минут Bridge to Kubernetes выполняет процесс с именем EndpointManager с административными правами на вашем локальном компьютере.
Параллельно можно выполнять отладку с несколькими службами. Запустите столько экземпляров Visual Studio, сколько требуется выполнить отладку. Убедитесь, что службы прослушивают разные порты локально. Настройте и отладите их отдельно. Изоляция не поддерживается в этом сценарии.
Дополнительная конфигурация
Файл KubernetesLocalProcessConfig.yaml позволяет воспроизводить переменные окружения и подключенные файлы, доступные для подов в вашем кластере. При использовании Visual Studio файл KubernetesLocalConfig.yaml должен находиться в том же каталоге, что и файл проекта для службы. Дополнительные сведения см. в разделе Настройка моста в Kubernetes.
Использование возможностей маршрутизации для разработки в изоляции
По умолчанию Bridge to Kubernetes перенаправляет весь трафик для службы на компьютер разработки. Вместо этого можно использовать возможности маршрутизации только для перенаправления запросов с поддомена на компьютер разработки. Эти возможности маршрутизации позволяют использовать Bridge to Kubernetes для разработки в изоляции и предотвращения нарушения другого трафика в кластере.
В следующей анимации показаны два разработчика, работающих в одном кластере в изоляции:
Если вы включите работу в изоляции, Bridge to Kubernetes выполняет следующие действия, помимо подключения к кластеру Kubernetes:
- Проверяет, что кластер Kubernetes не включен в Azure Dev Spaces.
- Реплицирует выбранную службу в кластере в том же пространстве имен и добавляет метку routing.visualstudio.io/route-from=SERVICE_NAME и аннотацию routing.visualstudio.io/route-on-header=kubernetes-route-as=GENERATED_NAME.
- Настраивает и запускает диспетчер маршрутизации в том же пространстве имен в кластере Kubernetes. Диспетчер маршрутизации использует селектор меток для поиска метки routing.visualstudio.io/route-from=SERVICE_NAME и аннотации routing.visualstudio.io/route-on-header=kubernetes-route-as=GENERATED_NAME для настройки маршрутизации в пространстве имен.
Заметка
Bridge to Kubernetes проверяет, включена ли Azure Dev Spaces в кластере Kubernetes. Он предложит отключить Azure Dev Spaces, прежде чем использовать Bridge to Kubernetes.
Диспетчер маршрутизации выполняет следующие действия при запуске:
- Дублирует все входы, включая входы балансировщика нагрузки, найденные в пространстве имен, с использованием GENERATED_NAME для поддомена.
- Создает модуль pod envoy для каждой службы, связанной с повторяющимися входными данными с поддоменом GENERATED_NAME.
- Создает другой модуль pod envoy для службы, над которым вы работаете в изоляции. Эта конфигурация позволяет направлять запросы с поддоменом на компьютер разработки.
- Настраивает правила маршрутизации для каждого модуля pod envoy для обработки маршрутизации служб с поддоменом.
На следующей схеме показан кластер Kubernetes до подключения Bridge to Kubernetes к вашему кластеру.
На следующей схеме показан тот же кластер с поддержкой Bridge to Kubernetes в режиме изоляции. Здесь можно увидеть дублирующиеся службы и pods Envoy, которые поддерживают маршрутизацию в изолированном режиме.
Когда кластер получает запрос с поддоменом GENERATED_NAME, он добавляет в запрос заголовок kubernetes-route-as=GENERATED_NAME. Модули envoy-подов обрабатывают маршрутизацию запросов к соответствующей службе в кластере. Для запроса к службе, которая работает в изоляции, кластер перенаправляет запрос на компьютер разработки с помощью удаленного агента.
Когда кластер получает запрос без поддомена GENERATED_NAME, он не добавляет в запрос заголовок. Модули envoy-подов обрабатывают маршрутизацию запросов к соответствующей службе в кластере. Для запроса на замену службы pods перенаправляют его в оригинальную службу вместо удаленного агента.
Важный
Каждая служба в кластере должна пересылать заголовок kubernetes-route-as=GENERATED_NAME при осуществлении дополнительных запросов. Например, когда serviceA получает запрос, он отправляет запрос на serviceB перед возвратом ответа. В этом примере serviceA необходимо перенаправить заголовок kubernetes-route-as=GENERATED_NAME в запросе на serviceB. Некоторые языки, например ASP.NET, могут иметь методы для обработки распространения заголовков.
При отключении от кластера, по умолчанию, Bridge to Kubernetes удаляет все pod Envoy и дублирующую службу.
Заметка
Развертывание и служба диспетчера маршрутизации остаются в вашем пространстве имён. Чтобы удалить развертывание и службу, выполните следующие команды для вашего пространства имен.
kubectl delete deployment routingmanager-deployment -n NAMESPACE
kubectl delete service routingmanager-service -n NAMESPACE
Диагностика и ведение журнала
При использовании Bridge to Kubernetes для подключения к кластеру ваш компьютер записывает данные диагностики. Он сохраняет их в каталоге TEMP компьютера для разработки в папке Bridge to Kubernetes.
Авторизация Kubernetes RBAC
Kubernetes предоставляет управление доступом на основе ролей (RBAC) для управления разрешениями для пользователей и групп. Дополнительные сведения см. в документации Kubernetes. Вы можете задать разрешения для кластера с поддержкой RBAC, создав YAML-файл и используя kubectl
для его применения к кластеру.
Чтобы задать разрешения в кластере, создайте или измените ФАЙЛ YAML, например permissions.yml. Используйте ваше пространство имен для <namespace>
, а также для пользователей и групп, которым требуется доступ.
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: bridgetokubernetes-<namespace>
namespace: development
subjects:
- kind: User
name: jane.w6wn8.k8s.ginger.eu-central-1.aws.gigantic.io
apiGroup: rbac.authorization.k8s.io
- kind: Group
name: dev-admin
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: admin
apiGroup: rbac.authorization.k8s.io
Примените разрешения с помощью следующей команды:
kubectl -n <namespace> apply -f <yaml file name>
Ограничения
Bridge to Kubernetes имеет следующие ограничения:
- Под может иметь только один контейнер, работающий в нем, для успешного подключения к Bridge to Kubernetes.
- В настоящее время модули pod Bridge to Kubernetes должны быть контейнерами Linux. Контейнеры Windows не поддерживаются.
- Мост к Kubernetes требует повышенных разрешений для изменения вашего файла hosts на компьютере разработчика.
- Bridge to Kubernetes не может использоваться в кластерах с включенными Azure Dev Spaces.
Дальнейшие действия
Чтобы приступить к работе с Bridge to Kubernetes и подключить ваш локальный компьютер для разработки к кластеру, см. Использовать Bridge to Kubernetes (VS) или Использовать Bridge to Kubernetes (VS Code).