
Tengo la siguiente configuración en un minikube
clúster de Kubernetes (localmente)
- espacio de nombres
customer-a
- 1 implementación -> imprime "Hola del cliente A"
- 1 Servicio tipo LoadBalancer
- 1 ingreso -> anfitrión
customer-a.example.com
- espacio de nombres
customer-b
- 1 implementación -> imprime "Hola del cliente B"
- 1 Servicio tipo LoadBalancer
- 1 ingreso -> anfitrión
customer-b.example.com
- espacio de nombres
customer-c
- 1 implementación -> imprime "Hola del cliente C"
- 1 Servicio tipo LoadBalancer
- 1 ingreso -> anfitrión
customer-c.example.com
Como estoy ejecutando esta configuración en un minikube
clúster, tengo que usar el minikube tunnel
comando para acceder al servicio de ingreso
Y así es como se ve mi configuración actual
// kubectl get ing, svc -n customer-a
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress.networking.k8s.io/customer-a nginx customer-a.example.com 80 11s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/customer-a LoadBalancer 10.96.39.62 127.0.0.1 80:30048/TCP 11s
// kubectl get ing, svc -n customer-b
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress.networking.k8s.io/customer-b nginx customer-b.example.com 192.168.49.2 80 30s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/customer-b LoadBalancer 10.110.126.198 127.0.0.1 80:31292/TCP 30s
// kubectl get ing, svc -n customer-c
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress.networking.k8s.io/customer-c nginx customer-c.example.com 192.168.49.2 80 6m36s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/customer-c LoadBalancer 10.104.99.195 127.0.0.1 80:32717/TCP 6m36s
Según lo anterior, EXTERNAL-IP
de todos los LoadBalancer
tipos de Servicios son iguales, pero para diferenciar el flujo de tráfico, he utilizado el HOSTS
anterior ( customer-a.example.com
, customer-b.example.com
, customer-c.example.com
)
Y he asignado la IP a los nombres de host de la /etc/hosts
siguiente manera:
127.0.0.1 customer-a.example.com customer-b.example.com customer-c.example.com
Cuando intento acceder a cada URL, solo me dirige al mismo resultado, que esHi from Customer C
// curl -kv http://customer-a.example.com
> GET / HTTP/1.1
> Host: customer-a.example.com
> User-Agent: curl/7.85.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< date: Thu, 29 Dec 2022 00:24:49 GMT
< server: uvicorn
< content-length: 20
< content-type: application/json
<
* Connection #0 to host customer-a.example.com left intact
{"response":"Hi from Customer C"}
// curl -kv http://customer-b.example.com
> GET / HTTP/1.1
> Host: customer-b.example.com
> User-Agent: curl/7.85.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< date: Thu, 29 Dec 2022 00:24:49 GMT
< server: uvicorn
< content-length: 20
< content-type: application/json
<
* Connection #0 to host customer-b.example.com left intact
{"response":"Hi from Customer C"}
// curl -kv http://customer-c.example.com
> GET / HTTP/1.1
> Host: customer-c.example.com
> User-Agent: curl/7.85.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< date: Thu, 29 Dec 2022 00:24:49 GMT
< server: uvicorn
< content-length: 20
< content-type: application/json
<
* Connection #0 to host customer-c.example.com left intact
{"response":"Hi from Customer C"}
¿Alguien puede ayudarme a encontrar el problema con esto? ¿Asumo que esto tiene algo que ver con el minikube tunnel
?
Respuesta1
Esto no tiene nada que ver con el túnel minikube. El problema aquí es que todos sus servicios utilizan el mismo puerto para comunicarse fuera del clúster. En el protocolo tcp, dos aplicaciones que se ejecutan en la misma máquina no pueden tener los mismos números de puerto, por lo que en este caso debe configurar números de puerto personalizados para las tres implementaciones y asignarlos en consecuencia en su balanceador de carga o configuración de ingreso o nginx.