Configuración de Ingress

Crea un recurso de Ingress para configurar los componentes de Ingress, definir reglas de enrutamiento de solicitudes y especificar la ruta de acceso a los servicios de tu aplicación. Se necesita un recurso de Ingress independiente para cada espacio de nombres que contenga una aplicación o un servicio que desees hacer público.

Antes de empezar

Sigue estos pasos de preparación antes de empezar.

  1. Asegúrate de que dispones de los permisos adecuados para configurar Ingress. Se requieren los siguientes IBM Cloud Roles de IAM:

    • Rol de acceso a la plataforma de Administrador sobre el clúster
    • Rol de acceso al servicio de Gestor sobre todos los espacios de nombres
  2. Decide si quieres utilizar el subdominio de Ingress que proporciona IBM. Si no quieres utilizar el subdominio proporcionado, debes crear y registrar tu propio dominio personalizado.

    Un dominio personalizado o la configuración manual de los dominios proporcionados por IBM necesarios para publicar aplicaciones a través de ALB privadas.

  3. Asegúrate de que el ALB que vas a utilizar sea de la versión prevista. Ejecuta el comando « ibmcloud ks ingress alb versions » para ver una lista de las versiones compatibles actualmente y compárala con el resultado de « ibmcloud ks ingress alb ls --cluster CLUSTER ». Si estás siguiendo esta documentación, se espera que ejecutes un Ingress basado en Traefik; para obtener instrucciones específicas sobre Ingress- NGINX, consulta la documentación correspondiente.

  4. Si vas a publicar aplicaciones a través de ALB privadas, debes habilitar cada una de ellas en la CLI. Para obtener el ID del ALB, ejecuta ibmcloud ks ingress alb ls --cluster CLUSTER.

Clústeres clásicos Para obtener más información y conocer las opciones comando, consulta lareferencia de la CLI. sh {: pre} ibmcloud ks ingress alb enable classic --alb ALB_ID --cluster CLUSTER_NAME Clústeres de VPC Para obtener más información y conocer las opciones comando, consulta lareferencia de la CLI. sh {: pre} ibmcloud ks ingress alb enable vpc-gen2 --alb ALB_ID --cluster CLUSTER_NAME

  1. Asegúrate de que tu clúster incluya al menos dos nodos de trabajo por zona para garantizar una alta disponibilidad y poder aplicar actualizaciones periódicas. Si una zona solo tiene un nodo de trabajo, el ALB no puede recibir actualizaciones automáticas. Para obtener más información, consulta los requisitos de los nodos de trabajo para los ALB.

  2. Si utilizas un clúster clásico, activa una función de enrutador virtual(VRF) para tu cuenta de infraestructura de IBM Cloud.

    • Para habilitar VRF, consulte Habilitación de VRF.
    • Para comprobar si un VRF ya está habilitado, utilice el mandato ibmcloud account show.
    • Si no puedes o no quieres habilitar VRF, habilita el spanning de VLAN. Cuando hay una VRF o una distribución de VLAN habilitada, el ALB puede direccionar paquetes a varias subredes de la cuenta.
  3. En el caso de los clústeres de VPC, asegúrate de que los grupos de seguridad de tu VPC permitan que los puertos de los nodos reciban las solicitudes de tráfico enrutadas por Ingress. Para obtener más información, consulta « Descripción general de las redes VPC de clústeres con la configuración «Seguro por defecto »».

  4. Tenga en cuenta que si crea y suprime un clúster con el mismo nombre o un nombre similar 5 veces o más en el plazo de 7 días, como por ejemplo para la automatización o la realización de pruebas, es posible que alcance el límite de velocidad de duplicación de certificados de Let's Encrypt. Para asegurarse de que el subdominio y el certificado de Ingress se han registrado correctamente, los primeros 24 caracteres de los nombres de los clústeres deben ser distintos.

  5. Si restringe el tráfico de red a los nodos trabajadores de extremo, asegúrese de que haya al menos dos nodos trabajadores de extremo habilitados en cada zona para que los ALB se desplieguen de forma uniforme.

Si una zona falla, es posible que vea anomalías intermitentes en las solicitudes al ALB Ingress en dicha zona.

Pasos de configuración

Sigue los pasos para configurar Ingress.

Paso 1: Crear un servicio « ClusterIP »

Para cada despliegue de app que desee exponer, cree un servicio ClusterIP de Kubernetes. El servicio de Kubernetes debe exponer la app para que se incluya en el equilibrio de carga de Ingress.

