Configurer un domaine personnalisé

Toutes les applications Kf qui diffusent du trafic HTTP vers des utilisateurs ou des applications en dehors du cluster doivent être associées à un nom de domaine.

Kf dispose de trois emplacements où les domaines peuvent être configurés. Les éléments suivants sont classés par ordre de priorité :

  1. Applications
  2. Espaces
  3. ConfigMap config-defaults dans l'espace de noms kf

ConfigMap config-defaults

Le ConfigMap config-defaults contient les paramètres Kf à l'échelle du cluster et peut être modifié par les administrateurs du cluster. Les valeurs du ConfigMap sont lues par le contrôleur des espaces et modifient leur configuration. Les valeurs de domaine sont reflétées dans le champ status.networkConfig.domains de l'espace.

Pour modifier le domaine du cluster Kf, modifiez le fichier ConfigMap config-defaults dans l'espace de noms kf :

kubectl edit configmap config-defaults -n kf

Ajoutez ou mettez à jour l'entrée pour la clé spaceClusterDomain comme suit :

spaceClusterDomain: my-domain.com

Pour valider la mise à jour de la configuration, vérifiez la valeur du domaine dans un espace :

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

Le résultat devrait ressembler à ceci :

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

Chaque espace ajoute un préfixe aux domaines du cluster en utilisant son propre nom. Cela évite les conflits entre les applications.

Domaines de l'espace

Les espaces constituent l'emplacement faisant autorité pour la configuration du domaine. Vous pouvez attribuer des domaines et des sous-domaines à chaque espace que les développeurs peuvent utiliser. Le champ permettant de configurer des domaines est spec.networkConfig.domains.

Utilisez kf space pour afficher les domaines attribués à un espace :

kf space SPACE_NAME

Dans le résultat, le champ Spec contient une configuration spécifique pour l'espace et le champ Status indique la configuration de l'espace avec les valeurs par défaut à l'échelle du cluster ajoutées à la fin :

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

Configuration avec la CLI

La CLI kf accepte les mutations sur les domaines de l'espace. Chaque commande génère une différence entre les anciennes et les nouvelles configurations.

Ajoutez un domaine avec kf configure-space append-domain :

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

Ajoutez ou définissez un domaine existant par défaut avec kf configure-space set-default-domain :

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

Enfin, supprimez un domaine :

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

Applications

Les applications peuvent spécifier des domaines dans le cadre de leur configuration. Les routes sont mappées sur les applications pendant kf push à l'aide de la logique suivante :

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

Si une application ne spécifie pas de route ou demande une route aléatoire, le premier domaine de l'espace est utilisé. Si le premier domaine d'un espace change, toutes les applications de l'espace utilisant le domaine par défaut sont mises à jour pour refléter la configuration.

Modèles de domaine

Kf accepte la substitution de variables dans les domaines. La substitution permet à un domaine unique à l'échelle du cluster d'être personnalisé dans chaque espace et de réagir aux modifications de l'adresse IP d'entrée. La substitution est effectuée sur des variables qui se produisent dans un domaine avec la syntaxe $(VARIABLE_NAME).

Variable Description
CLUSTER_INGRESS_IP Adresse IPV4 de l'entrée du cluster.
SPACE_NAME Nom de l'espace.

Exemples

Les exemples suivants montrent comment utiliser des variables de domaine pour gérer diverses structures organisationnelles et modèles de cluster.

  • Utiliser un service DNS générique tel que nip.io :

    $(SPACE_NAME).$(CLUSTER_INGRESS_IP).nip.io
    
  • Domaine d'une organisation avec un DNS géré de manière centralisée :

    $(SPACE_NAME).cluster-name.example.com
    
  • Domaine pour les équipes qui gèrent leur propre DNS :

    cluster-name.$(SPACE_NAME).example.com
    
  • Domaine d'un cluster avec basculement à chaud et disjoncteur externe :

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

Différences entre Kf et CF

  • Les espaces Kf ajoutent un préfixe au domaine à l'échelle du cluster en utilisant le nom de l'espace.
  • Kf ne vérifie pas les conflits de domaine sur les routes spécifiées par l'utilisateur.