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.
-
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
-
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.
-
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>
-
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.
-
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. -
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.
-
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.
-
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.
-
Para utilizar el subdominio de Ingress proporcionado por IBM, consulte Configuración de secretos TLS para el subdominio de Ingress proporcionado por IBM.
-
Para utilizar un dominio personalizado, consulte Configuración de secretos TLS para subdominios personalizados.
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.
-
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 configmapibm-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 yprivate-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
oPrefix
. 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
yapp2_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.
-
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
-
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>
-
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.
-
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. -
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.
-
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.
-
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>
.