Configurazione di un dominio personalizzato

Tutte le app Kf che gestiscono il traffico HTTP verso utenti o applicazioni all'esterno del cluster devono essere associate a un nome di dominio.

Kf ha tre posizioni in cui è possibile configurare i domini. In ordine di precedenza, sono:

  1. App
  2. Spazi
  3. Il ConfigMap config-defaults nello spazio dei nomi kf

ConfigMap config-defaults

Il ConfigMap config-defaults contiene le impostazioni a livello di cluster per Kf e può essere modificato dagli amministratori del cluster. I valori nel ConfigMap vengono letti dal controller Spazi e ne modificano la configurazione. I valori del dominio sono riportati nel campo status.networkConfig.domains dello spazio.

Per modificare il dominio del cluster Kf, modifica il ConfigMap config-defaults nello spazio dei nomi kf:

kubectl edit configmap config-defaults -n kf

Aggiungi o aggiorna la voce per la chiave spaceClusterDomain nel seguente modo:

spaceClusterDomain: my-domain.com

Per verificare che la configurazione sia stata aggiornata correttamente, controlla il valore del dominio in uno spazio:

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

L'output sarà simile a questo:

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

Ogni spazio fa precedere i domini del cluster da un nome proprio. In questo modo si evitano conflitti tra le app.

Domini dello spazio

Gli spazi sono la posizione ufficiale per la configurazione del dominio. Puoi assegnare domini e sottodomini a ogni spazio per gli sviluppatori. Il campo per la configurazione dei domini è spec.networkConfig.domains.

Utilizza kf space per visualizzare i domini assegnati a uno spazio:

kf space SPACE_NAME

Nell'output, il campo Spec contiene la configurazione specifica per lo spazio, mentre il campo Status riflette la configurazione dello spazio con i valori predefiniti a livello di cluster aggiunti alla fine:

...
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

Configurazione con l'interfaccia a riga di comando

L'interfaccia a riga di comando kf supporta le mutazioni nei domini dello spazio. Ogni comando genera una differenza tra la vecchia e la nuova configurazione.

Aggiungi un nuovo dominio con kf configure-space append-domain:

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

Aggiungi un dominio esistente o impostalo come predefinito con kf configure-space set-default-domain:

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

Infine, rimuovi un dominio:

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

App

Le app possono specificare i domini come parte della configurazione. Le route vengono mappate alle app durante kf push utilizzando la seguente logica:

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 un'app non specifica un percorso o richiede un percorso casuale, verrà utilizzato il primo dominio nello spazio. Se il primo dominio in uno spazio cambia, tutte le app nello spazio che utilizzano il dominio predefinito verranno aggiornate in modo da riflettere il dominio.

Modelli di dominio

Kf supporta la sostituzione delle variabili nei domini. La sostituzione consente di personalizzare un singolo dominio a livello di cluster in base allo spazio e di reagire alle modifiche all'IP in entrata. La sostituzione viene eseguita per le variabili con sintassi $(VARIABLE_NAME) che si trovano in un dominio.

Variabile Descrizione
CLUSTER_INGRESS_IP L'indirizzo IPV4 del traffico in entrata del cluster.
SPACE_NAME Il nome dello spazio.

Esempi

I seguenti esempi mostrano come utilizzare le variabili di dominio per supportare una varietà di strutture organizzative e pattern di cluster diversi.

  • Se utilizzi un servizio DNS con caratteri jolly come nip.io:

    $(SPACE_NAME).$(CLUSTER_INGRESS_IP).nip.io
    
  • Dominio per un'organizzazione con DNS gestito centralmente:

    $(SPACE_NAME).cluster-name.example.com
    
  • Dominio per i team che gestiscono il proprio DNS:

    cluster-name.$(SPACE_NAME).example.com
    
  • Dominio per un cluster con failover a caldo e con interruttore di sicurezza esterno:

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

Differenze tra Kf e CF

  • Spazi Kf antepone al dominio a livello di cluster il nome dello spazio.
  • Kf non controlla la presenza di conflitti di dominio sulle route specificate dall'utente.