在OpenShift上部署Istio 1.1.2之后,便有一条istio-ingressgateway路由及其相关的服务和pod。
我已经成功地使用该入口网关来访问应用程序,并使用*作为主机来配置网关和VirtualService。
但是我想配置一个域(例如insuranceinc.es)来访问该应用程序。根据文档,我具有以下Istio配置:
网关:
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调用...
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主机的。因此,我更改了卷曲以发送Host: insuranceinc.es
标头:
curl -H "Host: insuranceinc.es" http://istio-ingressgateway-istio-system.apps.mycluster.com/login
现在我遇到503错误,并且istio-ingressgateway窗格中没有日志。
应用程序不可用
应用程序当前不在此端点上处理请求。它可能尚未启动或仍在启动。
这意味着该istio-ingressgateway路由-> service-> poc尚未处理该请求。
由于它是Openshift Route
,因此必须使用包含路由主机istio-ingressgateway-istio-system.apps.mycluster.com
的Host标头。实际上,如果我发送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路由)?
答案 0 :(得分:0)
您需要在istio-system名称空间中创建一个openshift路由,以与您创建的主机名相关。
例如:
oc -n istio-system get routes
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD
gateway1-lvlfn insuranceinc.es istio-ingressgateway <all> None