Rotas e domínios

Alguns aplicativos são úteis sem serem acessíveis fora do cluster, mas a maioria precisa estar disponível fora do cluster em um ou mais endpoints HTTP. No Kf, esse é o trabalho de rotas.

Por padrão, cada aplicativo pode ser acessado por outros processos no cluster usando o endereço interno do aplicativo: app-name.space-name. Você pode usar esse endereço ao implantar um ou mais aplicativos em um cluster que precisam se comunicar entre si. Eles permitem que o tráfego vá diretamente de um aplicativo para outro em vez de sair do cluster e voltar. Isso torna as comunicações mais seguras, rápidas e garantidas para usar o serviço no cluster local.

Se seu app precisar estar acessível fora do cluster, você precisará criar 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 seus aplicativos permite o roteamento leste-oeste (ponto a ponto).
  • O tráfego enviado para ele é balanceado entre a execução de pods de aplicativo.
  • Você pode se conectar a endpoint não HTTP usando o domínio interno.

As rotas permitem criar URLs curtos personalizados sobre 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 a política round-robin. Atualmente, não é possível alterar essa política.

Recursos de rota

As rotas informam ao gateway de entrada do cluster aonde enviar o tráfego e o que fazer se nenhum aplicativo estiver disponível no endereço especificado. Por padrão, se nenhum aplicativo estiver disponível em uma rota e a rota receber uma solicitação, ele retornará um código de status HTTP 503.

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 domínio se especificarem caminhos diferentes. Vários apps podem compartilhar o mesmo trajeto e o tráfego será dividido entre eles. Isso é útil se você precisa oferecer suporte a implantações legadas em azul-verde. Se vários aplicativos estiverem vinculados a caminhos diferentes, a prioridade será mais longa para o caminho mais curto.

Como usar rotas

As seções a seguir descrevem como usar a CLI 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 rota

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.

Mapear uma rota para o aplicativo

Os desenvolvedores podem tornar o aplicativo acessível em uma rota usando o comando kf map-route.

$ kf map-route MYAPP mycluster.example.com --host myapp --path mypath

Remover mapa de uma rota

Os desenvolvedores podem impedir que o 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

A exclusão de um trajeto impedirá que o tráfego seja roteado para todos os aplicativos que escutam na rota.

Rotas declarativas no manifesto do app

As rotas podem ser gerenciadas declarativamente no arquivo de manifesto do aplicativo. Elas serão criadas se ainda não existirem.

---
applications:
- name: my-app
  # ...
  routes:
  - route: example.com
  - route: www.example.com/path

Leia mais sobre as propriedades de rota compatíveis na documentação do manifesto.

Tópicos avançados

CRDs de roteamento

Há quatro tipos relevantes para o roteamento:

  • VirtualService
  • Rota
  • Serviço
  • App

Cada aplicativo tem um serviço, que é um nome resumo atribuído a todas as instâncias em execução do aplicativo. O nome do serviço é o mesmo 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 VirtualService 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 em VirtualServices para determinar como rotear o tráfego.