Jak działa Mostek na platformę KubernetesHow Bridge to Kubernetes works

Bridge to Kubernetes umożliwia uruchamianie i debugowanie kodu na komputerze dewelopera przy zachowaniu połączenia z klastrem Kubernetes z resztą aplikacji lub usług.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. Jeśli na przykład masz architekturę dużych mikrousług z wieloma współzależnościami usług i baz danych, replikowanie tych zależności na komputerze deweloperskim może być trudne.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. Ponadto tworzenie i wdrażanie kodu w klastrze Kubernetes dla każdej zmiany kodu podczas tworzenia pętli wewnętrznej może być powolne, czasochłonne i trudne do użycia z debugerem.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 uniknąć konieczności kompilowania i wdrażania kodu w klastrze przez utworzenie połączenia bezpośrednio między komputerem dewelopera a klastrem.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. Połączenie komputera dewelopera z klastrem podczas debugowania umożliwia szybkie testowanie i opracowywanie usługi w kontekście pełnej aplikacji bez konieczności tworzenia konfiguracji platformy Docker lub 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 przekierowuje ruch między połączonym klastrem Kubernetes i komputerem dewelopera.Bridge to Kubernetes redirects traffic between your connected Kubernetes cluster and your development computer. To przekierowywanie ruchu umożliwia kodowi na komputerze dewelopera i usługach uruchomionych w klastrze Kubernetes komunikowanie się tak, jakby były w tym samym klastrze 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 umożliwia również replikowanie zmiennych środowiskowych i zainstalowanych woluminów dostępnych dla zasobników w klastrze Kubernetes na komputerze deweloperskim.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. Zapewnienie dostępu do zmiennych środowiskowych i woluminów zainstalowanych na komputerze dewelopera umożliwia szybką pracę nad kodem bez konieczności ręcznego replikowania tych zależności.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.

Ostrzeżenie

Bridge to Kubernetes jest przeznaczony tylko do użytku w scenariuszach tworzenia i testowania.Bridge to Kubernetes is intended for use in development and testing scenarios only. Nie jest ona przeznaczona ani obsługiwana do użytku z klastrami produkcyjnymi ani usługami aktywnymi w aktywnym użyciu.It is not intended or supported for use with production clusters or live services in active use.

Informacje na temat obecnie obsługiwanych funkcji i przyszłego planu rozwoju Bridge to Kubernetes można znaleźć na stronie Bridge to Kubernetes mapy.Information about the currently supported features and a future roadmap for Bridge to Kubernetes may be found at Bridge to Kubernetes roadmap.

Korzystanie z Bridge to KubernetesUsing Bridge to Kubernetes

Aby korzystać z usługi Bridge to Kubernetes w programie Visual Studio, musisz mieć zainstalowany program Visual Studio 2019 w wersji 16.7 (wersja zapoznawcza 4 lub nowsza) uruchomiony w programie Windows 10 z zainstalowanym obciążeniem ASP.NET i tworzeniem aplikacji internetowych oraz zainstalowanym rozszerzeniem 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. Jeśli używasz usługi Bridge to Kubernetes do nawiązywania połączenia z klastrem Kubernetes, możesz przekierować cały ruch do i z istniejącego zasobnika w klastrze na komputer deweloperski.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.

Uwaga

Podczas Bridge to Kubernetes jest wyświetlany monit o nazwę usługi w celu przekierowania do komputera dewelopera.When using Bridge to Kubernetes, you are prompted for the name of the service to redirect to your development computer. Ta opcja jest wygodnym sposobem identyfikowania zasobnika do przekierowywania.This option is a convenient way to identify a pod for redirection. Całe przekierowanie między klastrem Kubernetes i komputerem deweloperskim jest dla zasobnika.All redirection between your Kubernetes cluster and your development computer is for a pod.

