Alguns aplicativos são úteis mesmo sem o acesso fora do cluster, mas a maioria deles precisa estar disponível fora do cluster em um ou mais endpoints HTTP. No Kf, esse é o trabalho das rotas.
Por padrão, cada aplicativo pode ser acessado por outros processos no cluster pelo
respectivo endereço interno: app-name.space-name. É possível usar esse endereço
ao implantar um ou mais aplicativos em um cluster que precisam se comunicar entre si.
Com isso, o tráfego pode transitar diretamente de um aplicativo para outro em vez de sair
do cluster e voltar. Isso torna as comunicações mais seguras e
rápidas e garante o uso do serviço no cluster local.
Se for preciso manter o aplicativo acessível fora do cluster, crie rotas para ele.
O domínio interno do cluster
O domínio interno do cluster para cada aplicativo tem algumas características especiais.
- O uso dele nos aplicativos permite o roteamento leste-oeste (ponto a ponto).
- O tráfego enviado para ele é balanceado entre os pods do aplicativo em execução.
- Você pode se conectar a endpoints não HTTP usando o domínio interno.
As rotas permitem criar URLs curtos personalizados para o domínio interno do cluster.
Balanceamento de carga de aplicativos
O tráfego é encaminhado pelo Istio para instâncias íntegras de um aplicativo usando uma política round-robin. No momento, não é possível alterar essa política.
Recursos de rota
As rotas informam ao gateway de entrada do cluster para onde enviar o tráfego e o que fazer se nenhum aplicativo estiver disponível no endereço especificado. Por padrão, quando nenhum aplicativo está disponível em uma rota e ela recebe uma solicitação, um código de status HTTP 503 é retornado.
As rotas são compostas por três partes: host, domínio e caminho. Por exemplo,
no URI payroll.mydatacenter.example.com/login:
- O host é
payroll. - O domínio é
mydatacenter.example.com. - O caminho é
/login.
As rotas precisam conter um host e um domínio, mas o caminho é opcional. Várias rotas podem compartilhar o mesmo host e o mesmo domínio, mesmo que especifiquem caminhos diferentes. Vários aplicativos podem compartilhar a mesma rota, e o tráfego é dividido entre eles. Isso é útil quando você precisa permitir implantações azul-verde legadas. Se vários aplicativos estiverem vinculados a caminhos diferentes, a prioridade será do caminho mais longo para o mais curto.
Como usar rotas
As seções a seguir descrevem como usar a CLI do kf para gerenciar rotas.
Listar rotas
Os desenvolvedores podem listar rotas para o espaço atual usando o
comando kf routes.
$ kf routes
Getting Routes in Space: my-space
Found 2 Routes in Space my-space
HOST DOMAIN PATH APPS
echo example.com / echo
* example.com /login uaa
Criar trajeto
Os desenvolvedores podem criar rotas usando o comando kf create-route.
# Create a Route in the targeted Space to match traffic for myapp.example.com/*
$ kf create-route example.com --hostname myapp
# Create a Route in the Space myspace to match traffic for myapp.example.com/*
$ kf create-route -n myspace example.com --hostname myapp
# Create a Route in the targeted Space to match traffic for myapp.example.com/mypath*
$ kf create-route example.com --hostname myapp --path /mypath
# You can also supply the Space name as the first parameter if you have
# scripts that rely on the old cf style API.
$ kf create-route myspace example.com --hostname myapp # myapp.example.com
Depois que uma rota é criada, se nenhum aplicativo estiver vinculado a ela, um código de status HTTP 503 será retornado para todas as solicitações correspondentes.
Associar uma rota para um app
Os desenvolvedores podem tornar um app acessível em uma rota usando o
comando kf map-route.
$ kf map-route MYAPP mycluster.example.com --host myapp --path mypath
Remover o mapeamento de uma rota
Os desenvolvedores podem impedir que o aplicativo seja acessível em uma rota usando o comando kf
unmap-route.
$ kf unmap-route MYAPP mycluster.example.com --host myapp --path mypath
Excluir uma rota
Os desenvolvedores podem excluir uma rota usando o comando kf delete-route.
$ kf delete-route mycluster.example.com --host myapp --path mypath
Ao excluir uma rota, não é mais possível rotear o tráfego para os apps que fazem detecções nela.
Rotas declarativas no manifesto do app
As rotas podem ser gerenciadas declarativamente no arquivo de manifesto do app. Elas serão criadas se ainda não existirem.
---
applications:
- name: my-app
# ...
routes:
- route: example.com
- route: www.example.com/path
Saiba mais sobre as propriedades de rota disponíveis na documentação do manifesto.
Tópicos avançados
CRDs de roteamento
Há quatro tipos relevantes para o roteamento:
- Serviço virtual
- Rota
- Serviço
- Aplicativo
Cada aplicativo tem um serviço, que é um nome abstrato atribuído a todas as instâncias do aplicativo em execução. O nome do serviço é igual ao do aplicativo. Uma rota representa um único URL externo. As rotas monitoram constantemente as alterações nos aplicativos. Quando um aplicativo solicita a adição a uma rota, a rota atualiza a lista de aplicativos e o VirtualService. Um serviço virtual representa um único domínio e mescla uma lista de todas as rotas em um espaço que pertence a esse domínio.
O Istio lê a configuração nos serviços virtuais para determinar como rotear o tráfego.