Configurar un dominio personalizado

Todas las aplicaciones de Kf que sirvan tráfico HTTP a usuarios o aplicaciones fuera del clúster deben estar asociadas a un nombre de dominio.

Kf tiene tres ubicaciones en las que se pueden configurar dominios. Por orden de prioridad, son los siguientes:

  1. Aplicaciones
  2. Espacios
  3. El ConfigMap config-defaults en el espacio de nombres kf

El config-defaults ConfigMap

El config-defaults ConfigMap contiene ajustes de todo el clúster para Kf y los administradores del clúster pueden editarlo. El controlador de espacios lee los valores de ConfigMap y modifica su configuración. Los valores de dominio se reflejan en el campo status.networkConfig.domains del espacio.

Para modificar el dominio del clúster de Kf, edita el config-defaults ConfigMap en el espacio de nombres kf:

kubectl edit configmap config-defaults -n kf

Añade o actualiza la entrada de la clave spaceClusterDomain de la siguiente manera:

spaceClusterDomain: my-domain.com

Para comprobar que la configuración se ha actualizado correctamente, comprueba el valor del dominio en un espacio:

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

El resultado será similar al siguiente:

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

Cada espacio añade el prefijo de su propio nombre a los dominios de clúster. De esta forma, se evitan conflictos entre aplicaciones.

Dominios de espacio

Los espacios son la ubicación oficial de la configuración de dominio. Puedes asignar dominios y subdominios a cada espacio para que los desarrolladores los usen. El campo para configurar dominios es spec.networkConfig.domains.

Usa kf space para ver los dominios asignados a un espacio:

kf space SPACE_NAME

En el resultado, el campo Spec contiene la configuración específica del espacio y el campo Status refleja la configuración del espacio con los valores predeterminados de todo el clúster añadidos al 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

Configuración con la CLI

La CLI de kf admite mutaciones en dominios de espacio. Cada comando genera una diferencia entre las configuraciones antiguas y las nuevas.

Añadir un dominio nuevo con kf configure-space append-domain:

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

Añade un dominio o haz que un dominio ya disponible sea el predeterminado con kf configure-space set-default-domain:

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

Por último, quita un dominio:

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

Aplicaciones

Las aplicaciones pueden especificar dominios como parte de su configuración. Las rutas se asignan a las aplicaciones durante kf push mediante la siguiente 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

Si una aplicación no especifica una ruta o solicita una ruta aleatoria, se usará el primer dominio del espacio. Si cambia el primer dominio de un espacio, todas las aplicaciones del espacio que usen el dominio predeterminado se actualizarán para reflejarlo.

Plantillas de dominio

Kf admite la sustitución de variables en dominios. La sustitución permite personalizar un único dominio de todo el clúster por espacio y reaccionar a los cambios en la IP de entrada. La sustitución se realiza en las variables con la sintaxis $(VARIABLE_NAME) que se encuentran en un dominio.

Variable Descripción
CLUSTER_INGRESS_IP Dirección IPv4 del ingress del clúster.
SPACE_NAME Nombre del espacio.

Ejemplos

En los siguientes ejemplos se muestra cómo se pueden usar las variables de dominio para admitir diferentes estructuras organizativas y patrones de clústeres.

  • Usando un servicio DNS comodín como nip.io:

    $(SPACE_NAME).$(CLUSTER_INGRESS_IP).nip.io
    
  • Dominio de una organización con DNS gestionado de forma centralizada:

    $(SPACE_NAME).cluster-name.example.com
    
  • Dominio para los equipos que gestionan su propio DNS:

    cluster-name.$(SPACE_NAME).example.com
    
  • Dominio de un clúster con conmutación por error activa y disyuntor externo:

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

Diferencias entre Kf y CF

  • Kf Spaces añade el nombre del espacio al dominio de todo el clúster.
  • Kf no comprueba si hay conflictos de dominio en las rutas especificadas por el usuario.