主机匹配不在istio网关中工作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了主机匹配不在istio网关中工作相关的知识,希望对你有一定的参考价值。

我跟着this tutorial安装了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

我更改了hostsgateway部分中的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

答案

如果您正在执行curl http://bookinfo.com/productpage,只有在您为该IP地址完成了主机文件条目后,它才会起作用。

或者更好的方法是在curl请求中明确发送标头:

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

如果你仍然无法做到,那就让我吧。

另一答案

你已经设置了路径/productpage的路线,那么你的VirtualService中的你的destination.host应该匹配你的VirtualService名称就是你的“bookinfo”

然后运行curl命令

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

请注意,您使用-H标志将Host HTTP Header设置为“bookinfo.com”。这是必需的,因为您的入口网关配置为处理“bookinfo.com”。

以上是关于主机匹配不在istio网关中工作的主要内容,如果未能解决你的问题,请参考以下文章

Istio 网关之南北向流量管理(内含服务网格专家亲自解答)

在MFC中如何获取电脑IP 主机名 网关 MAC 子网掩码等

Istio像鸟一样轻盈?微网关博客系列

Android Studio Map setOnMarkerClickListener 不在片段上工作

K8S Istio 入口网关 (Ingress Gateway)

API 网关 - ALB:主机名/IP 与证书的替代名称不匹配