我的网关文件是
apiVersion:networking.istio.io/v1alpha3种类:网关元数据:name:我的网关安全命名空间:myapp规格:选择器:istio:ingressgateway#使用istio默认控制器服务器:-端口:编号:443名称:https协议:HTTPStls:模式:SIMPLE服务器证书:/etc/istio/ingressgateway certs/tls.crtprivateKey:/etc/istio/ingressgateway certs/tls.key#ca证书:/etc/istio/ingressgateway ca证书/kbundle.crt主机:-"*"apiVersion:networking.istio.io/v1alpha3种类:VirtualService元数据:名称:我的网关服务安全命名空间:myapp规格:主机:-"sub.domain.com"网关:-我的网关安全http:-路线:-目的地:主持人:我的单声道端口:编号:443协议:TCP
并且我的服务文件是
apiVersion:v1种类:服务元数据:名称:我的单声道命名空间:myapp标签:层:后端规格:选择器:应用程序:我的单声道层:后端端口:-端口:443名称:https协议:TCP
部署文件为
apiVersion:apps/v1kind:部署元数据:名称:我的单声道命名空间:myapp规格:副本:1选择器:匹配标签:应用程序:我的单声道模板:元数据:标签:应用程序:我的单声道规格:容器:-名称:我的单声道图片:肌强直imagePullPolicy:从不端口:-containerPort:443
当我使用网关访问我的服务时,它说
错误请求您的浏览器发送了一个此服务器无法理解的请求。原因:您对启用SSL的服务器端口使用的是纯HTTP。请改用HTTPS方案访问此URL。Apache/2.4.38(Debian(服务器10.0.159.77端口443
我可以确认Apache只在443上侦听,并且已正确配置
您的配置使用istio-gateway上的TLS
终止。因此,进入istio-ingress的HTTPS
流量在到达Your服务端点之前被解密为普通HTTP
流量。
要解决此问题,您需要配置HTTPS
对HTTPS
服务的入口访问,即配置入口网关以执行SNI
直通,而不是在传入请求时终止TLS
。
您可以在istio文档指南中找到一个没有TLS
终端的入口网关示例。
您的Gateway
和VirtualService
应该如下所示:
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: my-gateway-secure
namespace: myapp
spec:
selector:
istio: ingressgateway # use istio default controller
servers:
- port:
number: 443
name: https
protocol: HTTPS
tls:
mode: PASSTHROUGH
hosts:
- "*"
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: my-gateway-service-secure
namespace:myapp
spec:
hosts:
- "sub.domaincom"
gateways:
- my-gateway-secure
tls:
- match:
- port: 443
sni_hosts:
- "sub.domaincom"
route:
- destination:
host: my-mono
port:
number: 443
希望能有所帮助。