Configurar un dominio personalizado

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

Kf tiene tres ubicaciones en las que se pueden configurar los dominios. Ordenadas por prioridad, son las siguientes:

  1. Apps
  2. Spaces
  3. El ConfigMap config-defaults en el espacio de nombres kf

El ConfigMap config-defaults

El ConfigMap config-defaults conserva la configuración de todo el clúster para Kf, y los administradores del clúster pueden editarlo. El controlador de los 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 ConfigMap config-defaults en el espacio de nombres kf:

kubectl edit configmap config-defaults -n kf

Agrega o actualiza la entrada para la clave spaceClusterDomain de la siguiente manera:

spaceClusterDomain: my-domain.com

Para validar que la configuración se actualizó correctamente, verifica el valor del dominio en un espacio:

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

El resultado será similar al siguiente ejemplo:

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

Cada espacio agrega un prefijo a los dominios del clúster con su propio nombre. Esto evita conflictos entre las apps.

Dominios del espacio

Los espacios son la ubicación autorizada para la configuración del dominio. Puedes asignar dominios y subdominios a cada espacio para que lo usen los desarrolladores. 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 una configuración específica para el espacio, y el campo Status refleja la configuración del espacio con los valores predeterminados de todo el clúster agregados 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 cambios en los dominios del espacio. Cada comando genera una diferencia entre la configuración anterior y la nueva.

Agrega un dominio nuevo con kf configure-space append-domain:

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

Agrega o establece un dominio existente como el predeterminado con kf configure-space set-default-domain:

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

Y, por último, quita un dominio:

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

Apps

Las apps pueden especificar dominios como parte de su configuración. Las rutas se asignan a las apps 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 en el espacio. Si el primer dominio en un espacio cambia, todas las aplicaciones del espacio que usan el dominio predeterminado se actualizarán para reflejar el cambio.

Plantillas del dominio

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

Variable Descripción
CLUSTER_INGRESS_IP La dirección IPv4 de la entrada del clúster.
SPACE_NAME El nombre del espacio.

Ejemplos

En los siguientes ejemplos, se demuestra cómo se pueden usar las variables de dominio para admitir una variedad de estructuras organizativas y patrones de clúster diferentes.

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

    $(SPACE_NAME).$(CLUSTER_INGRESS_IP).nip.io
    
  • Dominio para una organización con DNS administrado de forma central:

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

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

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

Diferencias entre Kf y CF

  • Los espacios de Kf agregan el prefijo del nombre del espacio al dominio de todo el clúster.
  • Kf no verifica los conflictos de dominio en las rutas especificadas por el usuario.