Вход GKE не может маршрутизировать несколько путей под одним хостом - PullRequest
0 голосов
/ 22 июня 2019

Я не могу заставить ни один из путей под - host: api.mysite.com работать с GKE Ingress, и я не понимаю, почему. Я получаю 404, когда я пробую маршруты.

В приведенном ниже примере я ожидаю, что api.mysite.com/v1/ и api.mysite.com/v2/ будут направлены к соответствующим службам (которые я открыл через нодпорт). К сожалению, мне возвращают только 404.

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: gce-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.global-static-ip-name: my-global-ip
spec:
  rules:
  - host: mysite.com
    http:
      paths:
      - backend:
        serviceName: webserver
        servicePort: 8080
  - host: www.mysite.com
    http:
      paths:
      - backend:
        serviceName: webserver
        servicePort: 8080
  - host: api.mysite.com
    http:
      paths:
      - path: /v2/*
        backend:
          serviceName: api-v2
          servicePort: 9000
      - path: /v1/*
        backend:
          serviceName: api-v1
          servicePort: 8000

Нодпорты, выставляющие сервисы:

apiVersion: v1
kind: Service
metadata:
  name: webserver
  labels:
    app: webserver
  namespace: default
spec:
  selector:
    app: webserver
  type: NodePort
  ports:
  - port: 8080
    name: http
    protocol: TCP
    targetPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: api-v2
  labels:
    app: api-v2
  namespace: default
spec:
  selector:
    app: api-v2
  type: NodePort
  ports:
  - port: 9000
    name: http
    protocol: TCP
    targetPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: api-v1
  labels:
    app: api-v1
  namespace: default
spec:
  selector:
    app: api-v1
  type: NodePort
  ports:
  - port: 8000
    name: http
    protocol: TCP
    targetPort: 8080

Результаты при тестировании входа (реальное имя хоста и ip отредактированы):

$ curl api.mysite.com/v1/ -v
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 123.123.123.123...
* TCP_NODELAY set
* Connected to api.mysite.com (123.123.123.123) port 80 (#0)
> GET /v1/ HTTP/1.1
> Host: api.mysite.com
> User-Agent: curl/7.55.1
> Accept: */*
>
< HTTP/1.1 404 Not Found
< Server: gunicorn/19.9.0
< Date: Mon, 24 Jun 2019 00:01:34 GMT
< Content-Type: text/html
< X-Frame-Options: SAMEORIGIN
< Content-Length: 77
< Via: 1.1 google
<
{ [77 bytes data]
100    77  100    77    0     0     77      0  0:00:01 --:--:--  0:00:01   706
* Connection #0 to host api.mysite.com left intact
<h1>Not Found</h1><p>The requested resource was not found on this server.</p>

$ curl api.mysite.com/v2/ -v
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 123.123.123.123...
* TCP_NODELAY set
* Connected to api.mysite.com (123.123.123.123) port 80 (#0)
> GET /v2/ HTTP/1.1
> Host: api.mysite.com
> User-Agent: curl/7.55.1
> Accept: */*
>
< HTTP/1.1 404 Not Found
< Server: gunicorn/19.9.0
< Date: Mon, 24 Jun 2019 00:01:37 GMT
< Content-Type: text/html
< X-Frame-Options: SAMEORIGIN
< Content-Length: 77
< Via: 1.1 google
<
{ [77 bytes data]
100    77  100    77    0     0     77      0  0:00:01 --:--:--  0:00:01   987
* Connection #0 to host api.mysite.com left intact
<h1>Not Found</h1><p>The requested resource was not found on this server.</p>

$ curl api.mysite.com/v1 -v
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 123.123.123.123...
* TCP_NODELAY set
* Connected to api.mysite.com (123.123.123.123) port 80 (#0)
> GET /v1 HTTP/1.1
> Host: api.mysite.com
> User-Agent: curl/7.55.1
> Accept: */*
>
< HTTP/1.1 404 Not Found
< Date: Mon, 24 Jun 2019 00:01:40 GMT
< Content-Length: 21
< Content-Type: text/plain; charset=utf-8
< Via: 1.1 google
<
{ [21 bytes data]
100    21  100    21    0     0     21      0  0:00:01 --:--:--  0:00:01   269
* Connection #0 to host api.mysite.com left intact
default backend - 404

$ curl api.mysite.com/v2 -v
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 123.123.123.123...
* TCP_NODELAY set
* Connected to api.mysite.com (123.123.123.123) port 80 (#0)
> GET /v2 HTTP/1.1
> Host: api.mysite.com
> User-Agent: curl/7.55.1
> Accept: */*
>
< HTTP/1.1 404 Not Found
< Date: Mon, 24 Jun 2019 00:01:44 GMT
< Content-Length: 21
< Content-Type: text/plain; charset=utf-8
< Via: 1.1 google
<
{ [21 bytes data]
100    21  100    21    0     0     21      0  0:00:01 --:--:--  0:00:01   333
* Connection #0 to host api.mysite.com left intact
default backend - 404

1 Ответ

0 голосов
/ 25 июня 2019

Чтобы воспроизвести проблему, я следовал за следующей документацией, которая объясняет, как настроить балансировку нагрузки HTTP с Ingress, затем в качестве дополнительной функции вы можете зарезервировать статический IP-адрес и обслуживать несколько приложений на одном и том же балансировщике нагрузки.

Он отлично работает для меня, следуя приведенному выше адресу шаг за шагом:

https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer

Надеюсь, у вас это получится.

...