Соответствие хоста не работает в шлюзе istio - PullRequest
0 голосов
/ 11 февраля 2019

Я следовал этому руководству для установки istio, а также развернул пример приложения bookinfo.

У них есть следующий ingress-gateway.yml файл

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: bookinfo-gateway
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: bookinfo
spec:
  hosts:
  - "*"
  gateways:
  - bookinfo-gateway
  http:
  - match:
    - uri:
        exact: /productpage
    - uri:
        exact: /login
    - uri:
        exact: /logout
    - uri:
        prefix: /api/v1/products
    route:
    - destination:
        host: productpage
        port:
          number: 9080

КогдаЯ делаю kubectl apply -f ingress-gateway.yml, он отлично работает, и я могу получить доступ к приложению на http://<ip>/productpage

Однако, если я хочу получить к нему доступ в определенном домене, например, bookinfo.com

Я изменилв поле hosts в разделах gateway и VirtualService и добавили запись в мой файл /etc/hosts.

Итак, оно изменилось на следующее

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: bookinfo-gateway
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "bookinfo.com"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: bookinfo
spec:
  hosts:
  - "bookinfo.com"
  gateways:
  - bookinfo-gateway
  http:
  - match:
    - uri:
        exact: /productpage
    - uri:
        exact: /login
    - uri:
        exact: /logout
    - uri:
        prefix: /api/v1/products
    route:
    - destination:
        host: productpage
        port:
          number: 9080

КогдаЯ пытаюсь получить доступ к http://bookinfo.com/productpage, это дает 404 не найдено.Чего мне не хватает?

PS: я использую istio1.0.5

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Вы уже установили маршрут к пути /productpage, тогда ваш destination.host в вашем VirtualService должен соответствовать вашему VirtualService имени, в вашем случае это "bookinfo"

Затем выполните команду curl

curl -I -HHost:bookinfo.com http://$INGRESS_HOST:$INGRESS_PORT/productpage

Обратите внимание, что вы используете флаг -H для установки HTTP-заголовка хоста на «bookinfo.com».Это необходимо, потому что ваш входной шлюз настроен для обработки «bookinfo.com».

0 голосов
/ 12 февраля 2019

Если вы делаете curl http://bookinfo.com/productpage, это сработает, только если вы сделали запись в файле hosts для этого ip-адреса.

Или лучший способ сделать это - явная отправка заголовка в вашем запросе curl:

curl <ip:port>/productpage --header 'Host: bookinfo.com'

Если вы все еще не можете это сделать, позвольте мне сейчас.

...