Po Bridge to Kubernetes nawiązania połączenia z klastrem:When Bridge to Kubernetes establishes a connection to your cluster, it:

  • Monituje o skonfigurowanie usługi do zastąpienia w klastrze, portu na komputerze dewelopera do użycia dla kodu oraz zadania uruchamiania kodu w ramach akcji razowej.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.
  • Zastępuje kontener w zasobniku w klastrze kontenerem agenta zdalnego, który przekierowuje ruch do komputera deweloperskiego.Replaces the container in the pod on the cluster with a remote agent container that redirects traffic to your development computer.
  • Uruchamia na komputerze dewelopera port-forward kubectl w celu przekazywania ruchu z komputera dewelopera do zdalnego agenta uruchomionego w klastrze.Runs kubectl port-forward on your development computer to forward traffic from your development computer to the remote agent running in your cluster.
  • Zbiera informacje o środowisku z klastra przy użyciu agenta zdalnego.Collects environment information from your cluster using the remote agent. Te informacje o środowisku obejmują zmienne środowiskowe, widoczne usługi, instalacji woluminów i instalacji tajnych.This environment information includes environment variables, visible services, volume mounts, and secret mounts.
  • Konfiguruje środowisko w programie Visual Studio aby usługa na komputerze dewelopera była w stanie uzyskać dostęp do tych samych zmiennych, jak gdyby była uruchomiona w klastrze.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.
  • Aktualizuje plik hosts w celu mapowania usług w klastrze na lokalne adresy IP na komputerze dewelopera.Updates your hosts file to map services on your cluster to local IP addresses on your development computer. Te wpisy pliku hostów umożliwiają kodowi uruchomionego na komputerze dewelopera tworzenie żądań do innych usług uruchomionych w klastrze.These hosts file entries allow code running on your development computer to make requests to other services running in your cluster. Aby zaktualizować plik hosts, Bridge to Kubernetes poprosi o dostęp administratora na komputerze dewelopera podczas nawiązywania połączenia z klastrem.To update your hosts file, Bridge to Kubernetes will ask for administrator access on your development computer when connecting to your cluster.
  • Rozpoczyna uruchamianie i debugowanie kodu na komputerze dewelopera.Starts running and debugging your code on your development computer. W razie potrzeby Bridge to Kubernetes porty na komputerze dewelopera przez zatrzymanie usług lub procesów, które obecnie z nich korzystają.If necessary, Bridge to Kubernetes will free required ports on your development computer by stopping services or processes that are currently using those ports.

Po nawiązaniu połączenia z klastrem można natywnie uruchamiać i debugować kod na komputerze bez konteneryzacji, a kod może bezpośrednio wchodzić w interakcje z resztą klastra.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. Każdy ruch sieciowy odbierany przez agenta zdalnego jest przekierowywany do portu lokalnego określonego podczas połączenia, dzięki czemu kod natywnie uruchomiony może akceptować i przetwarzać ten ruch.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. Zmienne środowiskowe, woluminy i wpisy tajne z klastra są udostępniane kodowi uruchomionemu na komputerze dewelopera.The environment variables, volumes, and secrets from your cluster are made available to code running on your development computer. Ponadto ze względu na wpisy pliku hostów i przekazywanie portów dodane do komputera dewelopera przez program Bridge to Kubernetes kod może wysyłać ruch sieciowy do usług uruchomionych w klastrze przy użyciu nazw usług z klastra, a ruch jest przesyłany dalej do usług uruchomionych w klastrze.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. Ruch jest przekierowywany między komputerem dewelopera a klastrem przez cały czas połączenia.Traffic is routed between your development computer and your cluster the entire time you're connected.

Ponadto program Bridge to Kubernetes sposób replikowania zmiennych środowiskowych i zainstalowanych plików dostępnych dla zasobników w klastrze na komputerze deweloperskim za pośrednictwem KubernetesLocalProcessConfig.yaml pliku .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. Ten plik umożliwia również tworzenie nowych zmiennych środowiskowych i instalacji woluminów.You can also use this file to create new environment variables and volume mounts.

Uwaga

Przez czas trwania połączenia z klastrem (plus dodatkowe 15 minut) program Bridge to Kubernetes proces o nazwie EndpointManager z uprawnieniami administratora na komputerze lokalnym.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.

Dodatkowa konfiguracja przy użyciu pliku KubernetesLocalProcessConfig.yamlAdditional configuration with KubernetesLocalProcessConfig.yaml

Plik KubernetesLocalProcessConfig.yaml umożliwia replikowanie zmiennych środowiskowych i zainstalowanych plików dostępnych dla zasobników w klastrze.The KubernetesLocalProcessConfig.yaml file allows you to replicate environment variables and mounted files available to your pods in your cluster. W przypadku Visual Studio tworzenia aplikacji Bridge to Kubernetes plik KubernetesLocalConfig.yaml musi znajdować się w tym samym katalogu co plik projektu dla usługi, która jest przekierowywana.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. Aby uzyskać więcej informacji na temat dodatkowych opcji konfiguracji, zobacz Konfigurowanie Bridge to Kubernetes.For more information on the additional configuration options, see Configure Bridge to Kubernetes.

Używanie możliwości routingu do opracowywania w izolacjiUsing routing capabilities for developing in isolation

