Como configurar um domínio personalizado

Todos os aplicativos Kf que disponibilizam tráfego HTTP para usuários ou aplicativos fora do cluster precisam estar associados a um nome de domínio.

O Kf tem três locais onde os domínios podem ser configurados. Ordenado por precedência, eles são:

  1. Apps
  2. Spaces
  3. O ConfigMap config-defaults no namespace kf

O ConfigMap config-defaults

O ConfigMap config-defaults contém configurações de todo o cluster para Kf e pode ser editado pelos administradores do cluster. Os valores no ConfigMap são lidos pelo controlador dos espaços e modificam a configuração deles. Os valores de domínio são refletidos no campo status.networkConfig.domains do espaço.

Para modificar o domínio do cluster do Kf, edite o ConfigMap config-defaults no namespace kf:

kubectl edit configmap config-defaults -n kf

Adicione ou atualize a entrada da chave spaceClusterDomain da seguinte maneira:

spaceClusterDomain: my-domain.com

Para confirmar se a configuração foi atualizada corretamente, verifique o valor do domínio em um espaço:

kf space SPACE_NAME -o "jsonpath={.status.networkConfig.domains[]['domain']}"

A saída será semelhante a:

Getting Space some-space
some-space.my-domain.com

Cada espaço prefixa os domínios do cluster com o próprio nome. Isso evita conflitos entre aplicativos.

Domínios de espaço

Os espaços são o local autoritativo da configuração do domínio. Você pode atribuir domínios e subdomínios a cada espaço para os desenvolvedores usarem. O campo para configurar domínios é spec.networkConfig.domains.

Use kf space para ver os domínios atribuídos a um espaço:

kf space SPACE_NAME

Na saída, o campo Spec contém uma configuração específica para o Space, e o campo Status reflete a configuração do Space com padrões em todo o cluster anexados ao final:

...
Spec:
  Network Config:
    Domains:
      Domain: my-space.mycompany.com
...
Status:
  Network Config:
    Domains:
      Domain: my-space.mycompany.com
      Domain: my-space.prod.us-east1.kf.mycompany.com

Configuração com a CLI

A CLI kf aceita mutações em domínios do Space: Cada comando gera uma diferença entre a configuração antiga e a nova.

Adicione um novo domínio com kf configure-space append-domain:

kf configure-space append-domain SPACE_NAME myspace.mycompany.com

Adicione ou torne um domínio atual o padrão com kf configure-space set-default-domain:

kf configure-space set-default-domain SPACE_NAME myspace.mycompany.com

Por fim, remova um domínio:

kf configure-space remove-domain SPACE_NAME myspace.mycompany.com

Apps

Os aplicativos podem especificar domínios como parte da configuração. As rotas são mapeadas para o aplicativo durante kf push usando a seguinte lógica:

let current_routes  = The set of routes already on the app
let manifest_routes = The set of routes defined by the manifest
let flag_routes     = The set of routes supplied by the --route flag(s)
let no_route        = Whether the manifest has no-route:true or --no-route is set
let random_route    = Whether the manifest has random-route:true or --random-route is set

let new_routes = Union(current_routes, manifest_routes, flag_routes)

if new_routes.IsEmpty() then
  if random_route then
    new_routes.Add(CreateRandomRoute())
  else
    new_routes.Add(CreateDefaultRoute())
  end
end

if no_route then
  new_routes.RemoveAll()
end

return new_routes

Se um aplicativo não especificar uma rota ou solicitar uma rota aleatória, o primeiro domínio no espaço será usado. Se o primeiro domínio em um espaço mudar, todos os aplicativos no espaço que usam o domínio padrão serão atualizados para refletir isso.

Modelos do domínio

O Kf é compatível com a substituição de variáveis em domínios. A substituição permite que um único domínio de cluster seja personalizado por espaço e reaja às alterações no IP de entrada. A substituição é realizada em variáveis com a sintaxe $(VARIABLE_NAME) que ocorrem em um domínio.

Variável Descrição
CLUSTER_INGRESS_IP O endereço IPV4 da entrada do cluster.
SPACE_NAME O nome do espaço.

Exemplos

Os exemplos a seguir demonstram como as variáveis de domínio podem ser usadas para dar suporte a várias estruturas organizacionais e padrões de cluster diferentes.

  • Usar um serviço de DNS curinga, como o nip.io:

    $(SPACE_NAME).$(CLUSTER_INGRESS_IP).nip.io
    
  • O domínio para uma organização com DNS gerenciado centralmente:

    $(SPACE_NAME).cluster-name.example.com
    
  • O domínio para equipes que gerenciam o próprio DNS:

    cluster-name.$(SPACE_NAME).example.com
    
  • Domínio para um cluster com failover morno e disjuntor externo:

    $(SPACE_NAME)-failover.cluster-name.example.com
    

Diferenças entre Kf e CF

  • Os Kf Spaces prefixam o domínio de todo o cluster com o nome do espaço.
  • O Kf não verifica conflitos de domínio em rotas especificadas pelo usuário.