K8S如何基于Istio实现全链路HTTPS

news2024/12/27 21:15:50

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 是实现负载均衡、服务到服务身份验证和监控的途径——只需更改很少或不需要更改服务代码。

  • 功能

简化服务间通信、增强系统的可观察性和安全性。

  1. 在集群中通过双向 TLS 加密、基于身份的强身份验证和授权实现安全的服务到服务通信

  2. HTTP、gRPC、WebSocket 和 TCP 流量的自动负载均衡

  3. 通过丰富的路由规则、重试、故障转移和故障注入对流量行为进行精细控制

  4. 支持访问控制、速率限制和配额的可插拔策略层和配置 API;

  5. 集群内所有流量的自动指标、日志和跟踪,包括集群入口和出口。

为什么选择 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)**动态配置的。

Istio 架构演进

Envoy Proxy

执行数据平面功能,为每个微服务分发的代理。Envoy 代理是唯一与数据平面流量交互的 Istio 组件

Envoy 是如何实现重试和断路器

流程说明:

  1. 服务 A 发送请求给服务 B 的第一个实例,不过调用失败了;
  2. Envoy Sidecar 会进行重试;(1)
  3. 失败的请求返回发起调用的代理;
  4. 开启断路器并在随后的请求中调用下一个服务。(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-service
  http:
  - route:
    - destination:
        host: my-service
        subset: v1
      weight: 80
    - destination:
        host: my-service
        subset: v2
      weight: 20



负载均衡

  • 概述

Istio 支持如下的负载均衡模型, 可以在 DestinationRule 中为流向某个特定服务或服务子集的流量指定这些模型:

轮询 (Round Robin):将流量按顺序轮流分配给不同实例,简单高效(默认)。

最小连接数 (Least Connection):优先选择连接数最少的实例,适用于高并发环境。

随机选择 (Random):随机选择实例,避免热点服务。

权重(Weight):请求根据指定的百分比转发到池中的实例。<

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2241003.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安全见闻-泷羽sec课程笔记

编程语言 C语言&#xff1a;一种通用的、面向过程的编程语言&#xff0c;广泛应用于系统软件和嵌入式开发。 C:在C语言基础上发展而来&#xff0c;支持面向对象编程&#xff0c;常用于尊戏开发、高性能计算等领域。 Java:一种广泛使用的面问对象编程语言&#xff0c;具有跨平台…

论文笔记(五十六)VIPose: Real-time Visual-Inertial 6D Object Pose Tracking

VIPose: Real-time Visual-Inertial 6D Object Pose Tracking 文章概括摘要I. INTRODACTIONII. 相关工作III. APPROACHA. 姿态跟踪工作流程B. VIPose网络 文章概括 引用&#xff1a; inproceedings{ge2021vipose,title{Vipose: Real-time visual-inertial 6d object pose tra…

LeetCode 热题100(八)【二叉树】(3)

目录 8.11二叉树展开为链表&#xff08;中等&#xff09; 8.12从前序与中序遍历序列构造二叉树&#xff08;中等&#xff09; 8.13路径总和III&#xff08;中等&#xff09; 8.14二叉树的最近公共祖先&#xff08;中等&#xff09; 8.15二叉树中的最大路径和&#xff08;困…

【C语言】Union

一.Union的用法 1.什么是Union? union 共用体名{ 成员列表 }; union&#xff0c;“联合体、共用体”&#xff0c;在某种程度上类似结构体struct的一种数据结构&#xff0c;共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量。 2.为什么使用union&#xff1…

Postgresql源码(138)alter table增加列的执行流程分析

alter table 逻辑比较繁琐&#xff0c;但并不复杂&#xff0c;这里以增加列为例简单梳理流程。 测试用例 drop table t_echo; create table t_echo(a int,b int); insert into t_echo select t.i, t.i*10 from generate_series(1,10) t(i); alter table t_echo add c varchar…

MobaXterm 软件及如何设置取消自动断开连接

MobaXterm 软件及如何设置取消自动断开连接 背景软件资料取消自动断开连接找打设置找到SSH Setting 背景 其实很容易找到类似的资料, 主要为了简单的记录一下, 还是写一下这个博客吧, 也算是自己的输出了. 当练习打字也行吧, 反正自己打字也是一坨, 打字太慢了. 软件资料 官…

【代码审计】常见漏洞专项审计-业务逻辑漏洞审计

❤️博客主页&#xff1a; iknow181 &#x1f525;系列专栏&#xff1a; 网络安全、 Python、JavaSE、JavaWeb、CCNP &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐评论✍ 0x01 漏洞介绍 1、 原理 业务逻辑漏洞是一类特殊的安全漏洞&#xff0c;业务逻辑漏洞属于设计漏洞而非实…

YOLOv11实战垃圾分类

本文采用YOLOv11作为核心算法框架&#xff0c;结合PyQt5构建用户界面&#xff0c;使用Python3进行开发。YOLOv11以其高效的特征提取能力&#xff0c;在多个图像分类任务中展现出卓越性能。本研究针对4种垃圾数据集进行训练和优化&#xff0c;该数据集包含丰富的垃圾图像样本&am…

Kafka集群中数据的存储是按照什么方式存储的?

1&#xff09;Topic 数据的存储机制 Topic是逻辑上的概念&#xff0c;而partition是物理上的概念&#xff0c;每个partition对应于一个log文件&#xff0c;该log文件中存储的就是Producer生产的数据。Producer生产的数据会被不断追加到该log文件末端&#xff0c;为防止log文件…

渗透测试靶场 - vulhub -CVE漏洞 Weblogic 任意文件上传漏洞(CVE-2018-2894) 漏洞讲解 漏洞复现 亲测步骤能通过哟

漏洞说明 Weblogic管理端未授权的两个页面存在任意上传jsp文件漏洞&#xff0c;可直接获取服务器权限。 两个页面 /ws_utc/begin.do /ws_utc/config.do Oracle 在2018年7月更新中&#xff0c;修复了Weblogic Web Service Test Page中一处任意文件上传漏洞&#xff0c; Web Se…

使用 PyTorch 实现 AlexNet 进行 MNIST 图像分类

AlexNet 是一种经典的深度学习模型&#xff0c;它在 2012 年的 ImageNet 图像分类比赛中大放异彩&#xff0c;彻底改变了计算机视觉领域的格局。AlexNet 的核心创新包括使用深度卷积神经网络&#xff08;CNN&#xff09;来处理图像&#xff0c;并采用了多个先进的技术如 ReLU 激…

基于图的去中心化社会推荐过滤器

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;编程探索专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年11月11日19点20分 点击开启你的论文编程之旅https://www.aspiringcode.com/content?id17176636216843&uideba758a1550b46bb…

深度学习模型评价指标介绍

模型评价指标 模型评价指标1.混淆矩阵2.Overall Accuracy3.Average accuracy4.Kappa系数5.Recall6.Precision7.F18.PR曲线9.置信度10.IOU11.AP12.mAP 模型评价指标 在我们学习机器学习以及深度学习&#xff0c;甚至在计算机视觉领域&#xff0c;我们不可避免的要利用一些指标评…

k8s 1.28.2 集群部署 docker registry 接入 MinIO 存储

文章目录 [toc]docker registry 部署生成 htpasswd 文件生成 secret 文件 生成 registry 配置文件创建 service创建 statefulset创建 ingress验证 docker registry docker registry 监控docker registry ui docker registry dockerfile docker registry 配置文件 S3 storage dr…

【自用】0-1背包问题与完全背包问题的Java实现

引言 背包问题是计算机科学领域的一个经典优化问题&#xff0c;分为多种类型&#xff0c;其中最常见的是0-1背包问题和完全背包问题。这两种问题的核心在于如何在有限的空间内最大化收益&#xff0c;但它们之间存在一些关键的区别&#xff1a;0-1背包问题允许每个物品只能选择…

Zookeeper的安装与使用

一、简介 1.1、概念 ZooKeeper 是一个开源的分布式协调服务&#xff0c;主要用于解决分布式系统中的数据一致性问题。它提供了一种可靠的机制来管理和协调分布式系统的各个节点。ZooKeeper 的设计目标是简化分布式应用的开发&#xff0c;提供简单易用的接口和高性能、高稳定性…

【模块一】kubernetes容器编排进阶实战之etcd的介绍与使用

etcd进阶 etcd简介&#xff1a;  etcd是CoreOS团队于2013年6月发起的开源项目&#xff0c;它的目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法&#xff0c;etcd基于Go语言实现。 官方网站&#xff1a;https://etcd.io/  gith…

【机器学习】如何配置anaconda环境(无脑版)

马上就要上机器学习的实验&#xff0c;这里想写一下我配置机器学习的anaconda环境的二三事 一、首先&#xff0c;下载安装包&#xff1a; Download Now | Anaconda 二、打开安装包&#xff0c;一直点NEXT进行安装 这里要记住你要下载安装的路径在哪&#xff0c;后续配置环境…

矩阵中的路径(dfs)-acwing

题目 23. 矩阵中的路径 - AcWing题库 代码 class Solution { public://以每一个坐标作为dfs起点bool hasPath(vector<vector<char>>& matrix, string str) {for (int i 0; i < matrix.size(); i )for (int j 0; j < matrix[i].size(); j )if (dfs(…

WEB攻防-通用漏洞SQL注入sqlmapOracleMongodbDB2等

SQL注入课程体系&#xff1a; 1、数据库注入-access mysql mssql oracle mongodb postgresql 2、数据类型注入-数字型 字符型 搜索型 加密型&#xff08;base64 json等&#xff09; 3、提交方式注入-get post cookie http头等 4、查询方式注入-查询 增加 删除 更新 堆叠等 …