
У меня есть следующая настройка в minikube
кластере Kubernetes (локально)
- пространство имен
customer-a
- 1 развертывание -> печатает «Привет от клиента А»
- 1 Тип LoadBalancer Сервис
- 1 вход -> хост
customer-a.example.com
- пространство имен
customer-b
- 1 развертывание -> печатает «Привет от клиента B»
- 1 Тип LoadBalancer Сервис
- 1 вход -> хост
customer-b.example.com
- пространство имен
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.