Flomesh Ingress 使用实践(四)TLS 透传

文章介绍了Flomesh流量管理体系中的FSM组件,特别是其SSL透传功能。SSL透传在保证数据加密不被代理解密的情况下转发到上游服务器,确保了数据安全性。文章提供了一个使用Helm在K3s集群上安装FSM并启用SSL透传的示例,以及通过curl测试SSL连接的流程。

在这里插入图片描述

FSM 是 Flomesh 流量管理体系的一个开源组件,用于 Kubernetes 南北向的流量管理。FSM 以可编程代理 Pipy 为核心,提供了 Ingress 管理器、Gateway API* 实现、负载均衡器以及跨集群的服务注册发现等功能。

在文章 《使用 Flomesh Ingress 管理 osm-edge 服务网格入口流量》 中,我们使用 Flomesh Ingress 来服务网格的入口流量管理。实际上 Flomesh Ingress 的功能还有很多,我们后续会一一介绍。

今天就为大家介绍 Flomesh Ingress 的 SSL 透传功能。

什么是 SSL 透传

SSL(Secure Socket Layer)也被称作 TLS(Transport Layer Security),其通过加密的方式来保护客户端与服务端的安全通信。

在这里插入图片描述

SSL 透传(SSL Passthrough)是代理服务器处理 SSL 请求的两种方式之一(另一种是 SSL offload)。在 SSL 透传模式下,代理不会解密来自客户端的 SSL 请求,而是将其传递到上游服务器进行解密,这就意味着数据在通过代理的时候保持加密的状态,以此来保证重要和敏感数据的安全性。

SSL 透传的优点

  • 由于数据不在代理上解密,而是以加密的方式转发到上游服务器,数据可以免受网络攻击。
  • 加密数据未经解密到达上游服务,确保了数据的机密性。
  • 这也是代理配置 SSL 的最简单方法。

SSL 透传的缺点

  • 流量中可能会恶意代码,这些代码将直接到达后端服务器。
  • 在 SSL 透传过程中,无法切换服务器。
  • 无法做 7 层流量处理。

接下来我们看下,如何使用 FMS Ingress 的 SSL 透传。

Demo

环境准备

使用单节点的 K3s 集群,并禁用 traefik。

export 
<think>嗯,用户之前问过关于Ingress和服务网格的问题,现在他们想知道Ingress是否可以代理WebSocket(WS)。首先,我需要确认用户对Ingress的理解程度,可能他们已经知道Ingress的基本功能,但想深入具体协议支持。 用户可能是在部署需要WebSocket的应用,比如实时聊天、在线游戏或者实时数据更新服务,这些场景下WebSocket是必须的。他们可能遇到了配置问题,或者在选择Ingress控制器时犹豫不决,想知道主流的Ingress是否支持。 我需要先回答是否支持,然后解释为什么支持,以及如何配置。需要提到常见的Ingress控制器,比如Nginx、Traefik、HAProxy,因为它们各自处理WebSocket的方式可能不同。同时,用户可能会关心是否需要额外配置,比如注解或者超时设置,以避免连接断开。 另外,用户可能想知道在Kubernetes中配置Ingress代理WebSocket的具体步骤,或者常见问题。比如,是否需要启用SSL,或者如何处理长连接。还需要提到一些注意事项,比如超时时间的调整,确保WebSocket连接不会因为默认设置而中断。 可能用户的问题背后是想确保他们的实时应用能够稳定运行,所以需要强调不同控制器的配置差异和最佳实践。同时,确认虽然Ingress支持,但需要正确配置,否则可能出现问题。最后,可能需要对比服务网格如Istio的情况,但用户这次的问题集中在Ingress,所以可以简要提一下Istio的Gateway是否更好,但主要回答Ingress的支持情况。</think>关于Ingress对WebSocket(WS)协议的支持,以下是逐步分析: --- ### **1. 基础结论** ✅ **主流Ingress控制器(Nginx/Traefik/HAProxy)均支持WebSocket代理**,但需要显式配置才能正常工作。 --- ### **2. 技术原理** #### **为什么需要特殊配置?** - **协议升级机制**:WebSocket通过HTTP `Upgrade`头实现协议切换: ```http GET /chat HTTP/1.1 Host: example.com Upgrade: websocket Connection: Upgrade ``` - **长连接特性**:WebSocket需要保持持久连接(默认Ingress配置可能主动断开空闲连接) #### **Ingress处理关键点** $$ \text{客户端} \xrightarrow[\text{握手}]{\text{HTTP Upgrade}} \text{Ingress} \xrightarrow{\text{维持TCP长连接}} \text{后端Pod} $$ --- ### **3. 具体配置方法** #### **以Nginx Ingress为例** ```yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ws-ingress annotations: # 核心配置:启用WebSocket支持 nginx.org/websocket-services: "ws-service" # 指定后端Service名称 # 调整超时设置(默认60秒可能过短) nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" spec: rules: - host: ws.example.com http: paths: - path: / pathType: Prefix backend: service: name: ws-service port: number: 8080 ``` #### **其他控制器对比** | 控制器 | 配置方式 | 关键参数 | |----------|-----------------------------------|------------------------| | Traefik | 自动检测`Upgrade`头 | 无需特殊注解 | | HAProxy | 需要添加`ingress.kubernetes.io/connection-proxy-header`注解 | 配置`Connection`头处理 | --- ### **4. 验证方法** ```bash # 查看Ingress日志确认握手成功 kubectl logs -n ingress-nginx <ingress-pod> | grep "Upgrade" # 使用wscat测试连接 wscat -c ws://ws.example.com/chat ``` --- ### **5. 常见问题排查** | 现象 | 解决方案 | |---------------------|-----------------------------------| | 101 Switching Protocols 错误 | 检查`Upgrade`头是否 | | 连接频繁断开 | 调整`proxy-read-timeout`参数 | | HTTPS下无法连接 | 确认证书有效性 & 启用`wss://`协议 | --- ### **6. 服务网格的差异** Istio Gateway同样支持WebSocket,且提供额外优势: ```yaml # Istio VirtualService配置示例 apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: ws-route spec: hosts: - ws.example.com gateways: - public-gateway http: - match: - uri: prefix: / route: - destination: host: ws-service # 显式声明协议升级 websocketUpgrade: true ``` --- ### **最终建议** - 对于纯WebSocket场景,使用Nginx/Traefik Ingress足够 - 如需混合HTTP/WS流量并需要高级策略,可考虑Istio Gateway - 生产环境务必配置**wss://**(WebSocket over TLS)确保安全
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PipyFlomesh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值