您正在对 Kubernetes 中启用 SSL 的服务器端口使用纯 HTTP
Posted
技术标签:
【中文标题】您正在对 Kubernetes 中启用 SSL 的服务器端口使用纯 HTTP【英文标题】:You're speaking plain HTTP to an SSL-enabled server port in Kubernetes 【发布时间】:2020-06-24 14:33:02 【问题描述】:我的网关文件是
api版本:networking.istio.io/v1alpha3 种类:网关 元数据: 名称:我的网关安全 命名空间:myapp 规格: 选择器: istio: ingressgateway # 使用 istio 默认控制器 服务器: - 港口: 数量:443 名称:https 协议:HTTPS tls: 模式:简单 服务器证书:/etc/istio/ingressgateway-certs/tls.crt 私钥:/etc/istio/ingressgateway-certs/tls.key #caCertificates: /etc/istio/ingressgateway-ca-certs/kbundle.crt 主持人: - “*” api版本:networking.istio.io/v1alpha3 种类:虚拟服务 元数据: 名称:我的网关服务安全 命名空间:myapp 规格: 主持人: - “sub.domaincom” 网关: - 我的网关安全 网址: - 路线: - 目的地: 主持人:我的单声道 港口: 数量:443 协议:TCP我的服务文件是
api版本:v1 种类:服务 元数据: 名称:我的单声道 命名空间:myapp 标签: 层:后端 规格: 选择器: 应用程序:我的单声道 层:后端 端口: - 端口:443 名称:https 协议:TCP部署文件如下
api版本:应用程序/v1 种类:部署 元数据: 名称:我的单声道 命名空间:myapp 规格: 复制品:1 选择器: 匹配标签: 应用程序:我的单声道 模板: 元数据: 标签: 应用程序:我的单声道 规格: 容器: - 名称:我的单声道 图片:myapacheimage imagePullPolicy:从不 端口: - 容器端口:443当我使用网关访问我的服务时,它说
错误的请求 您的浏览器发送了此服务器无法理解的请求。 原因:您对启用 SSL 的服务器端口使用纯 HTTP。 请改用 HTTPS 方案访问此 URL。 Apache/2.4.38 (Debian) 服务器位于 10.0.159.77 端口 443我可以确认 apache 只监听 443 并且配置正确
【问题讨论】:
在网址中使用https? 是的,我正在使用 https 访问 协议:TCP应该是HTTPS吗? 10.0.159.77 是什么IP? 在服务声明中是不允许的,在网关的服务声明中它不会显示任何不同的结果。 【参考方案1】:您的配置在 istio 网关上使用 TLS
终结点。因此,进入 istio 入口的 HTTPS
流量在到达您的服务端点之前会被解密为纯 HTTP
流量。
要解决此问题,您需要配置 HTTPS
对 HTTPS
服务的入口访问,即配置入口网关以执行 SNI
直通,而不是 TLS
终止传入请求。
您可以在 istio 文档指南 here 中找到没有 TLS
终止的 Ingress Gateway 示例。
您的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
希望对你有帮助。
【讨论】:
最佳答案。非常感谢我想通了。但我对主机值和 sni_hosts 有一些困惑。您的回答帮助我彻底解决了这个问题。非常感谢。以上是关于您正在对 Kubernetes 中启用 SSL 的服务器端口使用纯 HTTP的主要内容,如果未能解决你的问题,请参考以下文章
如何在 GKE 上为 Kubernetes Ingress 强制 SSL