Как работает Bridge to KubernetesHow Bridge to Kubernetes works

Bridge to Kubernetes позволяет выполнять и отлаживать код на компьютере разработки, подключенном к кластеру Kubernetes, в котором находятся остальные приложения или службы.Bridge to Kubernetes allows you to run and debug code on your development computer, while still connected to your Kubernetes cluster with the rest of your application or services. Например, при наличии масштабной архитектуры микрослужб со множеством взаимозависимых служб и баз данных репликация этих зависимостей на компьютере разработки может представлять сложность.For example, if you have a large microservices architecture with many interdependent services and databases, replicating those dependencies on your development computer can be difficult. Кроме того, сборка и развертывание кода в кластере Kubernetes при каждом изменении кода в процессе внутреннего цикла разработки могут занимать много времени и затруднять использование отладчика.Additionally, building and deploying code to your Kubernetes cluster for each code change during inner-loop development can be slow, time consuming, and difficult to use with a debugger.

Функция Bridge to Kubernetes избавляет от необходимости выполнять сборку кода и развертывать его в кластере благодаря прямому подключению между компьютером разработки и кластером.Bridge to Kubernetes avoids having to build and deploy your code to your cluster by instead creating a connection directly between your development computer and your cluster. Подключение компьютера разработки к кластеру во время отладки позволяет быстро тестировать и разрабатывать службу в контексте полного приложения, не создавая конфигурацию Docker или Kubernetes.Connecting your development computer to your cluster while debugging allows you to quickly test and develop your service in the context of the full application without creating any Docker or Kubernetes configuration.

Bridge to Kubernetes перенаправляет трафик между подключенным кластером Kubernetes и компьютером разработки.Bridge to Kubernetes redirects traffic between your connected Kubernetes cluster and your development computer. Это перенаправление трафика позволяет коду на компьютере разработки и службам, работающим в кластере Kubernetes, взаимодействовать так, как если бы они находились в одном кластере Kubernetes.This traffic redirection allows code on your development computer and services running in your Kubernetes cluster to communicate as if they are in the same Kubernetes cluster. Bridge to Kubernetes также позволяет реплицировать переменные среды и подключенные тома, доступные модулям pod в кластере Kubernetes, на компьютере разработки.Bridge to Kubernetes also provides a way to replicate environment variables and mounted volumes available to pods in your Kubernetes cluster in your development computer. Наличие доступа к переменным среды и подключенным томам на компьютере разработки позволяет быстро работать с кодом, не реплицируя эти зависимости вручную.Providing access to environment variables and mounted volumes on your development computer allows you to quickly work on your code without having replicate those dependencies manually.

Предупреждение

Функция Bridge to Kubernetes предназначена для использования только в сценариях разработки и тестирования.Bridge to Kubernetes is intended for use in development and testing scenarios only. Он не предназначен для выполнения с рабочими кластерами или службами Live в активном использовании.It is not intended or supported for use with production clusters or live services in active use.

Сведения о поддерживаемых сейчас функциях и будущих планах для Bridge to Kubernetes см. в стратегии развития Bridge to Kubernetes.Information about the currently supported features and a future roadmap for Bridge to Kubernetes may be found at Bridge to Kubernetes roadmap.

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

Чтобы использовать функцию Bridge to Kubernetes в Visual Studio, требуется Visual Studio 2019 версии 16.7, предварительная версия 4, или более поздней версии в ОС Windows 10 с установленной рабочей нагрузкой ASP.NET и разработка веб-приложений и расширением Bridge to Kubernetes.To use Bridge to Kubernetes in Visual Studio, you need Visual Studio 2019 version 16.7 Preview 4 or greater running on Windows 10 with the ASP.NET and web development workload installed and the Bridge to Kubernetes Extension installed. При использовании функции Bridge to Kubernetes для установления подключения к кластеру Kubernetes можно настроить перенаправление всего входящего и исходящего трафика для существующего модуля pod в кластере на компьютер разработки.When you use Bridge to Kubernetes to establish a connection to your Kubernetes cluster, you have the option of redirecting all traffic to and from an existing pod in the cluster to your development computer.

Примечание

