IBM Cloud Docs
Configuración de Ingress

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úrese de que dispone de los permisos correctos 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.

    Se necesita un dominio personalizado para exponer apps a través de ALB privados.

  3. Si está exponiendo apps a través de ALB privados, debe habilitar cada ALB privado en la CLI. Para obtener el ID del ALB, ejecute 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.

    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.

    ibmcloud ks ingress alb enable vpc-gen2 --alb <alb_id> --cluster <cluster_name>
    
  4. 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 solo tiene un nodo de trabajador en una zona, el ALB no puede recibir actualizaciones automáticas. Para obtener más información, consulte Requisitos de nodo trabajador para ALB.

  5. Si utiliza un clúster clásico, habilite una función de direccionador virtual(VRF) para la 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 puede o no desea habilitar VRF, habilite Expansión de VLAN. Cuando hay una VRF o una distribución de VLAN habilitada, el ALB puede direccionar paquetes a varias subredes de la cuenta.

  6. Si está utilizando un clúster de VPC, asegúrese de que las solicitudes de tráfico direccionadas por Ingress a los puertos de nodo en los nodos trabajadores estén permitidas en los grupos de seguridad de VPC.

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

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

Es necesario un servicio de ClusterIP para que se pueda acceder a la app desde dentro del clúster para que las solicitudes externas se puedan reenviar al pod de la app. Para que se incluyan en el equilibrio de carga de Ingress, los nombres de los servicios ClusterIP que exponen sus apps deben ser exclusivos en todos los espacios de nombres del clúster.

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 certificados TLS y secretos de Kubernetes

El certificado TLS debe almacenarse como un secreto de Kubernetes en cada espacio de nombres donde existan las apps.

Paso 3: Crear el recurso de Ingress

Cree el recurso Ingress para definir las reglas de enrutamiento que el controlador Ingress utiliza para enrutar el tráfico a su 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: nginx-example
      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
    
    
    annotations
    kubernetes.io/ingress.class: especifique la clase de Ingress a aplicar. Las clases de Ingress proporcionadas por IBMson "public-iks-k8s-nginx" para ALB públicos y "private-iks-k8s-nginx" para ALB privados.
    Especifique esta clase personalizada en un recurso IngressClass y un configmap ibm-ingress-deploy-config. Para personalizar el enrutamiento de Ingress, puede añadir Kubernetes NGINX (nginx.ingress.kubernetes.io/<annotation>). Las anotaciones personalizadas IBM Cloud Kubernetes Service (ingress.bluemix.net/<annotation>) no son compatibles.
    Nota: Para configuraciones en las que otro componente gestiona sus ALB de Ingress, como si Ingress se despliega como parte de un gráfico Helm, no especifique esta anotación. En su lugar, busque la clase Ingress para su configuración y especifique esa clase en un campo spec.ingressClassName: <class_name>.
    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 de Kubernetes donde se almacena el 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 Ingress especificado para crear una ruta única a su 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 ejemplos de cada tipo de ruta, consulte la documentación de la comunidad 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.
  2. Aplique el recurso Ingress a su 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. Enumere sus ALB y copie la dirección IP (clásica) o el nombre de host (VPC) de un ALB que ejecute la imagen Kubernetes Ingress. 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. Utilice la dirección IP (clásica) o el nombre de host (VPC) del ALB, la ruta de la aplicación y su dominio para comprobar que puede enviar correctamente tráfico a su 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, ejecute 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 desea utilizar el subdominio de Ingress proporcionado por IBM, puede utilizar su propio dominio personalizado que especifique en el recurso de Ingress. Tenga en cuenta que las apps expuestas con Ingress sobre ALB privados requieren un dominio personalizado.

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.

    La especificación del subdominio proporcionado por IBMcomo CNAME es necesaria para que las comprobaciones de estado automáticas eliminen las IP anómalas de la respuesta DNS y para asegurarse de que el dominio personalizado se actualiza cuando se añaden o eliminan 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>.