Вход GKE не будет правильно переписывать пути - PullRequest
0 голосов
/ 15 апреля 2019

Я недавно настроил вход nginx в GKE, и каким-то образом вход не может правильно переписать путь для мини-приложений (laravel lumen) внутри целевых модулей для разрешения.Приложения имеют функцию под названием «тестирование», которая будет печатать «тестирование одного» и «тестирование двух» для «альфа» и «бета».функция должна быть доступна через http://<base_url>/public/testing.

Внутри входного yaml определены два пути: /alpha/* и /beta/*, каждый из которых будет указывать на две службы lumen-alpha-svc и lumen-beta-svc.У меня нет домена для этого входа, поэтому я оставил «host» во входе неопределенным, и вход все еще должен быть доступен по внешнему IP-адресу, предоставленному GKE для входа.

Я проверил входобращаясь к http://<external-ip-address>/alpha/public/testing/ по обоим входным путям, я получил ошибку HTTP 404, и я все еще путаюсь с этим.Итак, я настроил новый сервис под названием path-check-svc и добавил новый путь /check/* во входе, который будет указывать на сервис.Затем служба указывает на программу nodejs, которая напечатает путь URL.Я проверил путь, открыв http://<external-ip-address>/check/something/, и nodejs вернул URL-путь /check/something/.Это делает меня еще более запутанным.Поскольку входной путь определяется с помощью /check/* для перенаправления его в path-check-svc, разве это не оставит путь для перехваченной программы только до /something/?Это заставило меня понять, что именно это вызвало ошибку http 404 в приложениях lumen, поскольку она не смогла разрешить http://<external-ip-address>/alpha/public/testing/, поскольку приложения lumen не знают, что такое /alpha/.

Так какЯ определил вход, чтобы URL-адрес можно было переписать в действительный URL-адрес, чтобы приложения могли его перехватить.Спасибо.

Это файл yaml для kubernetes

apiVersion: apps/v1
kind: Deployment
metadata:
  name: lumen-alpha
  labels:
    app: lumen-alpha
spec:
  selector:
    matchLabels:
      app: lumen-alpha
  template:
    metadata:
      labels:
        app: lumen-alpha
    spec:
      containers:
        - image: husnurrsyafni/lumen-test-alpha:php
          name: lumen-test-alpha                 
          ports:
            - containerPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: lumen-beta
  labels:
    app: lumen-beta
spec:
  selector:
    matchLabels:
      app: lumen-beta
  template:
    metadata:
      labels:
        app: lumen-beta
    spec:
      containers:
        - image: husnurrsyafni/lumen-test-beta:php
          name: lumen-test-beta                 
          ports:
            - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: lumen-alpha-svc
spec:
  type: NodePort
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  selector:
    app: lumen-alpha
---
apiVersion: v1
kind: Service
metadata:
  name: lumen-beta-svc
spec:
  type: NodePort
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  selector:
    app: lumen-beta
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: lumen-ingress
  annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
  - http:
      paths:
      - path: /alpha/*
        backend:
          serviceName: lumen-alpha-svc
          servicePort: 80
      - path: /beta/*
        backend:
          serviceName: lumen-beta-svc
          servicePort: 80

1 Ответ

0 голосов
/ 16 апреля 2019

Если вы хотите сделать nginx.ingress.kubernetes.io/rewrite-target аннотацию, вам нужно создать свой собственный nginx входной контроллер и его сервис .

Или используйте шлем (желательно):

helm install stable/nginx-ingress

Контроллер входа, предоставленный GKE, не поддерживает rewrite-target

...