|
Este documento ha sido traducido utilizando tecnología de traducción automática. Si bien nos esforzamos por proporcionar traducciones precisas, no ofrecemos garantías sobre la integridad, precisión o confiabilidad del contenido traducido. En caso de discrepancia, la versión original en inglés prevalecerá y constituirá el texto autorizado. |
Uso de un gateway externo con Rancher
Al utilizar el tipo de exposición de red de la API de Gateway, Rancher puede crear y gestionar su propio recurso de Gateway. Sin embargo, si tienes un gateway existente que gestionas de forma independiente (por ejemplo, un gateway compartido utilizado por múltiples aplicaciones), necesitarás crear tus propios recursos HTTPRoute para enrutar el tráfico a Rancher.
Esta sección cubre cómo crear manualmente los recursos HTTPRoute requeridos al utilizar un gateway gestionado externamente.
Requisitos previos
-
Un recurso de gateway existente configurado y operativo en tu clúster
-
Conocimiento de tu gateway:
-
Nombre y espacio de nombres
-
Nombres de los listeners (sectionName) para tráfico HTTP y/o HTTPS
-
-
Rancher instalado con
networkExposure.typeconfigurado a algo diferente degateway(por ejemplo,noneoingress)
Requisitos de gateway entre espacios de nombres
Si tu gateway está en un espacio de nombres diferente al de Rancher (por ejemplo, gateway en gateway-system, Rancher en cattle-system), el gateway debe estar configurado para aceptar HTTPRoutes del espacio de nombres de Rancher. Por defecto, la API de gateway solo permite rutas del mismo espacio de nombres que el gateway.
El propietario del gateway debe configurar allowedRoutes en los listeners relevantes. Hay dos opciones:
Opción 1: Permitir rutas de todos los espacios de nombres
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: shared-gateway
namespace: gateway-system
spec:
gatewayClassName: example
listeners:
- name: https
port: 443
protocol: HTTPS
allowedRoutes:
namespaces:
from: All
- name: http
port: 80
protocol: HTTP
allowedRoutes:
namespaces:
from: All
Opción 2: Permitir rutas de espacios de nombres específicos (más restrictivo)
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: shared-gateway
namespace: gateway-system
spec:
gatewayClassName: example
listeners:
- name: https
port: 443
protocol: HTTPS
allowedRoutes:
namespaces:
from: Selector
selector:
matchLabels:
shared-gateway-access: "true"
- name: http
port: 80
protocol: HTTP
allowedRoutes:
namespaces:
from: Selector
selector:
matchLabels:
shared-gateway-access: "true"
Al utilizar el enfoque del selector, asegúrate de que el espacio de nombres de Rancher tenga la etiqueta requerida:
kubectl label namespace cattle-system shared-gateway-access=true
|
Si el Gateway y Rancher están en el mismo espacio de nombres, no se necesita configuración adicional; la configuración predeterminada |
Determinando los valores de servicio de tu Rancher
Antes de crear recursos de HTTPRoute, identifica los siguientes valores de tu instalación de Rancher:
| Valor | Cómo determinar | Ejemplo |
|---|---|---|
Nombre de la versión |
El nombre utilizado en |
|
Espacio de nombre |
El espacio de nombres donde está instalado Rancher |
|
Nombre de host |
El valor de |
|
Modo TLS |
El valor de |
|
Servicio HTTP deshabilitado |
El valor de |
|
El nombre del servicio de Rancher sigue el patrón: <release-name>-rancher (o solo <release-name> si el nombre de la versión ya contiene "rancher").
Configuración de HTTPRoute
HTTPRoute principal
Crea un HTTPRoute para dirigir el tráfico desde tu Gateway al servicio de Rancher. La configuración depende de tu configuración de TLS:
Cuando TLS termina en el Gateway o dentro de Kubernetes (tls: ingress, tls: secret o tls: letsEncrypt):
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: rancher
namespace: cattle-system # Must match Rancher's namespace
spec:
parentRefs:
- name: <your-gateway-name>
namespace: <your-gateway-namespace>
sectionName: <your-https-listener-name> # Your Gateway's HTTPS listener
hostnames:
- <your-rancher-hostname> # e.g., rancher.example.com
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: rancher # Your Rancher service name
port: 80 # Use 443 if service.disableHTTP=true
Cuando TLS termina externamente (tls: external):
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: rancher
namespace: cattle-system
spec:
parentRefs:
- name: <your-gateway-name>
namespace: <your-gateway-namespace>
sectionName: <your-http-listener-name> # Your Gateway's HTTP listener
hostnames:
- <your-rancher-hostname>
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: rancher
port: 80
Ruta de redirección de HTTP a HTTPS (opcional)
Si TLS termina en o dentro de Kubernetes (no externamente), es posible que desees redirigir el tráfico HTTP a HTTPS. Crea una HTTPRoute adicional:
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: rancher-http-redirect
namespace: cattle-system
spec:
parentRefs:
- name: <your-gateway-name>
namespace: <your-gateway-namespace>
sectionName: <your-http-listener-name> # Your Gateway's HTTP listener
hostnames:
- <your-rancher-hostname>
rules:
- filters:
- type: RequestRedirect
requestRedirect:
scheme: https
statusCode: 301
Usando extraObjects
Puedes incluir estos recursos de HTTPRoute directamente en tu instalación de Rancher Helm utilizando el valor extraObjects. Esto mantiene todos los recursos gestionados juntos:
# values.yaml
hostname: rancher.example.com
tls: ingress
extraObjects:
- apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: rancher
spec:
parentRefs:
- name: my-shared-gateway
namespace: gateway-system
sectionName: https
hostnames:
- rancher.example.com
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: rancher
port: 80
- apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: rancher-http-redirect
spec:
parentRefs:
- name: my-shared-gateway
namespace: gateway-system
sectionName: http
hostnames:
- rancher.example.com
rules:
- filters:
- type: RequestRedirect
requestRedirect:
scheme: https
statusCode: 301
Selección de puerto de backend
El puerto en backendRefs depende de tu configuración de service.disableHTTP:
service.disableHTTP |
Puerto de backend |
|---|---|
|
|
|
|
Resumen de selección de listener
| Configuración de TLS | Listener de ruta principal | Ruta de redirección |
|---|---|---|
|
listener HTTP |
No necesario |
|
listener HTTPS |
listener HTTP (opcional) |
|
listener HTTPS |
listener HTTP (opcional) |
|
listener HTTPS |
listener HTTP (opcional) |
Solución de problemas
HTTPRoute no se está aceptando:
-
Verifica que el nombre y el espacio de nombres del Gateway sean correctos
-
Asegúrate de que el
sectionNamecoincida con un listener existente en tu Gateway -
Verifica que el listener permita rutas desde el espacio de nombres de Rancher (consulta la configuración del
allowedRoutesdel Gateway)
Conexión rechazada o tiempos de espera:
-
Confirma que el servicio de Rancher existe y tiene puntos finales:
kubectl get endpoints rancher -n cattle-system -
Verifica que el puerto del backend coincida con tu configuración de
service.disableHTTP
Errores de certificado:
-
Si utilizas
tls: ingressotls: secret, asegúrate de que el listener HTTPS de tu Gateway tenga el certificado apropiado configurado -
Verifica que el certificado cubra tu nombre de host de Rancher