K8S如何基于Istio实现全链路HTTPS
K8S如何基于Istio实现全链路HTTPS
- Istio 简介
- Istio 是什么?
- 为什么选择 Istio?
- Istio 的核心概念
- Service Mesh(服务网格)
- Data Plane(数据平面)
- Sidecar Mode(边车模式)
- Ambient Mode(环境模式)
- Control Plane(控制平面)
- Istio 的架构与组件
- Envoy Proxy
- Istiod
- 其他组件
- Istio 的流量管理
- 核心流量管理功能
- 流量路由
- 负载均衡
- 网关控制
- 重试和熔断
- Istio 资源对象
- Istio 的安全性
- 身份与证书管理
- 认证
- 授权
- 实践:K8s 中开启全链路 HTTPS
- 步骤一:环境准备
- 步骤二:创建 TLS 证书和密钥
- 步骤三:配置 Istio Gateway
- 步骤四:配置 VirtualService
- 步骤五:启用服务间的mTLS
- 步骤六:测试 HTTPS 通信
- 总结与 Q&A
- 参考链接
Istio 简介
Istio 是什么?
- 定义
Istio是一个开源服务网格,可以透明地分层部署在现有的分布式应用程序上。Istio强大的功能提供了一种统一且更高效的方式来保护、连接和监控服务。Istio 是实现负载均衡、服务到服务身份验证和监控的途径——只需更改很少或不需要更改服务代码。
- 功能
简化服务间通信、增强系统的可观察性和安全性。
-
在集群中通过双向 TLS 加密、基于身份的强身份验证和授权实现安全的服务到服务通信;
-
HTTP、gRPC、WebSocket 和 TCP 流量的自动负载均衡;
-
通过丰富的路由规则、重试、故障转移和故障注入对流量行为进行精细控制;
-
支持访问控制、速率限制和配额的可插拔策略层和配置 API;
-
集群内所有流量的自动指标、日志和跟踪,包括集群入口和出口。
为什么选择 Istio?
- 简单而强大
Kubernetes 具有数百种功能和数十个 API,但您只需一个命令即可开始使用它。我们以相同的方式构建了 Istio。渐进式披露意味着您可以使用一小部分 API,并且仅在需要时转动更强大的旋钮。
而其他"simple service meshes"花了数年时间赶上 Istio 第一天就拥有的功能集。
- Envoy 代理
Istio 继承了 Envoy 的所有功能和灵活性(流量管理与控制、监控跟踪、安全性和扩展等),包括使用 Istio 团队在 Envoy 中开发的 WebAssembly 的世界级可扩展性。
- 其他
社区强大、定期发布安全补丁等。
Istio 的核心概念
Service Mesh(服务网格)
管理微服务之间的复杂通信。
Data Plane(数据平面)
数据平面是一组代理,用于调解和控制微服务之间的所有网络通信。它们还收集和报告所有网状流量的遥测数据。
Sidecar Mode(边车模式)
将 Sidecar Proxy(如:Envoy 代理) 与在集群中启动的每个 Pod 一起部署,或者与虚拟机上运行的服务一起运行。以捕获流量并提供可观察性和控制能力。
Ambient Mode(环境模式)
使用每个节点的第 4 层代理,以及可选的每个命名空间的 Envoy 代理来实现第 7 层功能。
Ztunnel(Zero Trust Tunnel):负责所有 L4 层的网络流量,将服务之间的流量进行加密和认证。它是一种“零信任”的隧道,确保服务间流量安全。所有 Pod 会自动将流量导向 Ztunnel。
Waypoint Proxy:可选的 L7 层代理,负责服务的 HTTP 路由、负载均衡、鉴权等操作。它的使用是可选的,只有在需要 L7 功能时才会启用。
Control Plane(控制平面)
控制平面管理和配置数据平面中的代理,如 Istiod。
Istio 的架构与组件
- 架构
Istio 会拦截所有的网络流量,并且会在每个 pod 上以 sidecar 的形式注入一个智能代理,从而能够应用一组特定的规则。让所有特性生效的代理是由**数据平面(Data Plane)组成的,而数据平面是由控制平面(Control Plane)**动态配置的。
Envoy Proxy
执行数据平面功能,为每个微服务分发的代理。Envoy 代理是唯一与数据平面流量交互的 Istio 组件。
流程说明:
- 服务 A 发送请求给服务 B 的第一个实例,不过调用失败了;
- Envoy Sidecar 会进行重试;(1)
- 失败的请求返回发起调用的代理;
- 开启断路器并在随后的请求中调用下一个服务。(2)
Istiod
控制平面的核心组件,Istiod 提供服务发现、配置和证书管理。负责配置和管理数据平面的 Envoy。
- Pilot
负责 Istio 数据平面的 xDS 配置管理,具体包括:
服务、配置规则发现
为 Sidecar 提供服务发现、用于智能路由的流量管理功能(例如,A/B 测试、金丝雀发布等)以及弹性功能(超时、重试、熔断器等)。通过提供通用的流量管理模型和服务发现适配器(Service Discovery Adapter),来对接不同平台的适配层。
xDS 配置下发
提供统一的 xDS API,供 Sidecar 调用。将路由规则等配置信息转换为 Sidecar 可以识别的信息,并下发给数据平面。
- Citadel
负责安全证书的管理和发放,可以实现授权和认证等操作。
Citadel 并不是唯一的证书管理方式,Istio 当前支持 Citadel、Vault 和 Google 等多种证书管理方式,Citadel 是当前默认的证书管理方式。
- Galley
Galley 是 Istio 1.1 版本中新引入的配置管理组件,主要负责配置的验证、提取和处理等功能。其目的是将 Istio 和底层平台(如 Kubernetes)进行解耦。
在引入 Galley 之前,Istio 控制平面的各个组件需要分别对 Kubernetes 资源进行管理,包括资源的配置验证,监控资源配置变化,并针对配置变更采取相应的处理等。
其他组件
Gateway、VirtualService、DestinationRule 等。
Gateway:控制外部流量进入服务网格的入口点,并负责协议、端口及 TLS 等基本设置。
VirtualService:定义流量的路由规则,控制流量如何从 Gateway 或服务之间路由到特定的服务和服务版本。
DestinationRule:定义路由目标的策略和配置,例如负载均衡、连接池、断路器及 mTLS 等,用于流量到达目标服务后进行更细粒度的控制。
Istio 的流量管理
核心流量管理功能
- 概述
Istio 的流量管理模型源于和服务一起部署的 Envoy 代理。 网格内服务发送和接收的所有 data plane 流量都经由 Envoy 代理, 这让控制网格内的流量变得异常简单,而且不需要对服务做任何的更改。
流量路由
- 概述
流量路由功能允许 Istio 根据流量属性(如请求路径、HTTP 头、Cookie 等)将流量引导至特定的服务版本。主要功能包括:
条件路由:可以基于请求内容(如路径、头信息、Cookie)或用户属性,将流量引导到不同的服务版本,实现路径分离和定制化服务体验。
权重路由:可以按比例将流量分配到多个服务版本,支持金丝雀发布、蓝绿部署等场景。
流量镜像:将一部分流量克隆到新的服务版本上,用于测试和监控,但不影响实际用户。
- 示例
通过 VirtualService 配置 80% 的流量到 v1,20% 到 v2 版本
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:name: weighted-routing
spec:hosts:- my-servicehttp:- route:- destination:host: my-servicesubset: v1weight: 80- destination:host: my-servicesubset: v2weight: 20
负载均衡
- 概述
Istio 支持如下的负载均衡模型, 可以在 DestinationRule 中为流向某个特定服务或服务子集的流量指定这些模型:
轮询 (Round Robin):将流量按顺序轮流分配给不同实例,简单高效(默认)。
最小连接数 (Least Connection):优先选择连接数最少的实例,适用于高并发环境。
随机选择 (Random):随机选择实例,避免热点服务。
权重(Weight):请求根据指定的百分比转发到池中的实例。<
相关文章:

