Kubernetes Ingress всегда направляет трафик в неправильный модуль

Kubernetes Ingress всегда направляет трафик в неправильный модуль

У меня есть следующая настройка в minikubeкластере Kubernetes (локально)

  1. пространство именcustomer-a
  • 1 развертывание -> печатает «Привет от клиента А»
  • 1 Тип LoadBalancer Сервис
  • 1 вход -> хостcustomer-a.example.com
  1. пространство именcustomer-b
  • 1 развертывание -> печатает «Привет от клиента B»
  • 1 Тип LoadBalancer Сервис
  • 1 вход -> хостcustomer-b.example.com
  1. пространство именcustomer-c
  • 1 развертывание -> печатает «Привет от клиента C»
  • 1 Тип LoadBalancer Сервис
  • 1 вход -> хостcustomer-c.example.com

Поскольку я запускаю эту настройку в minikubeкластере, мне нужно использовать minikube tunnelкоманду для доступа к службе Ingress

А вот как выглядит моя текущая установка

// 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

Согласно вышесказанному, EXTERNAL-IPвсе LoadBalancerтипы услуг одинаковы, но для дифференциации потока трафика я использовал, HOSTSкак указано выше ( customer-a.example.com, customer-b.example.com, customer-c.example.com)

И я сопоставил IP с именами хостов, как показано /etc/hostsниже:

127.0.0.1 customer-a.example.com customer-b.example.com customer-c.example.com

Когда я пытаюсь получить доступ к каждому URL, он направляет меня только к одному и тому же результату, а именно: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"}

Может кто-нибудь помочь мне найти проблему с этим? Я предполагаю, что это как-то связано с minikube tunnel?

решение1

Это не имеет никакого отношения к туннелю minikube. Проблема в том, что все ваши службы используют один и тот же порт для связи за пределами кластера. В протоколе tcp два приложения, запущенные на одной машине, не могут иметь одинаковые номера портов, поэтому в этом случае вам нужно настроить пользовательские номера портов для всех трех развертываний и соответствующим образом сопоставить их в вашем балансировщике нагрузки или конфигурации Ingress или nginx.

Связанный контент