Domyślnie program Bridge to Kubernetes cały ruch usługi do komputera dewelopera.By default, Bridge to Kubernetes redirects all traffic for a service to your development computer. Możesz również użyć możliwości routingu, aby przekierowywać tylko żądania do usługi pochodzące z poddomeny na komputer dewelopera.You also have the option to use routing capabilities to only redirect requests to a service originating from a subdomain to your development computer. Te możliwości routingu umożliwiają korzystanie z Bridge to Kubernetes w celu opracowywania w izolacji i uniknięcia zakłócania innego ruchu w klastrze.These routing capabilities allow you to use Bridge to Kubernetes to develop in isolation and avoid disrupting other traffic in your cluster.

Następująca animacja przedstawia dwóch deweloperów pracujących w tym samym klastrze w izolacji:The following animation shows two developers working on the same cluster in isolation:

Animowany obraz GIF ilustrujący izolację

Po włączeniu pracy w izolacji program Bridge to Kubernetes oprócz nawiązywania połączenia z klastrem Kubernetes:When you enable working in isolation, Bridge to Kubernetes does the following in addition to connecting to your Kubernetes cluster:

  • Sprawdza, czy klaster Kubernetes nie ma Azure Dev Spaces włączony.Verifies Kubernetes cluster does not have Azure Dev Spaces enabled.
  • Replikuje wybraną usługę w klastrze w tej samej przestrzeni nazw i dodaje etykietę routing.visualstudio.io/route-from=SERVICE_NAME i routing.visualstudio.io/route-on-header=kubernetes-route-as: GENERATED_NAME adnotacji.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.
  • Konfiguruje i uruchamia menedżera routingu w tej samej przestrzeni nazw w klastrze Kubernetes.Configures and starts the routing manager in the same namespace on the Kubernetes cluster. Menedżer routingu używa selektora etykiet do wyszukiwania etykiety routing.visualstudio.io/route-from=SERVICE_NAME i routing.visualstudio.io/route-on-header=kubernetes-route-as: GENERATED_NAME podczas konfigurowania routingu w przestrzeni nazw.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.

Jeśli Bridge to Kubernetes wykryje, Azure Dev Spaces jest włączona w klastrze Kubernetes, zostanie wyświetlony monit o wyłączenie usługi Azure Dev Spaces przed rozpoczęciem korzystania z 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.

Menedżer routingu podczas uruchamiania programu robi następujące czynności:The routing manager does the following when it starts up:

  • Duplikuje wszystkie ruchy wychodzące (w tym ruch przychodzący usługi równoważenia obciążenia) znalezione w przestrzeni nazw przy użyciu GENERATED_NAME dla poddomeny.Duplicates all ingresses (including load balancer ingresses) found in the namespace using the GENERATED_NAME for the subdomain.
  • Tworzy zasobnik envoy dla każdej usługi skojarzonej ze zduplikowanymi ruchami przychodzącymi GENERATED_NAME poddomeny.Creates an envoy pod for each service associated with duplicated ingresses with the GENERATED_NAME subdomain.
  • Tworzy dodatkowy zasobnik envoy dla usługi, nad która pracujesz w izolacji.Creates an additional envoy pod for the service you are working on in isolation. Dzięki temu żądania z poddomeną mogą być kierowane do komputera dewelopera.This allows requests with the subdomain to be routed to your development computer.
  • Konfiguruje reguły routingu dla każdego zasobnika envoy w celu obsługi routingu dla usług z poddomeną.Configures routing rules for each envoy pod to handle routing for services with the subdomain.

Na poniższym diagramie przedstawiono klaster Kubernetes przed Bridge to Kubernetes się z klastrem:The following diagram shows a Kubernetes cluster before Bridge to Kubernetes connects to your cluster:

Diagram przedstawiający klaster bez Bridge to Kubernetes

Na poniższym diagramie przedstawiono ten sam klaster z włączoną Bridge to Kubernetes w trybie izolacji.The following diagram shows the same cluster with Bridge to Kubernetes enabled in isolation mode. W tym miejscu możesz zobaczyć zduplikowaną usługę i zasobniki envoy, które obsługują routing w izolacji.Here, you can see the duplicate service and the envoy pods that support routing in isolation.

Diagram klastra z włączonymi Bridge to Kubernetes klastra

Gdy w klastrze zostanie odebrane GENERATED_NAME z poddomeną usługi , do żądania zostanie dodany nagłówek 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. Zasobniki envoy obsługują routing tego żądania do odpowiedniej usługi w klastrze.The envoy pods handle routing that request to the appropriate service in the cluster. Jeśli żądanie jest kierowane do usługi, nad która jest pracowana w izolacji, to żądanie jest przekierowywany do komputera dewelopera przez agenta zdalnego.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.