K8S如何基于Istio实现全链路HTTPS
K8S如何基于Istio实现全链路HTTPS Istio 简介Istio 是什么?为什么选择 Istio?Istio 的核心概念Service Mesh(服务网格)Data Plane(数据平面)Sidecar Mode(边车模式)Ambient Mode(环境模式)Control Plane(控制平面)Istio 的架构与组件Envoy ProxyIstiod其他组件Istio 的流量管…...

React Query在现代前端开发中的应用
💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 React Query在现代前端开发中的应用 React Query在现代前端开发中的应用 React Query在现代前端开发中的应用 引言 React Query …...

【HAProxy09】企业级反向代理HAProxy高级功能之压缩功能与后端服务器健康性监测
HAProxy 高级功能 介绍 HAProxy 高级配置及实用案例 压缩功能 对响应给客户端的报文进行压缩,以节省网络带宽,但是会占用部分CPU性能 建议在后端服务器开启压缩功能,而非在HAProxy上开启压缩 注意:默认Ubuntu的包安装nginx开…...

PostgreSQL中表的数据量很大且索引过大时怎么办
在PostgreSQL中,当表的数据量很大且索引过大时,可能会导致性能问题。以下是一些优化索引和表数据的方法: 1. 评估和删除不必要的索引 识别未使用的索引:使用pg_stat_user_indexes和pg_index系统视图来查找未被使用的索引&#x…...

