Istio 为服务指定协议
1、背景
Istio 默认支持代理所有 TCP 流量。包括 HTTP、HTTPS、gRPC 以及原始 TCP 协议。但为了提供额外的能力,比如路由和丰富的指标,必须确定协议。协议可以被自动检测或者手动声明。
使用非基于 TCP 的协议时,如 UDP,不会被 Istio 代理拦截,可以继续正常工作。但是不能在仅代理的组件中使用,如 Ingress 或 Egress Gateway。
2、协议选择
2.1 自动协议选择
istio 需要知道服务提供什么七层协议,从而来为其配置相应协议的 filter chain,通常最好是显式声明协议,如果没有声明,istio 会自动探测,这个探测能力比较有限(可以自动检测出 HTTP 和 HTTP/2 流量),如果未自动检测出协议,流量将会视为普通 TCP 流量。
2.2 手动协议选择
协议可以在 Service 定义中手动指定。
可以通过以下两种方式配置:
- 通过端口名称配置:
name: <protocol>[-<suffix>]。 - 在版本 1.18+ 的Kubernetes,通过
appProtocol字段配置:appProtocol: <protocol>。
支持以下协议:
| 协议 | 边车用途 | 网关目的 |
|---|---|---|
http |
明文 HTTP/1.1 流量 | 明文 HTTP(1.1 或 2)流量 |
http2 |
明文 HTTP/2 流量 | 明文 HTTP(1.1 或 2)流量 |
https |
TLS 加密数据。因为 Sidecar 不会解密 TLS 流量,所以这与tls |
TLS 加密 HTTP(1.1 或 2)流量 |
tcp |
不透明的TCP数据流 | 不透明的TCP数据流 |
tls |
TLS 加密数据 | TLS 加密数据 |
grpc,grpc-web |
与...一样http2 |
与...一样http2 |
mongo, mysql,redis |
实验应用协议支持。要启用它们,请配置相应的 Pilot环境变量。如果未启用,则视为不透明 TCP 数据流 | 实验应用协议支持。要启用它们,请配置相应的 Pilot环境变量。如果未启用,则视为不透明 TCP 数据流 |
注意 1:网关的行为在某些情况下会有所不同,因为网关可以终止 TLS 并且可以协商协议。
2.2.1 方式一:使用服务端口名称时指定协议类型
在 Service 的 ports 中,port 的 name 需设置为 {协议名称}或{协议名称}-{自定义后缀}。例如:服务的 9090 端口是 gRPC 协议类型,可以设置 port 的 name 为 grpc-demo;服务的 3306 端口是 MySQL 数据库协议,可以设置 port 的 name 为 mysql。
YAML 示例如下:
kind: Service
metadata:
name: svc-v1
spec:
ports:
- port: 9090
name: grpc-demo # 指定该端口提供 grpc 协议的服务
- port: 3306
name: mysql # 指定该端口提供 mysql 协议的服务
2.2.2 方式二:使用服务端口的appProtocol指定协议类型
可以使用 Service 的 appProtocol 指定协议类型。
指定协议类型为 HTTPS 的 YAML 示例如下:
kind: Service
metadata:
name: svc-v2
spec:
ports:
-port: 3306
name: database
appProtocol: https # 指定该端口提供 https 协议的服务
注意 1:
ports.appProtocol的生效优先级高于ports.name。
3、HTTP网关协议选择
与 sidecar 不同,网关默认无法自动检测将请求转发到后端服务时使用的特定 HTTP 协议。因此,除非使用显式协议选择来指定 HTTP/1.1 ( http) 或 HTTP/2 (http2或grpc),否则网关将使用 HTTP/1.1 转发所有传入 HTTP 请求。
您可以通过设置服务选项来指示网关使用与传入请求相同的协议来转发请求,而不是使用显式协议选择useClientProtocol。但请注意,将此选项与不支持 HTTP/2 的服务一起使用可能存在风险,因为 HTTPS 网关始终通告对 HTTP/1.1 和 HTTP/2 的支持。因此,即使后端服务不支持 HTTP/2,现代客户端也会认为它支持并经常选择使用它。
参考:协议选择
Istio 为服务指定协议的更多相关文章
- 低功耗蓝牙4.0BLE编程-nrf51822开发(7)-SDP服务发现协议
SDP的全称是Service Discovery Protocol,中文是服务发现协议.SDP(服务发现协议)是蓝牙协议体系中的核心协议,是蓝牙系统重要组成部分,是所有用户模式的基础.在蓝牙系统中.客 ...
- 老李推荐:第4章3节《MonkeyRunner源码剖析》ADB协议及服务: ADB协议概览
老李推荐:第4章3节<MonkeyRunner源码剖析>ADB协议及服务: ADB协议概览 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试, ...
- Service-Level Agreement (服务水平协议)
Service-Level Agreement (服务水平协议) SLA是为负载测试场景定义的具体目标.例如,评测脚本中任意数量事务的平均响应时间,可以定义具体的目标或阈值.测试运行结束之后,Load ...
- 蓝牙—服务发现协议(SDP)
服务搜索协议(SDP)提供了应用发现可用服务以及确定可用服务特点的方法.SDP发现协议提供下面的能力 <1>为客户提供搜索所需要服务的能力. <2>允许基于服务类型搜索服务 & ...
- 老李推荐:第4章1节《MonkeyRunner源码剖析》ADB协议及服务: ADB协议概览 1
老李推荐:第4章1节<MonkeyRunner源码剖析>ADB协议及服务: ADB协议概览 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试, ...
- LoadRunner服务水平协议SLA
服务水平协议 (或称 SLA)是以插入的事务为设置对象来为负载测试场景定义的具体目标. Analysis 将这些目标与 LoadRunner在运行过程中收集和存储的性能相关数据进行比较,然后确定目标的 ...
- 为运行Microsoft Dynamics CRM 异步处理服务指定账户没有性能计数器权限
CRM 2016 安装 为运行Microsoft Dynamics CRM 应用程序指定账户没有性能计数器权限 为运行Microsoft Dynamics CRM 异步处理服务指定账户没有性能计数器权 ...
- 服务级别协议(SLA)与运行水平协议(OLA)
服务级别协议(SLA)与运行水平协议(OLA): 服务级别管理和服务级别协议在国内已被广泛接受并成用.本文试图讨论服务级别协议(SLA)和运行水平协议(OLA)的异同. 1. SLA a.定义 服务级 ...
- 第4章3节《MonkeyRunner源码剖析》ADB协议及服务: ADB协议概览SYNC.TXT翻译参考(原创)
天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写<深入理解 MonkeyRunner>书籍“.但因为诸多原因,没有如愿.所以这里把草稿分享出来,所以错误在 ...
- 第4章1节《MonkeyRunner源码剖析》ADB协议及服务: ADB协议概览OVERVIEW.TXT翻译参考(原创)
天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写<深入理解 MonkeyRunner>书籍“.但因为诸多原因,没有如愿.所以这里把草稿分享出来,所以错误在 ...
随机推荐
- [ARC143B] Counting Grids 题解
Counting Grids 题目大意 将 \(1\sim n^2\) 填入 \(n\times n\) 的网格 \(A\) 中,对于每个格子满足以下条件之一: 该列中存在大于它的数. 该行中存在小于 ...
- multiset用法汇总
c++语言中,multiset是<set>库中一个非常有用的类型,它可以看成一个序列,插入一个数,删除一个数都能够在O(logn)的时间内完成,而且他能时刻保证序列中的数是有序的,而且序列 ...
- 21.8 Python 使用BeautifulSoup库
BeautifulSoup库用于从HTML或XML文件中提取数据.它可以自动将复杂的HTML文档转换为树形结构,并提供简单的方法来搜索文档中的节点,使得我们可以轻松地遍历和修改HTML文档的内容.广泛 ...
- exgcd|扩展欧几里得算法|扩展欧几里得算法证明|exgcd求逆元 一文说明白
exgcd 扩展欧几里得算法(Extended Euclidean algorithm, EXGCD),常用于求 \(ax+by=\gcd(a,b)\) 的一组可行解. 部分选自OI Wiki 扩展欧 ...
- 巅峰对决:英伟达 V100、A100/800、H100/800 GPU 对比
近期,不论是国外的 ChatGPT,还是国内诸多的大模型,让 AIGC 的市场一片爆火.而在 AIGC 的种种智能表现背后,均来自于堪称天文数字的算力支持.以 ChatGPT 为例,据微软高管透露,为 ...
- 暴力+DP:买卖股票的最佳时机
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润. 注意:你不能在买入股票前卖出股票. ...
- SQLBI_精通DAX课程笔记_02_数据类型
SQLBI_精通DAX课程笔记_02_数据类型 PowerBi 和 Analysis Services 在数据加载环节,无论数据源是什么类型,都会自动将数据转化为DAX可用的数据类型集. 以下链接为微 ...
- 机器人行业数据闭环实践:从对象存储到 JuiceFS
JuiceFS 社区聚集了来自各行各业的前沿科技用户.本次分享的案例来源于刻行,一家商用服务机器人领域科技企业. 商用服务机器人指的是我们日常生活中常见的清洁机器人.送餐机器人.仓库机器人等.刻行采用 ...
- N100低功耗win11安装wsl2当入门nas
前言 最近入了一台16gb+512gb的N100,想着用来存些资源,当个nas,偶尔要用用windows系统,所以想直接在这上面搞个虚拟机算了,WSL2似乎是一个不错的选择,下面介绍捣鼓的教程. 没用 ...
- Java8新特性之FlatMap&Reduce
1.FlagMap // flatMap:接收一个T返回一个R,将一个元素转为一个新的流 ;R apply(T t); <R> Stream<R> flatMap(Functi ...