При использовании Bridge to Kubernetes вам будет предложено ввести имя службы, трафик которой должен перенаправляться на компьютер разработки.When using Bridge to Kubernetes, you are prompted for the name of the service to redirect to your development computer. Это удобный способ для указания перенаправляемого модуля pod.This option is a convenient way to identify a pod for redirection. Перенаправление между кластером Kubernetes и компьютером разработки осуществляется только для модуля pod.All redirection between your Kubernetes cluster and your development computer is for a pod.

Когда функция Bridge to Kubernetes устанавливает подключение к кластеру, она выполняет следующие действия.When Bridge to Kubernetes establishes a connection to your cluster, it:

  • Выводит запрос на настройку службы, которую следует заменить в кластере, порта на компьютере разработки, который следует использовать для кода, и задачи запуска для кода. Настройка выполняется один раз.Prompts you to configure the service to replace on your cluster, the port on your development computer to use for your code, and the launch task for your code as a one-time action.
  • Заменяет контейнер в модуле pod в кластере контейнером удаленного агента, который перенаправляет трафик на компьютер разработки.Replaces the container in the pod on the cluster with a remote agent container that redirects traffic to your development computer.
  • Выполняет команду kubectl port-forward на компьютере разработки для перенаправления трафика с компьютера разработки в удаленный агент, запущенный в кластере.Runs kubectl port-forward on your development computer to forward traffic from your development computer to the remote agent running in your cluster.
  • Собирает сведения о среде из кластера с помощью удаленного агента.Collects environment information from your cluster using the remote agent. Эти сведения включают в себя переменные среды, видимые службы, подключенные тома и подключенные секреты.This environment information includes environment variables, visible services, volume mounts, and secret mounts.
  • Настраивает среду в Visual Studio так, чтобы служба на компьютере разработки могла получать доступ к переменным так же, как если бы она выполнялась в кластере.Sets up the environment in Visual Studio so the service on your development computer can access the same variables as if it were running on the cluster.
  • Обновляет файл hosts, сопоставляя службы в кластере с локальными IP-адресами на компьютере разработки.Updates your hosts file to map services on your cluster to local IP addresses on your development computer. Эти записи в файле hosts позволяют коду, выполняющемуся на компьютере разработки, совершать запросы к другим службам, работающим в кластере.These hosts file entries allow code running on your development computer to make requests to other services running in your cluster. Чтобы обновить файл hosts, функция Bridge to Kubernetes запрашивает у администратора права доступа на компьютере разработки при подключении к кластеру.To update your hosts file, Bridge to Kubernetes will ask for administrator access on your development computer when connecting to your cluster.
  • Начинает выполнять и отлаживать код на компьютере разработки.Starts running and debugging your code on your development computer. При необходимости Bridge to Kubernetes освобождает необходимые порты на компьютере разработки, останавливая использующие их службы или процессы.If necessary, Bridge to Kubernetes will free required ports on your development computer by stopping services or processes that are currently using those ports.

После установления подключения к кластеру можно выполнять и отлаживать код на локальном компьютере без использования контейнеров, причем код может напрямую взаимодействовать с остальным кластером.After you establish a connection to your cluster, you can run and debug code natively on your computer, without containerization, and the code can directly interact with the rest of your cluster. Весь сетевой трафик, получаемый удаленным агентом, перенаправляется на локальный порт, указанный во время подключения, чтобы выполняемый локально код мог принимать и обрабатывать его.Any network traffic the remote agent receives is redirected to the local port specified during the connection so your natively running code can accept and process that traffic. Переменные среды, тома и секреты из кластера доступны коду, выполняемому на компьютере разработки.The environment variables, volumes, and secrets from your cluster are made available to code running on your development computer. Кроме того, благодаря добавлению записей в файл hosts и перенаправлению портов на компьютере разработки посредством функции Bridge to Kubernetes ваш код может отправлять сетевой трафик в службы, работающие в кластере, используя их имена, и этот трафик перенаправляется в службы, работающие в кластере.Also, due to the hosts file entries and port forwarding added to your developer computer by Bridge to Kubernetes, your code can send network traffic to services running on your cluster using the service names from your cluster, and that traffic gets forwarded to the services that are running in your cluster. Трафик маршрутизируется между компьютером разработки и кластером в течение всего времени подключения.Traffic is routed between your development computer and your cluster the entire time you're connected.

