写点什么

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:492909

评论

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

2023-10-25:用go语言,假如某公司目前推出了N个在售的金融产品(1<=N<=100) 对于张三,用ai表示他购买了ai(0<=ai<=10^4)份额的第i个产品(1<=i<=N) 现给出K(

福大大架构师每日一题

福大大架构师每日一题

装备修理行业数智化转型之道

用友BIP

装备修理行业

博睿动态|GOPS全球运维大会2023上海站即将开启!

博睿数据

可观测性

​交易所开发 PancakeSwap DeFi 成功的秘密:您的 DEX 发展蓝图

区块链软件开发推广运营

交易所开发 dapp开发 区块链开发 链游开发 NFT开发

等保测评后还要花很多钱做等保整改吗?

行云管家

等保 等级保护 等保测评 等保2.0

挑战吧,HarmonyOS应用开发工程师

HarmonyOS开发者

HarmonyOS

多款国产操作系统安装数据库干货文档汇总(含Oracle/MySQL/国产数据库等)

墨天轮

MySQL 数据库 oracle 国产操作系统 麒麟软件

Op丨ARB链dapp代币合约质押项目系统开发

l8l259l3365

关于数据库分片你需要知道的

遥遥知识库

Java 分布式数据库 后端 数据库分片 关于XX你应该知道的

开箱即用!教你如何正确使用华为云编译构建服务CodeArts Build!

华为云PaaS服务小智

云计算 软件开发 华为云 编译构建

得物 Redis 设计与实践

得物技术

redis 架构 运维

战略牵手OXY精英设计、朗生、MPE美亚,小度合作生态重构再迎重要时刻

新消费日报

TuGraph Analytics图建模研发:为图计算业务提速增效

TuGraphAnalytics

分布式 图计算 图平台 图研发 图运维

揭示Lombok的代码设计缺陷:探索封装问题

树上有只程序猿

lombok Java 开发

大模型在数据分析场景下的能力评测

Kyligence

数据分析 Kyligence Copilot

把握效率与最优性:Dijkstra算法的探索

高端章鱼哥

算法 计算机 Dijkstra

出海 SaaS 企业增长修炼手册2:Kyligence 落地 PLG 是如何避坑的?

Kyligence

指标管理 SaaS 增长

如何确定Apache Kafka的大小和规模

互联网工科生

kafka

焕新升级!新一代云原生可观测平台

华为云原生团队

云计算 容器 云原生 边缘计算

和鲸赞助!第16届中国R会议暨2023 X-AGI大会通知

ModelWhale

机器学习 R 数据科学 X-AGI 统计之都

一文了解企业云盘和大文件传输哪个更适合企业传输

镭速

大文件传输

唱衰PHP?这些言论别太离谱~《PHP综合现状分析报告》来了

禅道项目管理

php

跨国企业如何选择跨境数据传输平台,了解这篇就够了

镭速

跨境数据传输

1024 有奖征名|来给矩阵起源办公室的新猫取名字呀~

MatrixOrigin

1024 MatrixOrigin MatrixOne

Acrobat Pro DC 2023中文直装版 专业PDF编辑

iMac小白

Acrobat Pro DC 2023 Adobe Acrobat Pro DC下载 Adobe Acrobat Pro DC破解

Microsoft Remote Desktop for Mac 10.9.4中文版

iMac小白

microsoft remote desktop

1024程序员节|是时候,展示真正的实力了!

Openlab_cosmoplat

1024 1024程序员节

协同发展,生态聚合丨1024程序员节暨「源聚一堂」开源技术沙龙(北京站)成功举办

开放原子开源基金会

云图说|华为云CodeArts Build,云端化的编译构建平台

华为云开发者联盟

华为云 华为云开发者联盟 编译构建

一站式 DB2 数据管理解决方案

NineData

sql 数据 客户端 db2 NineData

如何制作二维码会议签到系统?

草料二维码

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