
Eu tenho a seguinte configuração em um minikube
cluster Kubernetes (localmente)
- espaço para nome
customer-a
- 1 implantação -> imprime "Olá do Cliente A"
- 1 serviço do tipo LoadBalancer
- 1 entrada -> host
customer-a.example.com
- espaço para nome
customer-b
- 1 implantação -> imprime "Olá do Cliente B"
- 1 serviço do tipo LoadBalancer
- 1 entrada -> host
customer-b.example.com
- espaço para nome
customer-c
- 1 implantação -> imprime "Olá do Cliente C"
- 1 serviço do tipo LoadBalancer
- 1 entrada -> host
customer-c.example.com
Como estou executando esta configuração em um minikube
cluster, preciso usar o minikube tunnel
comando para acessar o serviço de entrada
E aqui está a aparência da minha configuração atual
// 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
de acordo com o exposto, EXTERNAL-IP
de todos os LoadBalancer
tipos de Serviços são iguais, mas para diferenciar o fluxo de tráfego, usei o HOSTS
acima ( customer-a.example.com
, customer-b.example.com
, customer-c.example.com
)
E mapeei o IP para os nomes de host conforme /etc/hosts
abaixo:
127.0.0.1 customer-a.example.com customer-b.example.com customer-c.example.com
Quando tento acessar cada URL, isso apenas me direciona para o mesmo resultado, que éHi 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"}
Alguém pode me ajudar a encontrar o problema com isso? Presumo que isso tenha algo a ver com o minikube tunnel
?
Responder1
Isso não tem nada a ver com o túnel do minikube. O problema aqui é que todos os seus serviços estão usando a mesma porta para se comunicar fora do cluster. No protocolo tcp, dois aplicativos em execução na mesma máquina não podem ter os mesmos números de porta, portanto, neste caso, você precisa configurar números de porta personalizados para todas as três implantações e mapeá-los adequadamente em seu balanceador de carga ou entrada ou configuração nginx.