Implementación de un controlador de entrada
Se aplica a: AKS en Azure Local 22H2, AKS en Windows Server
Un controlador de entrada es un recurso de Kubernetes que permite el acceso externo a los servicios dentro del clúster de Kubernetes. La entrada permite a un operador exponer un servicio a solicitudes de red externa, normalmente HTTP o HTTPS. Para configurar el acceso, cree un conjunto de reglas que definan las conexiones entrantes que llegan a servicios específicos.
Un controlador de entrada es software que proporciona enrutamiento de tráfico configurable para los servicios de Kubernetes. Los recursos de entrada de Kubernetes se usan para configurar las reglas de entrada y las rutas de los distintos servicios de Kubernetes. Con un controlador de entrada y reglas de entrada se puede usar una sola dirección IP para enrutar el tráfico a varios servicios en un clúster de Kubernetes.
Después de implementar el controlador en el entorno, puede crear e implementar el manifiesto de entrada. Actualmente, se usa la entrada en AKS Arc mediante el controlador de entrada NGINX. Para obtener información sobre cómo instalar, configurar y usar el controlador de entrada NGINX, consulte Instalación con manifiestos.
La entrada difiere de NodePort y LoadBalancer de una manera única, y mejora el enrutamiento del tráfico al clúster de una manera menos costosa. La definición de servicios NodePort crea numerosos puertos aleatorios y la definición de los servicios LoadBalancer aumenta el costo de los recursos en la nube más de lo que quiera. Al definir un controlador de entrada, se consolidan las reglas de enrutamiento de tráfico en un único recurso que se ejecuta como parte del clúster. NodePort y LoadBalancer permiten exponer un servicio especificando ese valor en el tipo del servicio, mientras que la entrada es un recurso independiente para el servicio. La entrada se define, crea y destruye por separado del servicio.
Puede implementar la entrada de varias maneras en función del caso de uso. Los recursos de entrada se usan para actualizar la configuración en el controlador de entrada para determinar cómo funciona.
Uso de la entrada para exponer servicios a través de direcciones URL accesibles externamente
En el siguiente manifiesto YAML se muestra un ejemplo de uso de entrada. Aparece ingress.class
dentro de los metadatos (en este ejemplo, ingress-nginx
) y esta configuración permite al controlador de entrada NGINX saber lo que necesita para supervisar y actualizar:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: hello-world
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: test.example.com
http:
paths:
- path: /hello-world
pathType: Prefix
backend:
service:
name: hello-world
port:
number: 8080
En la sección se spec
proporciona información sobre lo que está configurado. En este ejemplo, se define una regla (o un conjunto de reglas) e incluye los siguientes elementos:
- Host al que se aplican las reglas.
- Si el tráfico es HTTP o HTTPS.
- Ruta de acceso supervisada.
- El servicio interno y el puerto donde se envía el tráfico.
Uso de la entrada para equilibrar la carga del tráfico
En el ejemplo siguiente, se agrega otra ruta de acceso al manifiesto que permite el equilibrio de carga entre distintos back-end de una aplicación. En este ejemplo, el operador puede dividir el tráfico y enviarlo a diferentes puntos de conexión de servicio e implementaciones en función de la ruta de acceso descrita. Detrás de cada ruta de acceso hay una implementación y un servicio, lo que resulta útil para los puntos de conexión que reciben más tráfico:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: hello-world-and-earth
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: test.example.com
http:
paths:
- path: /hello-world
pathType: Prefix
backend:
service:
name: hello-world
port:
number: 8080
- path: /hello-earth
pathType: Prefix
backend:
service:
name: hello-earth
port:
number: 8080
Uso de la entrada para enrutar el tráfico HTTP a varios nombres de host en la misma dirección IP
Puede usar un recurso de entrada diferente para cada host, lo que le permite controlar el tráfico con varios nombres de host. Para usar un recurso de entrada diferente, apunte varios nombres de host en la misma dirección IP pública que se usa para el servicio LoadBalancer. En el siguiente archivo de manifiesto, se agregó una versión de producción de hello-world
. Se usa el nombre de host prod.example.com
y el tráfico apunta al nuevo servicio hello-world-prod
. El tráfico entra a través de la dirección IP del equilibrador de carga y se enruta según el nombre de host y la ruta de acceso que proporcione:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: hello-world-prod
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: test.example.com
http:
paths:
- path: /hello-world
pathType: Prefix
backend:
service:
name: hello-world-test
port:
number: 8080
- host: prod.example.com
http:
paths:
- path: /hello-world
pathType: Prefix
backend:
service:
name: hello-world-prod
port:
number: 8080
Pasos siguientes
Para obtener más información, consulte los siguientes vínculos: