写点什么

Istio Gateway 的典型应用 --《云原生服务网格 Istio》书摘 07

  • 2019-12-27
  • 本文字数:3142 字

    阅读完需:约 10 分钟

Istio Gateway的典型应用--《云原生服务网格Istio》书摘07

Gateway 的典型应用

下面认识 Gateway 的几种典型应用。


1.将网格内的 HTTP 服务发布为 HTTP 外部访问


3.4.1 节的配置示例介绍了将一个内部的 HTTP 服务通过 Gateway 发布出去的典型场景。如图 3-53 所示,外部服务通过域名http://weather.com访问到应用的入口服务 frontend。VirtualService 本身定义了 frontend 服务从内部和外部访问同样的路由规则,即根据内容的不同,将请求路由到 v2 版本或 v1 版本。注意,这里 Gateway 的协议是 HTTP。



图 3-53 将网格内的 HTTP 服务发布为 HTTP 外部访问


2.将网格内的 HTTPS 服务发布为 HTTPS 外部访问


在实际使用中更多的是配置 HTTPS 等安全的外部访问。例如,在这个场景中,将网格内的 HTTPS 服务通过 HTTPS 协议发布。这样在浏览器端中输入“https://weather.com”就可以访问到这个服务,如图 3-54 所示。



图 3-54 将网格内的 HTTPS 服务发布为 HTTPS 外部访问


如下所示是这种场景的 Gateway 配置,重点是:端口为 443,协议为 HTTPS,TLS 模式为 PASSTHROUGH,表示 Gateway 只透传应用程序提供的 HTTPS 内容。在本示例中,frontend 入口服务自身是 HTTPS 类型的服务,TLS 需要的服务端证书、密钥等都是由 frontend 服务自己维护的。这时要对 frontend 服务做路由管理,在 VirtualService 中需要配置支持 TLSRoute 规则,如果没有配置,则流量会被当作 TCP 处理:


apiVersion: networking.istio.io/v1alpha3


kind: Gateway


metadata:


name: istio-gateway


namespace: istio-system


spec:


selector:


app: ingress-gateway


servers:


- port:


number: 443


name: https


protocol: HTTPS


hosts:


- weather.com


tls:


mode: PASSTHROUGH


这时,Istio 只是通过 Gateway 将一个内部的 HTTPS 服务发布出去。Istio 提供了通道和机制,HTTPS 的证书及网格外部 HTTPS 客户端如何访问 frontend 服务都是 frontend 服务自己的事情。这里的 HTTPS 是应用程序的 HTTPS,不是 Istio 的 Gateway 提供的 HTTPS。对于自身的服务已经是 HTTPS 的应用,Istio 支持通过这种方式把服务发布成外部可访问,但更推荐的是下面的做法,即将网格内一个 HTTP 的服务通过 Gateway 发布为 HTTPS 外部访问。


3.将网格内的 HTTP 服务发布为 HTTPS 外部访问


与上一个场景类似,要求网格外部通过 HTTPS 访问入口服务,差别为服务自身是 HTTP,在发布的时候通过 Gateway 的配置可以提供 HTTPS 的对外访问能力。如图 3-55 所示,外部通过 HTTPS 访问,入口服务 frontend 是 HTTP 服务。



图 3-55 将网格内 HTTP 服务发布为 HTTPS 外部访问


这时配置 Gateway 如下,可以看到端口为 443,协议为 HTTPS。与前一种场景的入口服务自身为 HTTPS 不同,这里的 TLS 模式是 SIMPLE,表示 Gateway 提供标准的单向 TLS 认证。这时需要通过 serverCertificate 和 privateKey 提供服务端证书密钥。从图 3-55 也可以看到 TLS 认证的服务端是在入口的 Envoy 上创建的,入口服务 frontend 本身保持原有的 HTTP 方式:


apiVersion: networking.istio.io/v1alpha3


kind: Gateway


metadata:


name: istio-gateway


namespace: istio-system


spec:


selector:


app: ingress-gateway


servers:


- port:


number: 443


name: https


protocol: HTTPS


hosts:


- weather.com


tls:


mode: SIMPLE


serverCertificate: /etc/istio/gateway-weather-certs/server.pem


