写点什么

Flomesh Ingress 的 SSL 透传

作者:Flomesh
  • 2022 年 9 月 19 日
    北京
  • 本文字数:1690 字

    阅读完需:约 6 分钟

Flomesh Ingress 的 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 INSTALL_K3S_VERSION=v1.23.8+k3s1curl -sfL https://get.k3s.io | sh -s - --disable traefik --write-kubeconfig-mode 644 --write-kubeconfig ~/.kube/config
复制代码

安装 FSM

通过 Helm 安装 FSM。在安装时通过参数 fsm.ingress.tls=true 开启 TLS,并使用 fsm.ingress.sslPassthrough=true 开启 SSL 透传。

helm repo add fsm https://charts.flomesh.io
helm install --namespace flomesh --create-namespace --set fsm.ingress.sslPassthrough=true --set fsm.ingress.tls=true fsm fsm/fsm
复制代码

确认相应组件 pod 启动并正常运行。

kubectl get po -n flomeshNAME                                           READY   STATUS    RESTARTS   AGEfsm-repo-5f48d67d5f-5b6sx                      1/1     Running   0          5m11sfsm-manager-5b7b5d45c7-bwh74                   1/1     Running   0          5m11sfsm-bootstrap-6b4bb46bd5-7sx2c                 1/1     Running   0          5m11sfsm-ingress-pipy-89b98f48c-cjtrh               1/1     Running   0          5m11sfsm-cluster-connector-local-6769c796bc-7vsdl   1/1     Running   0          2m35s
复制代码

获取 Ingress 的 IP 和 端口。

export ingress_host="$(kubectl -n flomesh get service fsm-ingress-pipy-controller -o jsonpath='{.status.loadBalancer.ingress[0].ip}')"export ingress_port="$(kubectl -n flomesh get service fsm-ingress-pipy-controller -o jsonpath='{.spec.ports[?(@.name=="https")].port}')"
复制代码

测试

为简单起见,这里我们不部署上游服务,而是直接将 https://httpbin.org 作为上游,通过 curl 的 revolve 参数,将其解析到上面拿到的 ingress 地址。如果 ingress 的端口不是 433,可以使用 connect-to 参数 --connect-to httpbin.org:443:$ingress_host:$ingress_port

curl https://httpbin.org/get -i --resolve httpbin.org:443:$ingress_hostHTTP/2 200date: Thu, 25 Aug 2022 10:38:07 GMTcontent-type: application/jsoncontent-length: 255server: gunicorn/19.9.0access-control-allow-origin: *access-control-allow-credentials: true
{ "args": {}, "headers": { "Accept": "*/*", "Host": "httpbin.org", "User-Agent": "curl/7.79.1", "X-Amzn-Trace-Id": "Root=1-6307510f-41d9e18227b758760ed9289f" }, "origin": "16.163.102.75", "url": "https://httpbin.org/get"}
复制代码

总结

SSL 透传有优点也有缺点,需要根据使用场景来灵活选择是使用 SSL 透传还是 SSL 卸载。

发布于: 刚刚阅读数: 4
用户头像

Flomesh

关注

微信订阅号:flomesh 2022.04.07 加入

一站式云原生应用流量管理供应商 官网:https://flomesh.io

评论

发布
暂无评论
Flomesh Ingress 的 SSL 透传_Flomesh_InfoQ写作社区