O Kubernetes Ingress sempre direciona o tráfego para o pod errado

O Kubernetes Ingress sempre direciona o tráfego para o pod errado

Eu tenho a seguinte configuração em um minikubecluster Kubernetes (localmente)

  1. espaço para nomecustomer-a
  • 1 implantação -> imprime "Olá do Cliente A"
  • 1 serviço do tipo LoadBalancer
  • 1 entrada -> hostcustomer-a.example.com
  1. espaço para nomecustomer-b
  • 1 implantação -> imprime "Olá do Cliente B"
  • 1 serviço do tipo LoadBalancer
  • 1 entrada -> hostcustomer-b.example.com
  1. espaço para nomecustomer-c
  • 1 implantação -> imprime "Olá do Cliente C"
  • 1 serviço do tipo LoadBalancer
  • 1 entrada -> hostcustomer-c.example.com

Como estou executando esta configuração em um minikubecluster, preciso usar o minikube tunnelcomando 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-IPde todos os LoadBalancertipos de Serviços são iguais, mas para diferenciar o fluxo de tráfego, usei o HOSTSacima ( customer-a.example.com, customer-b.example.com, customer-c.example.com)

E mapeei o IP para os nomes de host conforme /etc/hostsabaixo:

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.

informação relacionada