Como funciona o Bridge to Kubernetes
Observação
Bridge to Kubernetes será aposentado em 30 de abril de 2025. Para obter detalhes sobre a descontinuação e as soluções open-source, consulte a questão do GitHub .
Bridge to Kubernetes é uma ferramenta de desenvolvimento iterativa para a criação de aplicativos de microsserviço destinados ao Kubernetes. A extensão Bridge to Kubernetes está disponível para Visual Studio e Visual Studio Code (VS Code).
O Bridge to Kubernetes permite que você execute e depure código em seu computador de desenvolvimento. Esse computador ainda está conectado ao cluster do Kubernetes com o restante do aplicativo ou serviços. Se você tiver uma grande arquitetura de microsserviços com muitos serviços e bancos de dados interdependentes, replicar essas dependências em seu computador de desenvolvimento pode ser difícil. Criar e implantar código em seu cluster Kubernetes para cada alteração de código pode ser lento, demorado e difícil.
O Bridge to Kubernetes cria uma conexão entre o computador de desenvolvimento e o cluster. Essa abordagem evita a necessidade de criar e implantar seu código no cluster. Você pode testar e desenvolver seu serviço no contexto, conectado ao cluster. Essa abordagem permite depurar sem criar mais nenhuma configuração do Docker ou do Kubernetes.
O Bridge to Kubernetes redireciona o tráfego entre o cluster Kubernetes conectado e o computador de desenvolvimento. O código local e os serviços no cluster do Kubernetes podem se comunicar como se estivessem no mesmo cluster do Kubernetes.
O Bridge to Kubernetes permite replicar variáveis de ambiente e volumes montados no cluster do Kubernetes para o computador de desenvolvimento. O acesso a variáveis de ambiente e volumes montados permite que você trabalhe em seu código sem ter que replicar essas dependências.
Requerimentos
Observação
O Bridge to Kubernetes não funciona com clusters Kubernetes do Docker for Desktop. Para usar o Bridge to Kubernetes, você precisa de uma das seguintes configurações:
- O VS Code com a extensão Bridge to Kubernetes instalada.
- Visual Studio 2019 versão 16.7 ou posterior em execução no Windows 10 ou posterior. Certifique-se de que o workload ASP.NET e Desenvolvimento da Web esteja instalado. Instale a extensão Bridge to Kubernetes .
Você pode usar o Bridge to Kubernetes para estabelecer uma conexão com seu cluster Kubernetes. Essa conexão redireciona o tráfego de e para um pod existente no cluster para o computador de desenvolvimento.
Observação
Ao usar o Bridge to Kubernetes, você será solicitado a fornecer o nome do serviço a ser redirecionado para o computador de desenvolvimento. Esta opção é uma maneira conveniente de identificar um pod para redirecionamento. Todo o redirecionamento entre seu cluster Kubernetes e seu computador de desenvolvimento é para um pod. Para obter mais informações, consulte Disponibilizar um serviço.
No VS Code, o Bridge to Kubernetes suporta todos os idiomas, desde que você possa executá-los localmente. No Visual Studio, o Bridge to Kubernetes oferece suporte ao .NET Core. Bridge to Kubernetes não é compatível com o .NET Framework no Visual Studio porque requer suporte a nodos do Windows.
Atenção
O Bridge to Kubernetes destina-se ao uso apenas em cenários de desenvolvimento e teste. Não se destina nem tem suporte para uso com clusters de produção ou serviços ativos em uso ativo.
Para conhecer os recursos atuais e os planos futuros, consulte o roteiro do Bridge to Kubernetes.
Estabelecer uma ligação
Quando o Bridge to Kubernetes estabelece uma conexão com seu cluster, ele executa as seguintes ações:
- Solicita que você configure o serviço a ser substituído no cluster, a porta no computador de desenvolvimento a ser usada para o código e a tarefa de inicialização do código como uma ação única.
- Substitui o contêiner no pod no cluster por um contêiner de agente remoto que redireciona o tráfego para o computador de desenvolvimento.
- Executa o comando kubectl port-forward no computador de desenvolvimento para reencaminhar o tráfego do computador de desenvolvimento para o agente remoto em execução no cluster.
- Coleta informações de ambiente do cluster usando o agente remoto. Essas informações de ambiente incluem variáveis de ambiente, serviços visíveis, montagens de volume e montagens secretas.
- Configura o ambiente no Visual Studio para que o serviço em seu computador de desenvolvimento possa acessar as mesmas variáveis como se estivesse sendo executado no cluster.
- Atualiza o ficheiro hosts para associar os serviços do seu cluster aos endereços IP locais no seu computador de desenvolvimento. Esses hospedeiros entradas de ficheiro permitem que o código em execução no computador de desenvolvimento faça pedidos a outros serviços em execução no seu cluster. Para atualizar seus hospeda arquivo, o Bridge to Kubernetes precisa de acesso de administrador em seu computador de desenvolvimento.
- Começa a executar e depurar seu código no computador de desenvolvimento. Se necessário, o Bridge to Kubernetes libera as portas necessárias em seu computador de desenvolvimento interrompendo serviços ou processos que estão usando essas portas no momento.
Usando o Bridge para o Kubernetes
Depois de estabelecer uma conexão com o cluster, execute e depure o código nativamente no computador, sem conteinerização. O código interage com o cluster. Qualquer tráfego de rede recebido pelo agente remoto é redirecionado para a porta local especificada durante a conexão. Seu código em execução nativa pode aceitar e processar esse tráfego. As variáveis de ambiente, volumes e segredos do cluster estão disponíveis para o código em execução no seu computador de desenvolvimento.
O Bridge to Kubernetes adiciona hosts entradas de arquivo e encaminhamento de porta para o computador do desenvolvedor. Seu código pode enviar tráfego de rede para serviços em execução no cluster usando os nomes de serviço do cluster. Esse tráfego é encaminhado para os serviços que estão sendo executados no cluster. O tráfego é roteado entre o computador de desenvolvimento e o cluster durante todo o tempo em que você estiver conectado.
Além disso, o Bridge to Kubernetes fornece uma maneira de replicar variáveis de ambiente e arquivos montados disponíveis para pods em seu cluster em seu computador de desenvolvimento através do arquivo KubernetesLocalProcessConfig.yaml
. Você também pode usar esse arquivo para criar novas variáveis de ambiente e montagens de volume.
Observação
Durante a conexão com o cluster, mais 15 minutos, o Bridge to Kubernetes executa um processo chamado EndpointManager com permissões de administrador em seu computador local.
Você pode depurar em paralelo, com vários serviços. Inicie tantas instâncias do Visual Studio quantos os serviços que pretendas depurar. Certifique-se de que seus serviços ouvem em diferentes portas localmente. Configure-os e depure-os separadamente. O isolamento não é suportado neste cenário.
Configuração adicional
O ficheiro KubernetesLocalProcessConfig.yaml permite replicar variáveis de ambiente e ficheiros montados disponíveis para os pods no seu cluster. Quando se utiliza o Visual Studio, o ficheiro KubernetesLocalConfig.yaml deve estar na mesma pasta que o ficheiro de projeto do serviço. Para obter mais informações, consulte Configurar Bridge to Kubernetes.
Usando capacidades de roteamento para desenvolvimento em isolamento
Por padrão, o Bridge to Kubernetes redireciona todo o tráfego de um serviço para o computador de desenvolvimento. Em vez disso, você pode usar os recursos de roteamento para redirecionar somente solicitações de um subdomínio para o computador de desenvolvimento. Esses recursos de roteamento permitem que você use o Bridge to Kubernetes para desenvolver isoladamente e evitar interromper outro tráfego em seu cluster.
A animação a seguir mostra dois desenvolvedores trabalhando no mesmo cluster isoladamente:
Quando você habilita o trabalho isolado, o Bridge to Kubernetes executa as seguintes ações, além de se conectar ao cluster do Kubernetes:
- Verifica se o cluster do Kubernetes não tem os Espaços de Desenvolvimento do Azure habilitados.
- Replica o serviço escolhido no cluster no mesmo namespace e adiciona um rótulo routing.visualstudio.io/route-from=SERVICE_NAME e uma anotação routing.visualstudio.io/route-on-header=kubernetes-route-as=GENERATED_NAME.
- Configura e inicia o gerenciador de roteamento no mesmo namespace no cluster Kubernetes. O gerenciador de roteamento usa um seletor de rótulo para procurar o rótulo routing.visualstudio.io/route-from=SERVICE_NAME e a anotação routing.visualstudio.io/route-on-header=kubernetes-route-as=GENERATED_NAME ao configurar o roteamento em seu namespace.
Observação
O Bridge to Kubernetes verifica se o Azure Dev Spaces está habilitado em seu cluster Kubernetes. Ele solicita que você desabilite os Espaços de Desenvolvimento do Azure antes de poder usar o Bridge to Kubernetes.
O gerenciador de roteamento executa as seguintes ações quando é iniciado:
- Duplica todas as entradas, incluindo as entradas do balanceador de carga, encontradas no namespace usando o GENERATED_NAME para o subdomínio.
- Cria um pod de enviado para cada serviço associado a entradas duplicadas com o subdomínio GENERATED_NAME.
- Cria outro pod de envoy para o serviço em que estás a trabalhar de forma isolada. Essa configuração permite que as solicitações com o subdomínio sejam roteadas para o computador de desenvolvimento.
- Configura regras de roteamento para cada pod Envoy, a fim de gerir o roteamento de serviços com um subdomínio.
O diagrama a seguir mostra um cluster do Kubernetes antes que o Bridge to Kubernetes se conecte ao cluster:
O diagrama a seguir mostra o mesmo cluster com o Bridge to Kubernetes habilitado no modo de isolamento. Aqui, pode ver o serviço duplicado e os pods Envoy que suportam o roteamento de forma isolada.
Quando o cluster recebe uma solicitação com o subdomínio GENERATED_NAME, ele adiciona um cabeçalho kubernetes-route-as=GENERATED_NAME à solicitação. Os pods de envio lidam com o roteamento dessa solicitação para o serviço apropriado no cluster. Para uma solicitação para o serviço que está a ser trabalhado isoladamente, o cluster redireciona a solicitação para o computador de desenvolvimento através do agente remoto.
Quando o cluster recebe uma solicitação sem o subdomínio GENERATED_NAME, ele não adiciona um cabeçalho à solicitação. Os pods de envio lidam com o roteamento dessa solicitação para o serviço apropriado no cluster. Para uma solicitação para o serviço que está sendo substituído, os pods a encaminham para o serviço original em vez do agente remoto.
Importante
Cada serviço em seu cluster deve encaminhar o cabeçalho kubernetes-route-as=GENERATED_NAME ao fazer solicitações adicionais. Por exemplo, quando serviceA recebe uma solicitação, ele faz uma solicitação para serviceB antes de retornar uma resposta. Neste exemplo, serviceA precisa encaminhar o cabeçalho kubernetes-route-as=GENERATED_NAME em sua solicitação para serviceB. Alguns idiomas, como ASP.NET, podem ter métodos para manipular a propagação de cabeçalho.
Ao desligar-se do cluster, por padrão, o Bridge to Kubernetes remove todos os pods do Envoy e o serviço duplicado.
Observação
A implantação e o serviço do gerenciador de roteamento permanecem em execução em seu namespace. Para remover a implantação e o serviço, execute os seguintes comandos para seu namespace.
kubectl delete deployment routingmanager-deployment -n NAMESPACE
kubectl delete service routingmanager-service -n NAMESPACE
Diagnóstico e registo de logs
Ao usar o Bridge to Kubernetes para se conectar ao cluster, o computador registra diagnósticos. Armazena-os no diretório TEMP do seu computador de desenvolvimento na pasta Bridge to Kubernetes.
Autorização RBAC do Kubernetes
O Kubernetes fornece Controlo de Acesso Baseado em Funções (RBAC) para gerir permissões para utilizadores e grupos. Para obter informações, consulte a documentação do Kubernetes. Você pode definir as permissões para um cluster habilitado para RBAC criando um arquivo YAML e usando kubectl
para aplicá-lo ao cluster.
Para definir permissões no cluster, crie ou modifique um arquivo YAML como permissions.yml. Use seu namespace para <namespace>
e os usuários e grupos que precisam de acesso.
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
Aplique as permissões usando o seguinte comando:
kubectl -n <namespace> apply -f <yaml file name>
Limitações
O Bridge to Kubernetes tem as seguintes limitações:
- Um pod pode ter apenas um único contêiner em execução nesse pod para que o Bridge to Kubernetes se conecte com êxito.
- Atualmente, os pods do Bridge to Kubernetes devem ser contêineres Linux. Não há suporte para contêineres do Windows.
- O Bridge to Kubernetes precisa de permissões elevadas para ser executado em seu computador de desenvolvimento para editar seu arquivo hosts.
- O Bridge to Kubernetes não pode ser usado em clusters com os Espaços de Desenvolvimento do Azure habilitados.
Próximos passos
Para começar a utilizar o Bridge to Kubernetes para ligar o seu computador de desenvolvimento local ao cluster, consulte Usar o Bridge to Kubernetes (VS) ou Usar o Bridge to Kubernetes (VS Code).