Кроме того, Bridge to Kubernetes позволяет реплицировать переменные среды и подключенные файлы, доступные модулям pod в кластере, на компьютере разработки через файл KubernetesLocalProcessConfig.yaml.In addition, Bridge to Kubernetes provides a way to replicate environment variables and mounted files available to pods in your cluster on your development computer through the KubernetesLocalProcessConfig.yaml file. Этот файл также можно использовать для создания новых переменных среды и подключений томов.You can also use this file to create new environment variables and volume mounts.

Примечание

На протяжении всего сеанса подключения к кластеру (и еще 15 минут) функция Bridge to Kubernetes выполняет на локальном компьютере процесс EndpointManager с разрешениями администратора.For the duration of the connection to the cluster (plus an additional 15 minutes), Bridge to Kubernetes runs a process called EndpointManager with admin permissions on your local computer.

Дополнительная настройка с помощью KubernetesLocalProcessConfig.yamlAdditional configuration with KubernetesLocalProcessConfig.yaml

Файл KubernetesLocalProcessConfig.yaml позволяет реплицировать переменные среды и подключенные файлы, доступные для групп pod в кластере.The KubernetesLocalProcessConfig.yaml file allows you to replicate environment variables and mounted files available to your pods in your cluster. При разработке для Bridge to Kubernetes в Visual Studio файл KubernetesLocalConfig.yaml должен находиться в том же каталоге, что и файл проекта для перенаправляемой службы.When using Visual Studio for Bridge to Kubernetes development, the KubernetesLocalConfig.yaml file must be located in the same directory as the project file for the service you are redirecting. Сведения о дополнительных параметрах конфигурации см. в статье Настройка Bridge to Kubernetes.For more information on the additional configuration options, see Configure Bridge to Kubernetes.

Использование возможностей маршрутизации для разработки в изоляцииUsing routing capabilities for developing in isolation

По умолчанию Bridge to Kubernetes перенаправляет на компьютер разработки весь трафик службы.By default, Bridge to Kubernetes redirects all traffic for a service to your development computer. Кроме того, можно использовать возможности маршрутизации, чтобы перенаправлять запросы к только службе, которая выполняется из поддомена на компьютере разработчика.You also have the option to use routing capabilities to only redirect requests to a service originating from a subdomain to your development computer. Эти возможности маршрутизации позволяют использовать Bridge to Kubernetes для разработки в изоляции и предотвращения помех для другого трафика в кластере.These routing capabilities allow you to use Bridge to Kubernetes to develop in isolation and avoid disrupting other traffic in your cluster.

В следующей анимации показаны два разработчика, работающие над одним кластером в изоляции:The following animation shows two developers working on the same cluster in isolation:

Анимированный GIF, иллюстрирующий изоляцию

При работе в изоляции Bridge to Kubernetes выполняет следующие действия в дополнение к подключению к кластеру Kubernetes:When you enable working in isolation, Bridge to Kubernetes does the following in addition to connecting to your Kubernetes cluster:

  • Проверяет, что в кластере Kubernetes не включена служба Azure Dev Spaces.Verifies Kubernetes cluster does not have Azure Dev Spaces enabled.
  • Реплицирует выбранную службу в кластер в том же пространстве имен и добавляет метку routing.visualstudio.io/route-from=SERVICE_NAME и аннотацию routing.visualstudio.io/route-on-header=kubernetes-route-as: GENERATED_NAME.Replicates your chosen service in the cluster in the same namespace and adds a routing.visualstudio.io/route-from=SERVICE_NAME label and routing.visualstudio.io/route-on-header=kubernetes-route-as: GENERATED_NAME annotation.
  • Настраивает и запускает диспетчер маршрутизации в том же пространстве имен в кластере Kubernetes.Configures and starts the routing manager in the same namespace on the Kubernetes cluster. Диспетчер маршрутизации использует селектор меток для поиска метки routing.visualstudio.io/route-from=SERVICE_NAME и аннотации routing.visualstudio.io/route-on-header=kubernetes-route-as: GENERATED_NAME при настройке маршрутизации в вашем пространстве имен.The routing manager uses a label selector to look for the routing.visualstudio.io/route-from=SERVICE_NAME label and routing.visualstudio.io/route-on-header=kubernetes-route-as: GENERATED_NAME annotation when configuring routing in your namespace.

