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
mongomysql,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 (http2grpc),否则网关将使用 HTTP/1.1 转发所有传入 HTTP 请求。

您可以通过设置服务选项来指示网关使用与传入请求相同的协议来转发请求,而不是使用显式协议选择useClientProtocol。但请注意,将此选项与不支持 HTTP/2 的服务一起使用可能存在风险,因为 HTTPS 网关始终通告对 HTTP/1.1 和 HTTP/2 的支持。因此,即使后端服务不支持 HTTP/2,现代客户端也会认为它支持并经常选择使用它。

参考:协议选择

Istio 为服务指定协议的更多相关文章

  1. 低功耗蓝牙4.0BLE编程-nrf51822开发(7)-SDP服务发现协议

    SDP的全称是Service Discovery Protocol,中文是服务发现协议.SDP(服务发现协议)是蓝牙协议体系中的核心协议,是蓝牙系统重要组成部分,是所有用户模式的基础.在蓝牙系统中.客 ...

  2. 老李推荐:第4章3节《MonkeyRunner源码剖析》ADB协议及服务: ADB协议概览

    老李推荐:第4章3节<MonkeyRunner源码剖析>ADB协议及服务: ADB协议概览   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试, ...

  3. Service-Level Agreement (服务水平协议)

    Service-Level Agreement (服务水平协议) SLA是为负载测试场景定义的具体目标.例如,评测脚本中任意数量事务的平均响应时间,可以定义具体的目标或阈值.测试运行结束之后,Load ...

  4. 蓝牙—服务发现协议(SDP)

    服务搜索协议(SDP)提供了应用发现可用服务以及确定可用服务特点的方法.SDP发现协议提供下面的能力 <1>为客户提供搜索所需要服务的能力. <2>允许基于服务类型搜索服务 & ...

  5. 老李推荐:第4章1节《MonkeyRunner源码剖析》ADB协议及服务: ADB协议概览 1

    老李推荐:第4章1节<MonkeyRunner源码剖析>ADB协议及服务: ADB协议概览   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试, ...

  6. LoadRunner服务水平协议SLA

    服务水平协议 (或称 SLA)是以插入的事务为设置对象来为负载测试场景定义的具体目标. Analysis 将这些目标与 LoadRunner在运行过程中收集和存储的性能相关数据进行比较,然后确定目标的 ...

  7. 为运行Microsoft Dynamics CRM 异步处理服务指定账户没有性能计数器权限

    CRM 2016 安装 为运行Microsoft Dynamics CRM 应用程序指定账户没有性能计数器权限 为运行Microsoft Dynamics CRM 异步处理服务指定账户没有性能计数器权 ...

  8. 服务级别协议(SLA)与运行水平协议(OLA)

    服务级别协议(SLA)与运行水平协议(OLA): 服务级别管理和服务级别协议在国内已被广泛接受并成用.本文试图讨论服务级别协议(SLA)和运行水平协议(OLA)的异同. 1. SLA a.定义 服务级 ...

  9. 第4章3节《MonkeyRunner源码剖析》ADB协议及服务: ADB协议概览SYNC.TXT翻译参考(原创)

    天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写<深入理解 MonkeyRunner>书籍“.但因为诸多原因,没有如愿.所以这里把草稿分享出来,所以错误在 ...

  10. 第4章1节《MonkeyRunner源码剖析》ADB协议及服务: ADB协议概览OVERVIEW.TXT翻译参考(原创)

    天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写<深入理解 MonkeyRunner>书籍“.但因为诸多原因,没有如愿.所以这里把草稿分享出来,所以错误在 ...

随机推荐

  1. webgl centroid质心插值的一点理解

    质心插值说的是什么 2023.10.04再次review这个细节点: https://www.opengl.org/pipeline/article/vol003_6/ https://github. ...

  2. c语言代码练习2(2)改进

    //利用for循环计算1-10阶乘的和#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int main( ) { int num ...

  3. 高效数据传输:Java通过绑定快速将数据导出至Excel

    摘要:本文由葡萄城技术团队于博客园原创并首发.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 前言 把数据导出至 Excel 是很常见的需求,而数据的持久化 ...

  4. Java21上手体验-分代ZGC和虚拟线程

    一.导语 几天前Oracle刚刚发布了Java21, 由于这是最新的LTS版本,引起了大家的关注. 我也第一时间在个人项目中进行了升级体验. 一探究竟,和大家分享. 二.Java21更新内容介绍 官方 ...

  5. Linux 中如何安全地抹去磁盘数据?

    哈喽大家好,我是咸鱼 离过职的小伙伴都知道,离职的时候需要上交公司电脑,但是电脑里面有许多我们的个人信息(聊天记录.浏览记录等等) 所以我们就需要先把这些信息都删除,确保无法恢复之后才上交 即有些情况 ...

  6. 动态规划 DP 的一些笔记以及解题思路

    万物的开始,首先介绍一下动态规划(dynamic programming,DP)的基本概念:动态规划适用于有重叠子问题和最优子结构性质的问题,并且记录所有子问题的结果,因此动态规划方法耗费时间远远少于 ...

  7. 使用LiME收集主机物理内存的内容时发生宕机

    作者 pengdonglin137@163.com 现象 在一台ARM64的Centos7虚拟机里加载 https://github.com/504ensicsLabs/LiME 编译出的内核模块时发 ...

  8. Spring Cloud OpenFeign系列:简介和使用

    目录 一.简介 二.使用 1.创建父工程 2.创建order-service模块 3.创建order-client模块 三.效果 四.配置说明 1.超时配置 全局超时配置 局部超时配置 2.Gzip压 ...

  9. wireshark数据包时间戳修改

    1.数据包格式 两种数据包格式,pcap和pcapng两种.pcapng为升级版,时间戳细粒度更高. 2.时间戳位置(arrival time) 时间戳在数据包中表现为物理层的arrival time ...

  10. 对 List 列表中的数据按指定字段进行排序

    /** * 对列表中的数据按指定字段进行排序.要求类必须有相关的方法返回字符串.整型.日期等值以进行比较. * * @param list 集合 * @param sortName 需要排序的字段,目 ...