Exposición de apps en clústeres de Satellite
Exponga de forma segura las apps que se ejecutan en el clúster de Satellite a las solicitudes de tráfico de la red pública, de los recursos que están conectados a la red privada de los hosts, o de los recursos de IBM Cloud.
Tiene varias opciones para exponer apps en clústeres de Satellite:
- MetalLB: una implementación de
LoadBalancer
adecuada para los clústeres Satellite locales. - Rutas de Red Hat OpenShift: exponga rápidamente apps a las solicitudes de la red pública o una red privada con un nombre de host. El controlador de Red Hat OpenShift Ingress proporciona registros de DNS y certificados opcionales para sus rutas.
- Equilibrador de carga de terceros y rutas de Red Hat OpenShift: exponga las aplicaciones con un nombre de host y añada la comprobación de estado para las direcciones IP de host que están registradas en los registros DNS del controlador de Ingress.
- NodePorts: exponga las apps no HTTP(S), como por ejemplo las apps UDP o TCP, con un NodePort en el rango de 30000 a 32767.
- Rutas de Red Hat OpenShift y puntos finales de Satellite Link: exponga su app con una ruta privada y cree un punto final de Link de tipo
location
para la ruta. Solo un recurso que esté conectado a la red privada de IBM Cloud puede acceder a la app.
Configuración de MetalLB
MetalLB es una implementación de equilibrador de carga para clústeres nativos de Kubernetes, utilizando protocolos de direccionamiento estándar. Para obtener más información, consulte Acerca de MetalLB y el operador MetalLB en la documentación de Red Hat OpenShift.
Para instalar y configurar MetalLB, siga las instrucciones de Instalación del operador MetalLB en la documentación Red Hat OpenShift. Antes de empezar, asegúrese de que tiene una subred dedicada (IPAddressPool
) para la IP externa de los servicios de LoadBalancer
. Compruebe que las direcciones IP incluidas en
IPAddressPool
no están reservadas o no se utilizan para otros fines; de lo contrario, la función de equilibrio de carga podría fallar.
Exposición de apps con rutas de Red Hat OpenShift
Exponga rápidamente los servicios del clúster en la dirección IP externa del controlador de Red Hat OpenShift Ingress utilizando una ruta.
Una ruta de Red Hat OpenShift expone un servicio como un nombre de host con el formato <service_name>-<project>.<cluster_name>-<random_hash>-0000.upi.containers.appdomain.cloud
.
Un controlador de Ingress se despliega de forma predeterminada en el clúster, lo que permite que los clientes externos utilicen las rutas. El controlador de Ingress utiliza el selector de servicio para buscar el servicio y los puntos finales
que respaldan el servicio. Puede configurar el selector de servicios de modo que dirija el tráfico a través de una ruta a varios servicios. También puede crear rutas seguras o no seguras utilizando el certificado TLS asignado por el controlador
de Ingress para su nombre de host. Tenga en cuenta que el controlador de Ingress solo da soporte a los protocolos HTTP y HTTPS.
Antes de empezar con rutas, revise las siguientes consideraciones.
- Conectividad de red de host
- Si los hosts del clúster tienen una conectividad de red pública, el clúster se crea con un controlador de Ingress público de forma predeterminada. Puede utilizar este controlador de Ingress para crear rutas públicas para su aplicación. Si los hosts del clúster tienen una conectividad de red privada, el clúster se crea con un controlador de Ingress privado de forma predeterminada. Puede utilizar este controlador de Ingress para crear rutas privadas para la aplicación a las que solo se puede acceder desde la red privada de los hosts. Para configurar rutas públicas en clústeres que solo tienen conectividad de red privada, configure primero su propio equilibrador de carga de terceros que tenga conectividad de red pública delante del controlador de Ingress privado antes de realizar los pasos siguientes.
- Comprobaciones de estado
- La gestión de registros de DNS se proporciona de forma predeterminada para el controlador de Ingress del clúster. Por ejemplo, si elimina un host que se ha asignado al clúster desde su ubicación y lo sustituye por otro host, IBM actualiza automáticamente las direcciones IP del host en el registro DNS del controlador de Ingress. Tenga en cuenta que mientras se proporciona el registro de DNS para las rutas, no se despliega ningún servicio de equilibrador de carga delante del controlador de Ingress en el clúster. Para comprobar el estado de las direcciones IP de los hosts que están registrados en los registros DNS del controlador de Ingress, puede configurar su propio equilibrador de carga de terceros delante del controlador de Ingress antes de realizar los pasos siguientes.
Para crear rutas para sus apps:
-
Cree un servicio
ClusterIP
de Kubernetes para el despliegue de la app. El servicio proporciona una dirección IP interna para la aplicación a la que el controlador de Ingress puede enviar tráfico.oc expose deploy <app_deployment_name> --name my-app-svc
-
Configure un dominio para su app.
- Dominio proporcionado por IBM: si no necesita un dominio personalizado, se genera un nombre de host de ruta automáticamente con el formato
<service_name>-<project>.<cluster_name>-<random_hash>-0000.upi.containers.appdomain.cloud
. Continúe con el paso siguiente. - Dominio personalizado: trabaje con el proveedor de DNS para crear un dominio personalizado. Tenga en cuenta que si anteriormente ha configurado un equilibrador de carga de terceros delante del controlador de Ingress, debe trabajar con el proveedor de DNS para crear un dominio personalizado para el equilibrador de carga.
- Dominio proporcionado por IBM: si no necesita un dominio personalizado, se genera un nombre de host de ruta automáticamente con el formato
-
Obtenga las direcciones IP del servicio de controlador de Ingress en la columna EXTERNAL-IP.
oc get svc router-external-default -n openshift-ingress
-
Cree un dominio personalizado con el proveedor de DNS. Si desea utilizar el mismo subdominio para varios servicios del clúster, puede registrar un subdominio comodín, como por ejemplo
*.example.com
. -
Correlacione el dominio personalizado con las direcciones IP del controlador de Ingress añadiendo las direcciones IP como registros A.
-
Configure una ruta que se base en el tipo de terminación TLS que necesita la app. Si no tiene un dominio personalizado, no incluya la opción
--hostname
para que se le genere un nombre de host de ruta. Si ha registrado un subdominio comodín, especifique un subdominio exclusivo en cada ruta que cree. Por ejemplo, puede especificar--hostname svc1.example.com
en esta ruta y--hostname svc2.example.com
en otra ruta.-
Simple:
oc expose service <app_service_name> [--hostname <subdomain>]
-
Paso a través:
oc create route passthrough --service <app_service_name> [--hostname <subdomain>]
¿Necesita gestionar conexiones HTTP/2? Después de crear la ruta, ejecute
oc edit route <app_service_name>
y cambie el valortargetPort
de la ruta ahttps
. Puede probar la ruta ejecutandocurl -I --http2 https://<route> --insecure
. -
Edge: Si utiliza un dominio personalizado, incluya las opciones
--hostname
,--cert
, y--key
, y opcionalmente la opción--ca-cert
. Para obtener más información sobre los requisitos del certificado TLS, consulte la documentación de Red Hat OpenShift edge route.oc create route edge --service <app_service_name> [--hostname <subdomain> --cert <tls.crt> --key <tls.key> --ca-cert <ca.crt>]
-
Reencriptar: Si utiliza un dominio personalizado, incluya las opciones
--hostname
,--cert
, y--key
, y opcionalmente la opción--ca-cert
. Para más información sobre los requisitos del certificado TLS, consulte la documentación de la ruta Red Hat OpenShift re-encrypt.oc create route reencrypt --service <app_service_name> --dest-ca-cert <destca.crt> [--hostname <subdomain> --cert <tls.crt> --key <tls.key> --ca-cert <ca.crt>]
-
-
Verifique que se ha creado la ruta para el servicio de la app.
oc get routes
-
Opcional: Personalice las reglas de enrutamiento predeterminadas con configuraciones opcionales. Por ejemplo, puede utilizar anotaciones HAProxy específicas de la ruta.
Configuración de un equilibrador de carga de terceros delante del controlador de Ingress de Red Hat OpenShift
Para comprobar la salud de las direcciones IP de los hosts que están registrados en los registros DNS del controlador Ingress, puede configurar su propio equilibrador de carga de terceros frente a las direcciones IP de los hosts que están asignados como nodos trabajadores a su clúster.
Por ejemplo, si elimina un host que se ha asignado al clúster desde su ubicación y lo sustituye por otro host, IBM actualiza automáticamente las direcciones IP del host en el registro DNS del controlador de Ingress. Pero si apaga un host, por ejemplo, a través de la gestión de la infraestructura del proveedor de nube, la dirección IP del host no se elimina de los registros DNS del controlador de Ingress y puede hacer que una llamada falle si el registro DNS se resuelve en la dirección IP de ese host. Si configura un equilibrador de carga delante del controlador de Ingress, puede asegurarse de que se compruebe regularmente el estado de las direcciones IP de host, por ejemplo, para garantizar la alta disponibilidad de las cargas de trabajo a nivel de producción.
Después de crear un equilibrador de carga delante del controlador de Ingress, puede utilizar el controlador Ingress para crear rutas para la aplicación. Cuando se envía una solicitud a la ruta de su aplicación, la solicitud la recibe primero el equilibrador de carga antes de reenviarla al controlador de Ingress, que luego la reenvía a la aplicación.
-
Liste los detalles del controlador de Ingress predeterminado para el clúster. En la columna EXTERNAL-IP de la salida, obtenga las direcciones IP del nodo de trabajador que están registradas para el controlador de Ingress del clúster. En la columna PORT(S) de la salida, dependiendo de si desea crear un equilibrador de carga público o privado, obtenga el puerto de nodo que el servicio de controlador de Ingress expone actualmente para tráfico de red público o privado.
oc get svc router-external-default -n openshift-ingress
En la siguiente salida de ejemplo, el puerto de nodo
30783
está expuesto para el tráfico público (80).NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE router-external-default LoadBalancer 172.21.84.172 169.xx.xxx.xxx, 169.xx.xxx.xxx 80:30783/TCP,443:30413/TCP 24h
-
Utilizando estas direcciones IP y el puerto del nodo, cree un equilibrador de carga de capa 4 conectado a la red privada de los hosts. Por ejemplo, puede desplegar un equilibrador de carga desde el proveedor de nube de los hosts o desplegar un equilibrador de carga F5 en la red local. Para crear rutas públicas, el equilibrador de carga debe tener conectividad de red pública y debe poder reenviar el tráfico TCP y UDP al puerto para el tráfico público que ha encontrado en el paso anterior. Para crear rutas privadas, el equilibrador de carga debe poder enviar tráfico TCP y UDP al puerto para el tráfico privado que ha encontrado en el paso anterior.
-
Obtenga el Nombre de host para el clúster. Este subdominio con el formato
<cluster_name>-<random_hash>-0000.upi.containers.appdomain.cloud
se registra en el controlador de Ingress del clúster.ibmcloud oc nlb-dns ls --cluster <cluster_name_or_ID>
-
Añada las direcciones IP públicas del equilibrador de carga al subdominio del clúster. Repita este mandato para todas las direcciones IP públicas que desea añadir.
ibmcloud oc nlb-dns add --ip <public_IP> --cluster <cluster_name_or_ID> --nlb-host <hostname>
-
Elimine las direcciones IP de nodos trabajadores del subdominio del clúster. Repita este mandato para todas las direcciones IP que ha recuperado anteriormente.
ibmcloud oc nlb-dns rm classic --ip <private_IP> --cluster <cluster_name_or_ID> --nlb-host <hostname>
-
Verifique que las direcciones IP públicas para el equilibrador de carga ahora están registradas con el subdominio del clúster.
ibmcloud oc nlb-dns ls --cluster <cluster_name_or_ID>
-
Continúe con los pasos en Exposición de apps con rutas de Red Hat OpenShift para crear rutas para las apps.
Si configura un equilibrador de carga externo o VIP para que se registre en el subdominio en lugar de utilizar el registro predeterminado, dicho equilibrador de carga necesita acceso entrante a los hosts del clúster y los hosts del clúster necesitan acceso saliente al equilibrador de carga.
Exposición de apps con NodePorts
Si no puede utilizar el controlador de Red Hat OpenShift Ingress para exponer una aplicación, por ejemplo, si debe exponer una aplicación TCP o UDP, puede crear un Puerto de nodo para su aplicación.
-
Cree un NodePort para su app. Se asigna a su app un NodePort en el rango de 30000 a 32767 y una dirección IP de clúster interna.
oc expose deployment <deployment_name> --type=NodePort --name=<nodeport_svc_name>
-
Obtenga el NodePort asignado a su app.
oc describe svc <nodeport_svc_name>
-
Obtenga el Nombre de host del clúster con el formato
<cluster_name>-<random_hash>-0000.upi.containers.appdomain.cloud
.ibmcloud oc nlb-dns ls --cluster <cluster_name_or_ID>
-
Acceda a su aplicación utilizando el subdominio del clúster y el NodePort con el formato
<cluster_name>-<random_hash>-0000.upi.containers.appdomain.cloud:<nodeport>
. Tenga en cuenta que si los hosts solo tienen conectividad de red privada, debe estar conectado a la red privada de los hosts, como por ejemplo a través del acceso VPN. -
Opcional: si no desea acceder directamente al NodePort, o si debe exponer sus aplicaciones en un puerto específico como 443, puede configurar su propio equilibrador de carga de terceros de capa 4, que está conectado a la red privada de los hosts y reenvía el tráfico al NodePort. Por ejemplo, puede desplegar un equilibrador de carga desde el proveedor de nube de los hosts o desplegar un equilibrador de carga F5 en la red local. El equilibrador de carga debe ser capaz de reenviar tráfico TCP y UDP para los puertos
30000 - 32767
.
Exposición de apps con rutas y puntos finales de Link para el tráfico procedente de IBM Cloud
Si desea acceder a una aplicación en el clúster de Satellite desde un recurso en IBM Cloud a través de la red privada, puede utilizar el controlador de Ingress privado para crear una ruta privada para la aplicación. A continuación, puede crear
un punto final de Link de tipo location
para la ruta, a la que solo se puede acceder desde dentro de la red privada IBM Cloud.
-
Siga los pasos de Exposición de apps con rutas de Red Hat OpenShift para crear una ruta privada para la app. Solo se puede acceder a esta ruta desde dentro de la red privada de los hosts.
-
Siga los pasos de Creación de puntos finales de ubicación (
location
) para conectarse a recursos de una ubicación para crear un punto final de Link de Satellite para la ruta privada de su app. -
Opcional: para permitir el acceso al punto final desde solo el recurso específico en IBM Cloud, añada el recurso a la lista de orígenes de su punto final.