Если Bridge to Kubernetes обнаруживает, что в кластере Kubernetes включена служба Azure Dev Spaces, вам будет предложено отключить Azure Dev Spaces, прежде чем можно будет использовать Bridge to Kubernetes.If Bridge to Kubernetes detects that Azure Dev Spaces is enabled on your Kubernetes cluster, you are prompted to disable Azure Dev Spaces before you can use Bridge to Kubernetes.

При запуске диспетчер маршрутизации выполняет следующие действия:The routing manager does the following when it starts up:

  • Дублирует весь входящий трафик (включая входящий трафик подсистемы балансировки нагрузки), найденный в пространстве имен, используя GENERATED_NAME в качестве поддомена.Duplicates all ingresses (including load balancer ingresses) found in the namespace using the GENERATED_NAME for the subdomain.
  • Создает модуль pod – представитель для каждой службы, связанной с повторяющимися входящим трафиком, с поддоменом GENERATED_NAME.Creates an envoy pod for each service associated with duplicated ingresses with the GENERATED_NAME subdomain.
  • Создает дополнительный модуль pod – представитель для службы, над которой вы работаете в изоляции.Creates an additional envoy pod for the service you are working on in isolation. Это позволяет перенаправлять запросы с поддоменом на компьютер разработчика.This allows requests with the subdomain to be routed to your development computer.
  • Настраивает правила маршрутизации для каждого модуля pod – представителя, чтобы управлять маршрутизацией для служб с поддоменом.Configures routing rules for each envoy pod to handle routing for services with the subdomain.

На следующей схеме показан кластер Kubernetes перед подключением Bridge to Kubernetes к нему:The following diagram shows a Kubernetes cluster before Bridge to Kubernetes connects to your cluster:

Схема кластера без Bridge to Kubernetes

На приведенной ниже схеме показан тот же кластер с функцией Bridge to Kubernetes, включенной в режиме изоляции.The following diagram shows the same cluster with Bridge to Kubernetes enabled in isolation mode. На ней видна дублированная служба и модули pod Envoy, поддерживающие маршрутизацию в режиме изоляции.Here, you can see the duplicate service and the envoy pods that support routing in isolation.

Схема кластера с включенной функцией Bridge to Kubernetes

При получении запроса с поддоменом GENERATED_NAME в кластере к запросу добавляется заголовок kubernetes-route-as=GENERATED_NAME.When a request with the GENERATED_NAME subdomain is received on the cluster, a kubernetes-route-as=GENERATED_NAME header is added to the request. Модуль pod – представитель обрабатывает маршрутизацию, которая запрашивает соответствующую службу в кластере.The envoy pods handle routing that request to the appropriate service in the cluster. Если запрос направляется в службу, которая работает в режиме изоляции, этот запрос перенаправляется удаленным агентом на компьютер разработчика.If the request is routed to the service that is being worked on in isolation, that request is redirected to your development computer by the remote agent.

При получении запроса с поддоменом GENERATED_NAME в кластере к запросу не добавляется заголовок.When a request without the GENERATED_NAME subdomain is received on the cluster, no header is added to the request. Модуль pod – представитель обрабатывает маршрутизацию, которая запрашивает соответствующую службу в кластере.The envoy pods handle routing that request to the appropriate service in the cluster. Если запрос направляется в заменяемую службу, этот запрос перенаправляется в исходную службу, а не на удаленный агент.If the request is routed to the service that is being replaced, that request is instead routed to the original service instead of the remote agent.

Важно!

При выполнении дополнительных запросов каждая служба в кластере должна перенаправить заголовок kubernetes-route-as=GENERATED_NAME.Each service on your cluster must forward the kubernetes-route-as=GENERATED_NAME header when making additional requests. Например, когда служба serviceA получает запрос, она делает запрос к службе serviceB, прежде чем вернуть ответ.For example, when serviceA receives a request, it then makes a request to serviceB before return a response. В этом примере служба serviceA должна перенаправить заголовок kubernetes-route-as=GENERATED_NAME в своем запросе к службе serviceB.In this example, serviceA needs to forward the kubernetes-route-as=GENERATED_NAME header in its request to serviceB. Некоторые языки, например ASP.NET, могут предоставлять методы для обработки распространения заголовка.Some languages, such as ASP.NET, may have methods for handling header propagation.

