你说的是 Kubernetes 中启用了 SSL 的服务器端口的简单 HTTP



我的网关文件是

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流量。


要解决此问题,您需要配置HTTPSHTTPS服务的入口访问,即配置入口网关以执行SNI直通,而不是在传入请求时终止TLS

您可以在istio文档指南中找到一个没有TLS终端的入口网关示例。


您的GatewayVirtualService应该如下所示:

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

希望能有所帮助。

最新更新