Configuración de Ingress

Cree un recurso de Ingress para configurar los componentes de Ingress, definir reglas para el direccionamiento de solicitudes y especificar la vía de acceso a los servicios de la app. Se necesita un recurso de Ingress independiente para cada espacio de nombres que contenga una app o un servicio que desee exponer.

Antes de empezar

Siga estos pasos de preparación antes de empezar.

  1. Asegúrate de que dispones de los permisos adecuados para configurar Ingress. Se necesitan los siguientes roles deIBM Cloud 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. Determine si desea utilizar el subdominio de Ingress proporcionado por IBM. Si no desea utilizar el subdominio proporcionado, debe crear y registrar su 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 Ingress- NGINX; para obtener instrucciones específicas sobre Traefik, consulta la documentación correspondiente.

  4. Si está exponiendo apps a través de ALB privados, debe habilitar cada ALB privado 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 opciones de mandato, consulte laReferencia de 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 opciones de mandato, consulte laReferencia de CLI. sh {: pre} ibmcloud ks ingress alb enable vpc-gen2 --alb ALB_ID --cluster CLUSTER_NAME

  1. Asegúrese de que el clúster incluya al menos dos nodos trabajadores por zona para garantizar la alta disponibilidad y para aplicar actualizaciones periódicas. Si una zona sólo tiene un nodo trabajador, el ALB no puede recibir actualizaciones automáticas. Para obtener más información, consulte Requisitos de nodo trabajador para ALB.

  2. Si utiliza un clúster clásico, habilite una función de enrutador virtual(VRF ) para su cuenta de infraestructura 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, consulte Información sobre las redes de clúster VPC seguras 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

Siga los pasos para configurar Ingress.

Paso 1: Crear un servicio de 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 la terminación TLS con los certificados TLS y los secretos Kubernetes

Su certificado TLS debe almacenarse como secreto Kubernetes en cada espacio de nombres donde existan sus 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. Cree el recurso de Ingress en un archivo YAML.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: my-ingress-resource
    spec:
      ingressClassName: public-iks-k8s-nginx
      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 clase de Ingress. Las clases de Ingress proporcionadas por IBMson public-iks-k8s-nginx para ALB públicos y private-iks-k8s-nginx para ALB privados.
tls.hosts
Para utilizar TLS, sustituya <domain> por el subdominio de Ingress proporcionado por IBM o por el dominio personalizado.
tls.secretName
Sustituya <tls_secret_name> por el nombre del secreto Kubernetes donde está almacenado su certificado 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úrese de que las apps que especifique estén 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úrese de que las apps que especifique estén 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: Verificar 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.

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úblicos

Siga los 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. Tenga en cuenta que los dominios están limitados a 130 caracteres o menos en Kubernetes versión 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 CNAME para que las comprobaciones de estado automáticas eliminen cualquier IP defectuosa de la respuesta DNS y para garantizar que su dominio personalizado se actualice cuando añada o elimine ALB.

Creación de dominios personalizados para ALB privados

Siga los pasos para crear un dominio personalizado para ALB privados. Tenga en cuenta que los dominios personalizados son necesarios para utilizar Ingress con ALB privados.

Si tiene un clúster clásico con solo una VLAN privada, primero debe configurar su propio servicio DNS que está disponible en la red privada.

  1. Cree un dominio personalizado a través del proveedor de servicios de DNS. Tenga en cuenta que los 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.