При отключении от кластера по умолчанию локальный Bridge to Kubernetes удалит все модули pod — представители и дублирующую службу.When you disconnect from your cluster, by default, Bridge to Kubernetes will remove all the envoy pods and the duplicate service.

Примечание

Развертывание и служба диспетчера маршрутизации будут продолжать работать в вашем пространстве имен.The routing manager deployment and service will remain running in your namespace. Чтобы удалить развертывание и службу, выполните следующие команды для пространства имен.To remove the deployment and service run the following commands for your namespace.

kubectl delete deployment routingmanager-deployment -n NAMESPACE
kubectl delete service routingmanager-service -n NAMESPACE

Диагностика и ведение журналаDiagnostics and logging

При использовании Bridge to Kubernetes для подключения к кластеру журналы диагностики из кластера записываются в каталог TEMP в папке Bridge to Kubernetes на компьютере разработки.When using Bridge to Kubernetes to connect to your cluster, diagnostic logs from your cluster are logged to your development computer's TEMP directory in the Bridge to Kubernetes folder.

Авторизация RBACRBAC authorization

Kubernetes предоставляет управление доступом на основе ролей (RBAC) для управления разрешениями пользователей и групп.Kubernetes provides Role-based Access Control (RBAC) to manage permissions for users and groups. Дополнительные сведения см. в документации Kubernetes. Вы можете настроить разрешения для кластера с поддержкой RBAC, создав YAML-файл и используя kubectl для его применения на кластере.For information, see the Kubernetes documentation You can set the permissions for an RBAC-enabled cluster by creating a YAML file and using kubectl to apply it to the cluster.

Чтобы задать разрешения на кластере, создайте или измените YAML-файл, например приведенный ниже permissions.yml, используя собственное пространство имен вместо <namespace> и субъекты (пользователи и группы), которым требуется доступ.To set permissions on the cluster, create or modify a YAML file such as permissions.yml like the following, using your own namespace for <namespace> and the subjects (users and groups) that need access.

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

Примените разрешения с помощью команды:Apply the permissions by using the command:

kubectl -n <namespace> apply -f <yaml file name>

ОграниченияLimitations

Bridge to Kubernetes имеет следующие ограничения:Bridge to Kubernetes has the following limitations:

  • Для успешного подключения с помощью функции Bridge to Kubernetes в модуле pod должен выполняться только один контейнер.A pod may only have a single container running in that pod for Bridge to Kubernetes to successfully connect.
  • В настоящее время модули pod для функции Bridge to Kubernetes должны быть контейнерами Linux.Currently, Bridge to Kubernetes pods must be Linux containers. Контейнеры Windows не поддерживаются.Windows containers are not supported.
  • Функции Bridge to Kubernetes требуется повышенный уровень разрешений на компьютере разработки для изменения файла hosts.Bridge to Kubernetes needs elevated permissions to run on your development computer in order to edit your hosts file.
  • Bridge to Kubernetes нельзя использовать в кластерах с включенной службой Azure Dev Spaces.Bridge to Kubernetes can't be used on clusters with Azure Dev Spaces enabled.

Bridge to Kubernetes и кластеры с включенной службой Azure Dev SpacesBridge to Kubernetes and clusters with Azure Dev Spaces enabled

Нельзя использовать Bridge to Kubernetes в кластерах с включенной службой Azure Dev Spaces.You can't use Bridge to Kubernetes on a cluster with Azure Dev Spaces enabled. Если вы хотите использовать Bridge to Kubernetes в кластере с включенной службой Azure Dev Spaces, необходимо отключить Azure Dev Spaces перед подключением к кластеру.If you would like to use Bridge to Kubernetes on a cluster with Azure Dev Spaces enabled, you must disable Azure Dev Spaces before connecting to your cluster.

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

Чтобы приступить к использованию функции Bridge to Kubernetes для подключения локального компьютера разработки к кластеру, обратитесь к статье Использование Bridge to Kubernetes.To get started using Bridge to Kubernetes to connect to your local development computer to your cluster, see Use Bridge to Kubernetes.