Gdy żądanie bez GENERATED_NAME podrzędnej zostanie odebrane w klastrze, do żądania nie zostanie dodany żaden nagłówek.When a request without the GENERATED_NAME subdomain is received on the cluster, no header is added to the request. Zasobniki envoy obsługują routing tego żądania do odpowiedniej usługi w klastrze.The envoy pods handle routing that request to the appropriate service in the cluster. Jeśli żądanie jest kierowane do usługi, która jest zastępowana, to żądanie jest zamiast tego kierowane do oryginalnej usługi, a nie do agenta zdalnego.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.

Ważne

Każda usługa w klastrze musi przesyłać dalej nagłówek kubernetes-route-as=GENERATED_NAME podczas tworzenia dodatkowych żądań.Each service on your cluster must forward the kubernetes-route-as=GENERATED_NAME header when making additional requests. Na przykład gdy usługa A odbiera żądanie, następnie wykonuje żądanie do usługi serviceB przed zwróceniem odpowiedzi.For example, when serviceA receives a request, it then makes a request to serviceB before return a response. W tym przykładzie usługa serviceA musi w swoim żądaniu do usługi B GENERATED_NAME nagłówek kubernetes-route-as=GENERATED_NAME . In this example, serviceA needs to forward the kubernetes-route-as=GENERATED_NAME header in its request to serviceB. Niektóre języki, takie jak ASP.NET, mogą mieć metody do obsługi propagacji nagłówka.Some languages, such as ASP.NET, may have methods for handling header propagation.

Po rozłączeniu z klastrem program Bridge to Kubernetes wszystkie zasobniki envoy i zduplikowaną usługę.When you disconnect from your cluster, by default, Bridge to Kubernetes will remove all the envoy pods and the duplicate service.

Uwaga

Wdrożenie i usługa menedżera routingu będą nadal działać w Przestrzeni nazw.The routing manager deployment and service will remain running in your namespace. Aby usunąć wdrożenie i usługę, uruchom następujące polecenia dla przestrzeni nazw.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

Diagnostyka i rejestrowanieDiagnostics and logging

W przypadku Bridge to Kubernetes z klastrem dzienniki diagnostyczne z klastra są rejestrowane w katalogu TEMP komputera dewelopera w folderze Bridge to Kubernetes aplikacji.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.

Autoryzacja RBACRBAC authorization

Platformę Kubernetes udostępnia oparte na rolach Access Control (RBAC) do zarządzania uprawnieniami użytkowników i grup.Kubernetes provides Role-based Access Control (RBAC) to manage permissions for users and groups. Aby uzyskać więcej informacji, zobacz dokumentację usługi Kubernetes. Aby ustawić uprawnienia dla klastra z włączoną obsługą kontroli RBAC, należy utworzyć plik YAML i użyć narzędzia , aby zastosować go kubectl do klastra.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.

Aby ustawić uprawnienia w klastrze, utwórz lub zmodyfikuj plik YAML, taki jak permissions.yml w następujący sposób, używając własnej przestrzeni nazw dla obiektów i (użytkowników i grup), które <namespace> wymagają dostępu.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

Zastosuj uprawnienia za pomocą polecenia :Apply the permissions by using the command:

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

OgraniczeniaLimitations

Bridge to Kubernetes ma następujące ograniczenia:Bridge to Kubernetes has the following limitations:

  • Zasobnik może mieć tylko jeden kontener uruchomiony w tym zasobniku, aby Bridge to Kubernetes pomyślnie nawiązać połączenie.A pod may only have a single container running in that pod for Bridge to Kubernetes to successfully connect.
  • Obecnie Bridge to Kubernetes muszą być kontenerami systemu Linux.Currently, Bridge to Kubernetes pods must be Linux containers. Kontenery systemu Windows nie są obsługiwane.Windows containers are not supported.
  • Bridge to Kubernetes uprawnień do uruchamiania na komputerze dewelopera w celu edytowania pliku hosts.Bridge to Kubernetes needs elevated permissions to run on your development computer in order to edit your hosts file.
  • Bridge to Kubernetes nie można używać w klastrach z włączoną Azure Dev Spaces klastra.Bridge to Kubernetes can't be used on clusters with Azure Dev Spaces enabled.

Bridge to Kubernetes klastry z włączonymi Azure Dev Spaces klastramiBridge to Kubernetes and clusters with Azure Dev Spaces enabled

Nie można używać funkcji Bridge to Kubernetes w klastrze z włączoną Azure Dev Spaces klastra.You can't use Bridge to Kubernetes on a cluster with Azure Dev Spaces enabled. Jeśli chcesz używać funkcji Bridge to Kubernetes w klastrze z włączoną Azure Dev Spaces, musisz wyłączyć Azure Dev Spaces przed nawiązaniem połączenia z klastrem.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.

Następne krokiNext steps

Aby rozpocząć nawiązywanie połączenia Bridge to Kubernetes lokalnym komputerem dewelopera z klastrem za pomocą usługi 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.