privateKey: /etc/istio/gateway-weather-certs/privatekey.pem


这种方式又被称为终结的 HTTPS,在 Gateway 外面是 HTTPS,但从 Gateway 往里的服务间访问还是 HTTP。入口处作为 Gateway 的 Envoy,一方面作为服务提供者的入口代理,将 frontend 服务以 HTTPS 安全协议发布出去;另一方面作为服务消费者的代理,以 HTTP 向 frontend 服务发起请求。正因为有了后面这种能力,对于 frontend 服务上的路由仍然可以使用 HTTP 的路由规则。


这种方式既可以提供第 1 种 HTTP 发布同样的灵活性,又可以满足第 2 种场景要求的入口安全访问。在 Gateway 服务发布时提供了安全的能力,对服务自身的代码、部署及网格内部的路由规则的兼容都没有影响,因此是推荐的一种做法。


4.将网格内的 HTTP 服务发布为双向 HTTPS 外部访问


对于大多数场景,使用上面的方式将入口的 HTTP 服务发布成标准的 HTTPS 就能满足需要。在某些场景下,比如调用入口服务的是另一个服务,在服务端需要对客户端进行身份校验,这就需要用到 TLS 的双向认证,如图 3-56 所示。



图 3-56 将网格内 HTTP 服务发布为双向 HTTPS 外部访问


这种方式的主要流程和第 3 种场景单向认证类似,都是在入口处 Gateway 角色的 Envoy 上开放 HTTPS 服务,外部 HTTPS 请求在 Gateway 处终止,内部 VirtualService 的路由配置仍然是 HTTP。


在如下配置方式中,可以看到,双向认证和单向认证的差别在于,Gateway 上的模式被设定为 MUTUAL 时表示双向认证,同时,为了支持双向认证,除了要配置通过 serverCertificate 和 privateKey 提供服务端证书密钥,还需要提供 caCertificates 来验证客户端的证书,从而实现和调用方的双向认证:


apiVersion: networking.istio.io/v1alpha3


kind: Gateway


metadata:


name: istio-gateway


namespace: istio-system


spec:


selector:


app: ingress-gateway


servers:


- port:


number: 443


name: https


protocol: HTTPS


hosts:


- weather.com


tls:


mode: MUTUAL


serverCertificate: /etc/istio/gateway-weather-certs/server.pem


privateKey: /etc/istio/gateway-weather-certs/privatekey.pem


caCertificates: /etc/istio/gateway-weather-certs/ca-chain.cert.pem


5.将网格内的 HTTP 服务发布为 HTTPS 外部访问和 HTTPS 内部访问


除了以上几种方式,有没有一种方式可以将一个 HTTP 服务通过 Gateway 发布为 HTTPS 服务?同时在网格内部也是 HTTPS 的双向认证?当然有,这是 Istio 安全能力的主要场景,如图 3-57 所示,不用修改代码,HTTP 服务在网格内和网格外都是 HTTPS 安全方式互访。



图 3-57 将网格内的 HTTP 服务发布为 HTTPS 外部访问和 HTTPS 内部访问


这里的 Gateway 的 Manifest 和场景 3 完全相同,不再重复介绍。


我们只需知道 Istio 可以透明地给网格内的服务启用双向 TLS,并且自动维护证书和密钥。入口 Gateway 和入口服务 frontend 在这种场景下的工作机制如下:


  • frontend 服务自身还是 HTTP,不涉及证书密钥的事情;

  • Gateway 作为 frontend 服务的入口代理,对外提供 HTTPS 的访问。外部访问到的是在 Gateway 上发布的 HTTPS 服务,使用 Gateway 上的配置提供服务端证书和密钥;

  • Gateway 作为外部服务访问 frontend 服务的客户端代理,对 frontend 服务发起另一个 HTTPS 请求,使用的是 Citadel 分发和维护的客户端证书和密钥,与 frontend 服务的服务端证书和密钥进行双向 TLS 认证和通信。


注意:入口服务通过 Gateway 发布成 HTTPS,结合 Istio 提供的透明双向 TLS,在入口的 Envoy 上是两套证书密钥,一套是 Gateway 对外发布 HTTPS 服务使用的,另一套是 Istio 提供的网格内双向 TLS 认证,两者没有任何关系。


