Rotas e domínios

Algumas apps são úteis sem serem acessíveis fora do cluster, mas a maioria tem de estar disponível fora do cluster num ou mais pontos finais HTTP. Em Kf, esta é a função dos trajetos.

Por predefinição, cada app é acessível a outros processos no cluster através do endereço da app interno do cluster: app-name.space-name. Pode usar este endereço quando implementar uma ou mais apps num cluster que precisam de comunicar entre si. Permitem que o tráfego vá diretamente de uma app para outra, em vez de sair do cluster e voltar a entrar. Isto torna as comunicações mais seguras, rápidas e garante a utilização do serviço no cluster local.

Se a sua app precisar de ser acessível a partir do exterior do cluster, tem de criar rotas para a mesma.

O domínio interno do cluster

O domínio interno do cluster para cada app tem algumas caraterísticas especiais.

  • A sua utilização nas apps permite o planeamento de rotas Este-Oeste (ponto a ponto).
  • O tráfego enviado para o mesmo é equilibrado entre os pods de apps em execução.
  • Pode estabelecer ligação a pontos finais não HTTP através do domínio interno.

As rotas permitem-lhe criar URLs personalizados além do domínio interno do cluster.

Balanceamento de carga de apps

O tráfego é encaminhado pelo Istio para instâncias íntegras de uma app através de uma política de round-robin. Atualmente, não é possível alterar esta política.

Capacidades de planeamento de trajetos

As rotas indicam à entrada do cluster onde entregar o tráfego e o que fazer se não estiverem disponíveis apps no endereço indicado. Por predefinição, se não estiver disponível nenhuma app numa rota e a rota receber um pedido, devolve um código de estado HTTP 503.

As rotas são compostas por três partes: anfitrião, domínio e caminho. Por exemplo, no URI payroll.mydatacenter.example.com/login:

  • O anfitrião é payroll
  • O domínio é mydatacenter.example.com
  • O caminho é /login

As rotas têm de conter um anfitrião e um domínio, mas o caminho é opcional. Várias rotas podem partilhar o mesmo anfitrião e domínio se especificarem caminhos diferentes. Várias apps podem partilhar o mesmo trajeto e o tráfego é dividido entre elas. Isto é útil se precisar de suportar implementações azul/verde antigas. Se várias apps estiverem associadas a caminhos diferentes, a prioridade é do caminho mais longo para o mais curto.

Usar trajetos

As secções seguintes descrevem como usar a CLI kf para gerir rotas.

Apresentar trajetos

Os programadores podem listar as rotas do espaço atual através do 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 programadores podem criar rotas através do 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 de criar uma rota, se não estiverem associadas apps à mesma, é devolvido um código de estado HTTP 503 para quaisquer pedidos correspondentes.

Mapeie um trajeto para a sua app

Os programadores podem tornar a respetiva app acessível numa rota através do comando kf map-route.

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

Desassocie um trajeto

Os programadores podem remover a respetiva app do acesso numa rota através do comando kf unmap-route.

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

Elimine um caminho

Os programadores podem eliminar uma rota através do comando kf delete-route.

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

A eliminação de uma rota impede que o tráfego seja encaminhado para todas as apps que estão a ouvir na rota.

Rotas declarativas no manifesto da app

As rotas podem ser geridas de forma declarativa no ficheiro de manifesto da app. São criados se ainda não existirem.

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

Pode ler mais acerca das propriedades de rotas suportadas na documentação do manifesto.

Tópicos avançados

CRDs de encaminhamento

Existem quatro tipos relevantes para o encaminhamento:

  • VirtualService
  • Rota
  • Serviço
  • App

Cada app tem um serviço, que é um nome abstrato atribuído a todas as instâncias em execução da sua app. O nome do serviço é o mesmo que o da app. Uma rota representa um único URL externo. As rotas monitorizam constantemente as alterações às apps. Quando uma app pede para ser adicionada a uma rota, a rota atualiza a respetiva lista de apps e, em seguida, o VirtualService. Um VirtualService representa um único domínio e une uma lista de todas as rotas num espaço que pertencem a esse domínio.

O Istio lê a configuração nos VirtualServices para determinar como encaminhar o tráfego.