Rotas e domínios

Este tópico descreve como as rotas e os domínios funcionam no Kf, e como os desenvolvedores e administradores configuram as rotas e os domínios para um aplicativo implantado no cluster do Kf.

É necessário criar domínios e rotas para conceder acesso externo ao aplicativo.

Roteamento interno

Os apps do Kf em um cluster podem se comunicar internamente entre si de maneira direta usando a rede mesh do Cloud Service Mesh sem sair da rede do cluster. Por padrão, todo o tráfego é criptografado usando TLS mútuo.

Todos os apps implantados no cluster do Kf são fornecidos com um endpoint interno configurado por padrão. Você pode usar o endereço app-name.space-name.svc.cluster.local para comunicação interna entre apps. Para usar esse endereço interno, não é preciso fazer mais nada. O TLS mútuo é ativado por padrão para rotas internas. Esse endereço interno só pode ser acessado pelos pods que executam os aplicativos e não por fora do cluster.

Balanceamento de carga de apps

O tráfego é encaminhado pelo Istio para instâncias íntegras de um app usando a 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 app estiver disponível no endereço especificado. Por padrão, quando nenhum app 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 domínio, mas o host e o caminho são opcionais. Várias rotas podem compartilhar o mesmo host e o mesmo domínio, mesmo que especifiquem caminhos diferentes. Vários apps 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 apps 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 rotas

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 app estiver vinculado a ela, um código de status HTTP 503 será retornado para todas as solicitações correspondentes.

Mapear 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 um app 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
  • App

Cada app tem um serviço, que é um nome abstrato atribuído a todas as instâncias em execução dele. O nome do serviço é igual ao nome do app. Uma rota representa um único URL externo. As rotas monitoram constantemente as alterações nos apps. Quando um app solicita a adição a uma rota, ela atualiza a lista de apps e o serviço virtual. 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.