
Ich habe das folgende Setup in einem minikube
Kubernetes-Cluster (lokal)
- Namespace
customer-a
- 1 Bereitstellung -> druckt „Hallo von Kunde A“
- 1 LoadBalancer-Typ Dienst
- 1 Eingang -> Host
customer-a.example.com
- Namespace
customer-b
- 1 Bereitstellung -> druckt „Hallo von Kunde B“
- 1 LoadBalancer-Typ Dienst
- 1 Eingang -> Host
customer-b.example.com
- Namespace
customer-c
- 1 Bereitstellung -> druckt „Hallo von Kunde C“
- 1 LoadBalancer-Typ Dienst
- 1 Eingang -> Host
customer-c.example.com
Da ich dieses Setup in einem Cluster betreibe minikube
, muss ich den minikube tunnel
Befehl verwenden, um auf den Ingress-Dienst zuzugreifen
Und so sieht mein aktuelles Setup aus
// 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
gemäß dem oben Gesagten sind EXTERNAL-IP
alle LoadBalancer
Dienstetypen gleich, aber um den Verkehrsfluss zu differenzieren, habe ich das oben Gesagte verwendet HOSTS
( customer-a.example.com
,, )customer-b.example.com
customer-c.example.com
Und ich habe die IP den Hostnamen wie /etc/hosts
folgt zugeordnet:
127.0.0.1 customer-a.example.com customer-b.example.com customer-c.example.com
Wenn ich versuche, auf die einzelnen URLs zuzugreifen, werde ich immer zum gleichen Ergebnis weitergeleitet, nämlichHi 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"}
Kann mir jemand helfen, das Problem zu finden? Ich nehme an, das hat etwas mit dem zu tun minikube tunnel
?
Antwort1
Dies hat nichts mit dem Minikube-Tunnel zu tun. Das Problem besteht darin, dass alle Ihre Dienste denselben Port verwenden, um außerhalb des Clusters zu kommunizieren. Im TCP-Protokoll können zwei Anwendungen, die auf derselben Maschine ausgeführt werden, nicht dieselben Portnummern haben. In diesem Fall müssen Sie daher für alle drei Bereitstellungen benutzerdefinierte Portnummern konfigurieren und diese entsprechend in Ihrer Load Balancer- oder Ingress- oder Nginx-Konfiguration zuordnen.