Конфигурация трафика OpenShift и Istio Gateway для доступа через внешний домен - PullRequest
2 голосов
/ 12 апреля 2019

После развертывания Istio 1.1.2 в OpenShift существует маршрут прохода через вход с соответствующей службой и модулем.

Я успешно использовал этот входной шлюз для доступа к приложению, настраивая шлюз и VirtualService, используя * в качестве хостов.

Однако я хотел бы настроить домен, например insuranceinc.es, для доступа к приложению. Согласно документации у меня есть этот конфиг Istio:

Gateway:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: insuranceinc-gateway
  namespace: istio-insuranceinc
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "insuranceinc.es"

VirtualService

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: insuranceinc
  namespace: istio-insuranceinc
spec:
  hosts:
    - insuranceinc.es
  gateways:
    - insuranceinc-gateway
  http:
    - route:
        - destination:
            host: insuranceinc-web
            port:
              number: 8080

Если я сделаю этот вызов завитка ...

curl http://istio-ingressgateway-istio-system.apps.mycluster.com/login

... Я вижу ошибку 404 в модуле входного шлюза:

[2019-04-12T15:27:51.765Z] "GET /login HTTP/1.1" 404 NR "-" 0 0 1 - "xxx" "curl/7.54.0" "xxx" "istio-ingressgateway-istio-system.apps.mycluster.com" "-" - - xxx -

Это имеет смысл, поскольку оно не приходит от хоста insuranceinc.es. Поэтому я изменяю curl для отправки заголовка Host: insuranceinc.es:

curl -H "Host: insuranceinc.es" http://istio-ingressgateway-istio-system.apps.mycluster.com/login

Теперь я получаю ошибку 503, и в модуле istio-ingressgateway нет журналов.

Приложение недоступно

В данный момент приложение не обслуживает запросы в этой конечной точке. Возможно, он не был запущен или все еще запускается.

Это означает, что запрос не был обработан этим istio-ingressgateway route-> service-> poc.

Так как это Openshift Route, он должен нуждаться в заголовке Host, содержащем маршрутный хост istio-ingressgateway-istio-system.apps.mycluster.com. Фактически, если я отправляю curl -H "Host: istio-ingressgateway-istio-system.apps.mycluster.com" http://istio-ingressgateway-istio-system.apps.mycluster.com/login, он обрабатывается входным шлюзом istio, возвращающим 404.

Итак, как я могу отправить свой заголовок Host insuranceinc.es и также добраться до входного шлюза istio (который на самом деле является маршрутом OpenShift)?

1 Ответ

0 голосов
/ 08 июля 2019

Вам необходимо создать маршрут openshift в пространстве имен istio-system для связи с именем хоста, который вы создали.

Например:

oc -n istio-system get routes
NAME              HOST/PORT                                            PATH      SERVICES               PORT      TERMINATION   WILDCARD
gateway1-lvlfn    insuranceinc.es                                                istio-ingressgateway   <all>                   None
...