Kubernetes Ingress leitet den Verkehr immer an den falschen Pod weiter

Kubernetes Ingress leitet den Verkehr immer an den falschen Pod weiter

Ich habe das folgende Setup in einem minikubeKubernetes-Cluster (lokal)

  1. Namespacecustomer-a
  • 1 Bereitstellung -> druckt „Hallo von Kunde A“
  • 1 LoadBalancer-Typ Dienst
  • 1 Eingang -> Hostcustomer-a.example.com
  1. Namespacecustomer-b
  • 1 Bereitstellung -> druckt „Hallo von Kunde B“
  • 1 LoadBalancer-Typ Dienst
  • 1 Eingang -> Hostcustomer-b.example.com
  1. Namespacecustomer-c
  • 1 Bereitstellung -> druckt „Hallo von Kunde C“
  • 1 LoadBalancer-Typ Dienst
  • 1 Eingang -> Hostcustomer-c.example.com

Da ich dieses Setup in einem Cluster betreibe minikube, muss ich den minikube tunnelBefehl 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-IPalle LoadBalancerDienstetypen gleich, aber um den Verkehrsfluss zu differenzieren, habe ich das oben Gesagte verwendet HOSTS( customer-a.example.com,, )customer-b.example.comcustomer-c.example.com

Und ich habe die IP den Hostnamen wie /etc/hostsfolgt 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.

verwandte Informationen