kubectl expose deploy <app_deployment_name> --name my-app-svc --port <app_port> -n <namespace>

Paso 2: Configurar una terminació TLS e con certificados TLS y secretos Kubernetes

Tu certificado « TLS » debe almacenarse como un secreto « Kubernetes » en cada espacio de nombres en el que se encuentren tus aplicaciones.

Paso 3: Crear el recurso de Ingress

Crea el recurso Ingress para definir las reglas de enrutamiento que el controlador Ingress utiliza para dirigir el tráfico hacia tu servicio de aplicación.

  1. Crea el recurso de Ingress en un archivo YAML.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: my-ingress-resource
    spec:
      ingressClassName: public-iks-traefik
      tls:
      - hosts:
        - <domain_name>
        secretName: <tls_secret_name>
      rules:
      - host: HOSTNAME
        http:
          paths:
          - path: <app_path_1>
            pathType: Prefix
            backend:
              service:
                name: <app_service_1>
                port:
                  number: 80
          - path: <app_path_2>
            pathType: Prefix
            backend:
              service:
                name: <app_service_2>
                port:
                  number: 80
    

Campos de recursos

ingressClassName
El nombre de la clase Ingress. Las clases de Ingress proporcionadas por IBM son public-iks-traefik para los ALB públicos y private-iks-traefik para los ALB privados.
tls.hosts
Para utilizar TLS, sustituya <domain> por el subdominio de Ingress proporcionado por IBM o por el dominio personalizado.
tls.secretName
Sustituye « <tls_secret_name> » por el nombre del secreto de « Kubernetes » en el que está almacenado tu certificado de « TLS ».
host
Sustituya <domain> por el subdominio de Ingress proporcionado por IBM o por el dominio personalizado.
path
Sustituya <app_path> por una barra inclinada o por la vía de acceso en la que escucha la aplicación. La ruta se añade al dominio de Ingress especificado para crear una ruta única hacia tu aplicación. Cuando especifica esta ruta en un navegador web, el tráfico de la red se direcciona al ALB. El ALB consulta el servicio asociado y envía el tráfico de red al servicio. A continuación, el servicio reenvía el tráfico a los pods en los que se ejecuta la app.
pathType
El método de comparación de vías de acceso de URL. Los valores admitidos son ImplementationSpecific, Exact o Prefix. Para obtener más información y ver ejemplos de cada tipo de ruta, consulta la documentación de la comunidad sobre Kubernetes.
service.name
Sustituya app1_service y app2_service, y así sucesivamente, por el nombre de los servicios que ha creado para exponer las aplicaciones. Asegúrate de que las aplicaciones que especifiques se encuentren en el mismo espacio de nombres.
service.name
Sustituya <app1_service> y <app2_service>, y así sucesivamente, por el nombre de los servicios que ha creado para exponer las aplicaciones. Asegúrate de que las aplicaciones que especifiques se encuentren en el mismo espacio de nombres.
service.port.number
El puerto en el que el servicio está a la escucha. Utilice el mismo puerto que ha definido al crear el servicio de Kubernetes para la app.
  1. Aplica el recurso Ingress a tu clúster. Asegúrese de que el recurso se despliega en el mismo espacio de nombres que los servicios de apps que ha especificado en el recurso.
    kubectl apply -f community-ingress-resource.yaml -n <namespace>
    

Paso 4: Comprueba la configuración de Ingress

  1. Enumera tus ALB y copia la dirección IP (clásica) o el nombre de host (VPC) de un ALB que ejecute la imagen de Ingress Kubernetes. En la salida, elija un ALB que tenga Build en el formato <community_version>_<ibm_build>_iks.

    ibmcloud ks ingress alb ls -c CLUSTER
    
  2. Utiliza la dirección IP del ALB (clásico) o el nombre de host (VPC), la ruta de la aplicación y tu dominio para comprobar que puedes enviar tráfico correctamente a tu aplicación a través de este ALB.

    curl http://<ALB_IP>/<app_path> -H "Host: <ingress_subdomain>"
    

    Por ejemplo, para enviar una solicitud a una aplicación llamada myapp utilizando un subdominio Ingress predeterminado, ejecuta el siguiente comando.

    curl http://169.X.X.X/myapp -H "Host: mycluster-a1b2cdef345678g9hi012j3kl4567890-0000.us-south.containers.appdomain.cloud"
    