下面通过如表 3-6 所示的 Gateway 上的服务发布方式比较来理解以上几种场景。



表 3-6 Gateway 上的服务发布方式比较


此外,在 Gateway 上一般都是发布多个服务,如下所示为配置多个 Server 元素:


apiVersion: networking.istio.io/v1alpha3


kind: Gateway


metadata:


name: istio-gateway


namespace: istio-system


spec:


selector:


app: ingress-gateway


servers:


- port:


number: 443


name: https


protocol: HTTPS


hosts:


- weather.com


tls:


mode: MUTUAL


serverCertificate: /etc/istio/gateway-weather-certs/server.pem


privateKey: /etc/istio/gateway-weather-certs/privatekey.pem


caCertificates: /etc/istio/gateway-weather-certs/ca-chain.cert.pem


- port:


number: 80


name: http


protocol: HTTP


hosts:


- weather2.com


2019-12-27 13:493069

评论

发布
暂无评论
发现更多内容

探索工业互联网领域中的设备通信协议

JustYan

物联网 工业互联网 物联网协议

极光笔记 | 当前最佳实践:Header Bidding 与瀑布流混合请求技术

极光GPTBots-极光推送

后端 营销 运营

TiCDC 源码阅读(一)TiCDC 架构概览

PingCAP

TiCDC

解读重要功能特性:新手入门 Apache SeaTunnel CDC

Apache SeaTunnel

CDC 数据变更捕获

2023春招最全Java面试八股文,已经帮助512人进入大厂

程序知音

Java java面试 Java面试八股文 后端面试

Nydus 镜像扫描加速

SOFAStack

SOFA

时序数据库 TDengine 3.0 参数体系使用方式汇总

TDengine

数据库 tdengine 时序数据库

如何学习大数据开发技术

小谷哥

TiCDC 源码阅读(二)TiKV CDC 模块介绍

PingCAP

#TiDB

如何把可观测需求落地为业务大盘?

云布道师

阿里云

JVM 如何获取当前容器的资源限制?

阿里巴巴云原生

Java 阿里云 容器 云原生

ES Client性能测试初探

FunTester

北京大数据开发技术培训机构怎么样

小谷哥

数益工联 x TiDB丨如何运用 HTAP 挖掘工业数据价值?

PingCAP

#TiDB

欢迎来到,个人数据安全“世界杯”

脑极体

事件总线 + 函数计算构建云上最佳事件驱动架构应用

阿里巴巴云原生

阿里云 云原生 函数计算 事件总线

基于低代码平台构筑金融行业IT运维服务体系

明道云

更稳定!Apache Doris 1.2.1 Release 版本正式发布|版本通告

SelectDB

数据库 大数据 数据分析 bug 版本发布

深入解读Netty 底层核心源码,全面分析Netty特新

程序知音

Java Netty io java架构 后端技术

web前端培训前景怎么样?

小谷哥

九科信息超级自动化平台前景广阔——Gartner:超级自动化是RPA行业未来发展的必然趋势

九科Ninetech

澳鹏中国第三年,缘何成为AI训练数据服务行业领头羊?

澳鹏Appen

人工智能 数据采集 数据安全 数据标注 AI向善

TiDB 首批通过信通院 HTAP 数据库基础能力评测

PingCAP

#TiDB

大数据培训机构该如何选择?

小谷哥

什么?比 MySQL 性价比更高的 TiDB Cloud Serverless Tier 来了?

PingCAP

#TiDB

PingCAP 与 Wisconsin-Madison 大学建立科研合作,探索 Key-Value 存储系统的智能管理与自动调整

PingCAP

TiDB

TiCDC 在大单表场景下的性能优化:我们如何将吞吐量提升 7 倍?

PingCAP

#TiDB

web前端开发课程怎么样

小谷哥

得物染色环境落地实践

得物技术

测试 研发效能 测试环境 流量预测 企业号 1 月 PK 榜

架构实战 3 - 外包学生管理详细架构

架构实战营 「架构实战营」

Istio Gateway的典型应用--《云原生服务网格Istio》书摘07_安全_华为云原生团队_InfoQ精选文章