【QML】QML多线程应用(WorkerScript)
1. 实现功能 QML项目中,点击一个按键后,运行一段比较耗时的程序,此时ui线程会卡住。如何避免ui线程卡住。 2. 单线程(会卡住) 2.1 界面 2.2 现象 点击delay btn后,执行耗时函数(TestJs.func…...

认证鉴权框架SpringSecurity-1--概念和原理篇
1、基本概念 Spring Security 是一个强大且高度可定制的框架,用于构建安全的 Java 应用程序。它是 Spring 生态系统的一部分,提供了全面的安全解决方案,包括认证、授权、CSRF防护、会话管理等功能。 2、认证、授权和鉴权 (1&am…...

计算器上的MC、MR、M+、M—、CE是什么意思?
在计算器中, MC键叫做memory clear,中文 清除存储,是一个清除寄存器中存储数字的指令。 MS键叫做memory save,中文 存入存储。 而MR键,则是一个读取原先存储在寄存器中的数字的指令。 M键指将当前数值存入寄存器以…...

无人机飞手执照处处需要,森林、石油管道、电力巡检等各行业都需要
无人机飞手执照在多个行业中确实具有广泛的应用需求,包括森林、石油管道、电力巡检等领域。以下是对这些领域无人机飞手执照需求的具体分析: 一、森林领域 在森林领域,无人机飞手执照对于进行高效、准确的森林资源管理和监测至关重要。无人机…...

计算机网络——路由选择算法
路由算法 路由的计算都是以子网为单位计算的——找到从原子网到目标子网的路径 链路状态算法...

【前端】技术演进发展简史
一、前端 1、概述 1990 年,第一个web浏览器诞生,Tim 以超文本语言 HTML 为基础在 NeXT 电脑上发明了最原始的 Web 浏览器。 1991 年,WWW诞生,这标志着前端技术的开始。 前端(Front-end)和后端(…...

深入解析贪心算法及其应用实例
标题:深入解析贪心算法及其应用实例 一、引言 贪心算法(Greedy Algorithm)是一类简单、直观的算法设计策略,广泛应用于优化问题中。其基本思想是每一步都选择当前状态下最优的选择,即在每一步做出局部最优的决策&…...

电子工牌独立双通道定向拾音方案(有视频演示)
现在一些行业的客服人员在面对客户都要求使用电子工牌分别记录客服和顾客的声音,我们利用双麦克风阵列双波束拾音的方案设计了一个电子工牌方案.可以有效分别记录客服和顾客的声音. 方案思路: 我们采用了一个双麦阵列波束拾音的模块A-59,此模块可以利用2个麦克风组成阵列进行双…...

举例理解LSM-Tree,LSM-Tree和B+Tree的比较
写操作 write1:WAL 把操作同步到磁盘中WAL做备份(追加写、性能极高) write2:Memtable 完成WAL后将(k,v)数据写入内存中的Memtable,Memtable的数据结构一般是跳表或者红黑树 内存内采用这种数据结构一方面支持内存…...

React Native 全栈开发实战班 - 核心组件与导航
在 React Native 中,组件是构建用户界面的基本单元。React Native 提供了丰富的内置组件,涵盖了从基础布局到复杂交互的各种需求。本章节将详细介绍常用的内置组件,并重点讲解列表与滚动视图的使用。 1. 常用内置组件详解 React Native 提供…...

Leecode热题100-35.搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2示例 2: 输入:…...

密码学知识点整理二:常见的加密算法
常用的加密算法包括对称加密算法、非对称加密算法和散列算法。 对称加密算法 AES:高级加密标准,是目前使用最广泛的对称加密算法之一,支持多种密钥长度(128位、192位、256位),安全性高,加密效率…...

Linux如何将文件或目录打成rpm包?-- rpmbuild打包详解
👨🎓博主简介 🏅CSDN博客专家 🏅云计算领域优质创作者 🏅华为云开发者社区专家博主 🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入!…...

RabbitMQ-死信队列(golang)
1、概念 死信(Dead Letter),字面上可以理解为未被消费者成功消费的信息,正常来说,生产者将消息放入到队列中,消费者从队列获取消息,并进行处理,但是由于某种原因,队列中的…...

爬虫开发工具与环境搭建——环境配置
第二章:爬虫开发工具与环境搭建 第二节:环境配置 在进行爬虫开发之前,首先需要配置好开发环境。一个良好的开发环境不仅能提高开发效率,还能避免因环境不一致带来的问题。以下是环境配置的详细步骤,涵盖了Python开发…...

15.UE5等级、经验、血条,魔法恢复和消耗制作
2-17 等级、经验、血条、魔法消耗_哔哩哔哩_bilibili 目录 1.制作UI,等级,经验,血条 2.为属性面板绑定角色真实的属性,实现动态更新 3.魔法的消耗和恢复 1.制作UI,等级,经验,血条 创建控…...

【Homework】【5】Learning resources for DQ Robotics in MATLAB
Lesson 5 代码-TwoDofPlanarRobot.m 表示一个 2 自由度平面机器人。该类包含构造函数、计算正向运动学模型的函数、计算平移雅可比矩阵的函数,以及在二维空间中绘制机器人的函数。 classdef TwoDofPlanarRobot%TwoDofPlanarRobot - 表示一个 2 自由度平面机器人类…...

vue3中 ref和reactive的区别
ref的主要作用 ref 函数接受的参数数据类型可以是原始数据类型也可以是引用数据类型。在模板中使用 ref 时,我们不需要加 .value,因为当 ref 在模板中作为顶层属性被访问时,它们会被自动解包, <p>count: {{ count }}</…...

第十四章 Spring之假如让你来写AOP——雏形篇
Spring源码阅读目录 第一部分——IOC篇 第一章 Spring之最熟悉的陌生人——IOC 第二章 Spring之假如让你来写IOC容器——加载资源篇 第三章 Spring之假如让你来写IOC容器——解析配置文件篇 第四章 Spring之假如让你来写IOC容器——XML配置文件篇 第五章 Spring之假如让你来写…...

群控系统服务端开发模式-应用开发-前端个人资料开发
一、总结 其实程序开发到现在,简单的后端框架就只剩下获取登录账号信息及获取登录账号菜单这两个功能咯。详细见下图: 1、未登录时总业务流程图 2、登录后总业务流程图 二、获取登录账号信息对接 在根目录下src文件夹下store文件夹下modules文件夹下的us…...

动态规划技巧点
动规五部曲(来自b站卡哥):1、确定DP数组中i、j…的含义。2、确定DP推导式。3、DP数组初始化。4、DP数组遍历顺序。5、DP数组打印校验。 父问题、子问题有些许区别:LeetCode343.整数拆分 今天在哔哩哔哩上刷到了一个非常有意思的l…...

深度学习之pytorch常见的学习率绘制
文章目录 0. Scope1. StepLR2. MultiStepLR3. ExponentialLR4. CosineAnnealingLR5. ReduceLROnPlateau6. CyclicLR7. OneCycleLR小结参考文献 https://blog.csdn.net/coldasice342/article/details/143435848 0. Scope 在深度学习中,学习率(Learning R…...

Spring Boot集成SQL Server快速入门Demo
1.什么是SQL Server? SQL Server是由Microsoft开发和推广的以客户/服务器(c/s)模式访问、使用Transact-SQL语言的关系数据库管理系统(DBMS),它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同开发的&…...

低代码牵手 AI 接口:开启智能化开发新征程
一、低代码与 AI 接口的结合趋势 低代码开发平台近年来在软件开发领域迅速崛起。随着企业数字化转型的需求不断增长,低代码开发平台以其快速构建应用程序的优势,满足了企业对高效开发的需求。例如,启效云低代码平台通过范式化和高颗粒度的可配…...

【已解决】git push一直提示输入用户名及密码、fatal: Could not read from remote repository的问题
问题描述: 在实操中,git push代码到github上一直提示输入用户名及密码,并且跳出的输入框输入用户名和密码后,报错找不到远程仓库 实际解决中,发现我环境有两个问题解决: git push一直提示输入用户名及密码…...

python语言基础-4 常用模块-4.13 其他模块
声明:本内容非盈利性质,也不支持任何组织或个人将其用作盈利用途。本内容来源于参考书或网站,会尽量附上原文链接,并鼓励大家看原文。侵删。 4.13 其他模块 除此之外python中还有大量的功能模块,如: pill…...