¿Tiene problemas para conectarse a su app a través de Ingress? Intente resolverlos consultando Resolución de problemas de Ingress. Para comprobar el estado de los componentes de Ingress, ejecute ibmcloud ks ingress status-report get -c CLUSTER_NAME_OR_ID.

CRD de Traefik

Junto con los recursos de Ingress de Kubernetes. Los controladores de acceso basados en Traefik permiten utilizar recursos definidos mediante las definiciones de recursos personalizados de Traefik. El CRD necesario se implementa automáticamente en el clúster cuando se habilita un ALB basado en Traefik. La versión de CRD implementada siempre se corresponde con la versión más reciente de los ALB de Traefik implementados. Puedes encontrar más información sobre los recursos personalizados en la documentación de Traefik.

En ocasiones, dependiendo de la configuración, es posible que los CR de Traefik te pidan que especifiques los nombres de los puntos de entrada. En IBM Cloud Kubernetes Service, los nombres predeterminados de los puntos de entrada son web para el tráfico en texto claro HTTP (asignado al puerto 80 por defecto) y websecure para el tráfico cifrado TLS HTTPS (asignado al puerto 443 por defecto). Puedes configurar puertos o crear puntos de entrada adicionales si tu aplicación lo requiere.

Ingress: compatibilidad con anotaciones de NGINX en Traefik

Traefik incluye una capa de compatibilidad que procesa las anotaciones específicas de Ingress- NGINX. Esta función está desactivada de forma predeterminada en IBM Cloud Kubernetes Service. Al activarla, se desactiva el procesamiento de las anotaciones específicas de Traefik, por lo que el ALB solo procesará las específicas de Ingress- NGINX. La opción « ingressProvider » de ibm-ingress-deploy-config ConfigMap se puede utilizar para activar o desactivar esta función.

Para obtener más información sobre el estado de compatibilidad de las anotaciones, consulta la documentación de Traefik.

Dominios personalizados con Ingress

Si no deseas utilizar el subdominio de Ingress proporcionado por IBM, puedes utilizar tu propio dominio personalizado, que deberás especificar en tu recurso Ingress. Ten en cuenta que las aplicaciones expuestas mediante Ingress a través de ALB privadas requieren un dominio personalizado o la configuración manual de los dominios proporcionados por IBM.

Creación de dominios personalizados para ALB públicas

Sigue estos pasos para crear un dominio personalizado para los ALB públicos.

  1. Cree un dominio personalizado. Para registrar un dominio personalizado, póngase en contacto con su proveedor de DNS (Domain Name Service) o con IBM Cloud DNS. Si las apps que desea que Ingress exponga se encuentran en diferentes espacios de nombres en un clúster, registre el dominio personalizado como un dominio comodín como, por ejemplo, *.custom_domain.net. Ten en cuenta que los dominios tienen un límite de 130 caracteres o menos en la versión Kubernetes 1.20 o posterior.

  2. Defina un alias para el dominio personalizado especificando el subdominio proporcionado por IBM como CNAME (Registro de nombre canónico). Para buscar el dominio de Ingress proporcionado por IBM, ejecute ibmcloud ks cluster get --cluster CLUSTER_NAME y busque el campo Subdominio de Ingress.

    Es necesario especificar el subdominio proporcionado por IBM como un registro CNAME para que las comprobaciones automáticas de estado eliminen cualquier dirección IP defectuosa de la respuesta del DNS y para garantizar que tu dominio personalizado se actualice cuando añadas o elimines ALB.

Creación de dominios personalizados para ALB privadas

Sigue estos pasos para crear un dominio personalizado para los ALB privados. Ten en cuenta que es necesario disponer de dominios personalizados para utilizar Ingress con ALB privados.

Si tienes un clúster clásico con solo una VLAN privada, primero debes configurar tu propio servicio DNS que esté disponible en tu red privada.

  1. Cree un dominio personalizado a través del proveedor de servicios de DNS. Ten en cuenta que las URL de Ingress deben tener 130 caracteres o menos.

  2. Correlacione el dominio personalizado con los ALB privados añadiendo sus direcciones IP como registros A (clústeres clásicos) o su nombre de host de VPC como CNAME (clústeres de VPC). Para buscar el nombre de host (VPC) o las direcciones IP (clásica), ejecute ibmcloud ks ingress alb ls -c CLUSTER_NAME_OR_ID.