当前位置: 首页 > news >正文

第四章 Istio出口流量管理

文章目录

  • 访问外部服务
    • Envoy 代理将请求传递给网格外服务
    • 配置服务条目以提供对外部服务的受控访问
      • 访问外部 HTTP 服务
    • 直接访问外部服务
  • 出口网关
    • 清理 HTTP 网关
    • 其他

访问外部服务

为了更好的做好网络访问控制,k8s结合Istio出口网络升级示意图
在这里插入图片描述

来自 Istio 的 pod 的所有出站流量都会重定向到其 sidecar 代理,因此集群外部 URL 的可访问性取决于代理的配置。默认情况下,Istio 配置 Envoy 代理来传递未知服务的请求。
一般来说服务访问网格外部服务默认放行,但是如果想要严格管控网格流量,需要对出方向进行管控。

这里展示三种不同的方式访问外部服务:

  • 允许 Envoy 代理将请求传递给网格外服务。
  • 配置服务条目以提供对外部服务的受控访问。
  • 直接访问外部服务。

Envoy 代理将请求传递给网格外服务

Istio 有一个配置: meshConfig.outboundTrafficPolicy.mode用于配置外部服务的 sidecar 处理,如果此选项设置为ALLOW_ANY,Istio 代理将允许对未知服务的调用通过。如果该选项设置为REGISTRY_ONLY,则 Istio 代理会阻止任何没有 HTTP 服务或网格内定义的服务条目的主机。 ALLOW_ANY是默认值,目的是允许快速开始使用 Istio,而无需控制对外部服务的访问。

配置服务条目以提供对外部服务的受控访问

Service Entry(服务条目)允许在Istio的内部服务注册表中添加额外的服务记录,以便网格中自动发现的服务可以访问或路由到这些手动指定的服务。如果我们想要控制出口网络,必须先要设置ServiceEntry
正常情况我们对外访问先设置为ALLOW_ANY。这样,就可以开始在某些外部服务上使用 Istio 功能,而不会阻止任何其他服务。配置完所有服务条目后,可以将模式切换为REGISTRY_ONLY阻止任何其他无意/恶意的访问。

访问外部 HTTP 服务

  1. 创建一个ServiceEntry以允许访问外部 HTTP 服务(httpbin-ext.yml)
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:name: httpbin-ext
spec:hosts:- httpbin.orgports:- number: 80name: httpprotocol: HTTPresolution: DNSlocation: MESH_EXTERNAL

网格内服务访问httpbin.org时,Sidecar 代理将忽略原始目标 IP 地址并将流量定向到httpbin.org,通过DNS解析,执行 DNS 查询以获取httpbin.org 真实IP 地址。
2. 从k8s内部向外部 HTTP 服务发出请求:

$ kubectl exec "$SOURCE_POD" -c sleep -- curl -sS http://httpbin.org/headers
{"headers": {"Accept": "*/*","Host": "httpbin.org",..."X-Envoy-Decorator-Operation": "httpbin.org:80/*",...}
}

请注意 Istio sidecar 代理添加的标头:X-Envoy-Decorator-Operation。
3. 检查 sidecar 代理的日志:

$ kubectl logs "$SOURCE_POD" -c istio-proxy | tail
[2019-01-24T12:17:11.640Z] "GET /headers HTTP/1.1" 200 - 0 599 214 214 "-" "curl/7.60.0" "17fde8f7-fa62-9b39-8999-302324e6def2" "httpbin.org" "35.173.6.94:80" outbound|80||httpbin.org - 35.173.6.94:80 172.30.109.82:55314 -

请注意 HTTP 请求相关的条目httpbin.org/headers。

直接访问外部服务

与Envoy 直通外部服务(使用ALLOW_ANY流量策略指示 Istio sidecar 代理直通未知服务的调用)不同,这种方法完全绕过了 sidecar,实质上禁用了指定 IP 的所有 Istio 功能。无法像使用该ALLOW_ANY方法那样逐步添加特定目的地的服务条目。因此,仅当由于性能或其他原因无法使用 sidecar 配置外部访问时,才建议将此配置方法作为最后的手段。

简单方法是将global.proxy.includeIPRanges配置选项设置为用于内部集群服务的一个或多个 IP 范围。这些 IP 范围值取决于集群运行的平台。允许这些IP直接访问外部服务
--set values.global.proxy.includeIPRanges="172.16.0.0/16"

要以更安全的方式实施出口流量控制,必须通过出口网关引导出口流量,并查看其他注意事项

出口网关

Istio 使用入口和出口网关 来配置在服务网格边缘执行的负载均衡器。入口网关允许定义所有传入流量流经的网格的入口点。出口网关是一个对称的概念;它定义了网格的出口点。出口网关允许 Istio 功能(例如监控和路由规则)应用于网格出口流量。

  1. 检查Istio出口网关是否部署
$ kubectl get pod -l istio=egressgateway -n istio-system

如果没有返回 Pod,请部署 Istio 出口网关。(由于各家云厂商有自己的构建方法,此处不做介绍)
2. 创建ServiceEntry
假设我们还是使用上文的httpbin-ext配置
3. Gateway为httpbin.org创建出口、端口 80,并为定向到出口网关的流量创建目标规则。

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:name: istio-egressgateway
spec:selector:istio: egressgatewayservers:- port:number: 80name: httpprotocol: HTTPhosts:- httpbin.org
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:name: egressgateway-for-httpbin
spec:host: istio-egressgateway.istio-system.svc.cluster.localsubsets:- name: httpbin
  1. 定义 VirtualService将流量从 sidecar 引导至出口网关,以及从出口网关引导至外部服务:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:name: direct-httpbin-through-egress-gateway
spec:hosts:- httpbin.orggateways:- istio-egressgateway- meshhttp:- match:- gateways:- meshport: 80route:- destination:host: istio-egressgateway.istio-system.svc.cluster.localsubset: httpbinport:number: 80weight: 100- match:- gateways:- istio-egressgatewayport: 80route:- destination:host: httpbin.orgport:number: 80weight: 100

清理 HTTP 网关

$ kubectl delete gateway istio-egressgateway
$ kubectl delete serviceentry httpbin
$ kubectl delete virtualservice direct-httpbin-through-egress-gateway
$ kubectl delete destinationrule egressgateway-for-httpbin

其他

请注意,在 Istio 中定义出口Gateway本身并不为运行出口网关服务的节点提供任何特殊处理。集群管理员或云提供商应在专用节点上部署出口网关,并引入额外的安全措施以使这些节点比网格的其他节点更安全。

Istio无法安全地强制所有出口流量实际上都流经出口网关。Istio 仅通过其 sidecar 代理启用此类流程。如果攻击者绕过sidecar代理,就可以直接访问外部服务,而无需遍历出口网关。这样,攻击者就逃脱了 Istio 的控制和监视。集群管理员或云提供商必须确保没有流量绕过出口网关离开网格。Istio 外部的机制必须强制执行此要求。例如,集群管理员可以配置防火墙来拒绝所有非来自出口网关的流量。Kubernetes网络策略还可以禁止所有非源自出口网关的出口流量(请参阅 下一节的示例)。此外,集群管理员或云提供商可以配置网络,以确保应用程序节点只能通过网关访问互联网。为此,集群管理员或云提供商可以阻止将公共 IP 分配给网关以外的 Pod,并可以配置 NAT 设备以丢弃并非源自出口网关的数据包。

相关文章:

第四章 Istio出口流量管理

文章目录 访问外部服务Envoy 代理将请求传递给网格外服务配置服务条目以提供对外部服务的受控访问访问外部 HTTP 服务 直接访问外部服务 出口网关清理 HTTP 网关其他 访问外部服务 为了更好的做好网络访问控制,k8s结合Istio出口网络升级示意图 来自 Istio 的 pod…...

leetcode做题笔记188. 买卖股票的最佳时机 IV

给你一个整数数组 prices 和一个整数 k ,其中 prices[i] 是某支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。也就是说,你最多可以买 k 次,卖 k 次。 注意:你不能同时参与多…...

基于springboot实现大学生社团活动平台项目【项目源码+论文说明】

摘要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,网络管理工作的重要性已逐渐被人们所认识,科学化的管理,使信…...

力扣--第三大的数

给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。 示例 1: 输入:[3, 2, 1] 输出:1 解释:第三大的数是 1 。 示例 2: 输入:[1, 2] 输出&#xff1…...

Android 11.0 禁用adb reboot recovery命令实现正常重启功能

1.前言 在11.0的系统开发中,在定制recovery模块的时候,由于产品开发需要要求禁用recovery的相关功能,比如在通过adb命令的 adb reboot recovery的方式进入recovery也需要实现禁用,所以就需要了解相关进入recovery流程来禁用该功能 2.禁用adb reboot recovery命令实现正常…...

Cesium Vue(一)— 项目初始化配置

1. 创建VUE项目工程 创建项目 vue create cesium-vue配置Vue3 2. 创建vue.config.js文件 const { defineConfig } require(vue/cli-service)// The path to the CesiumJS source code const cesiumSource node_modules/cesium/Source; const cesiumWorkers ../Build/C…...

【linux下centos7.9安装docker,docker-composed(root用户)】

一 安装docker 1.联网下载安装docker curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 2.安装成功 docker -v 3.将docker注册为service,进入/etc/systemd/system/目录,并创建docker.service文件(注意insecure-registry修改成自己的…...

腾讯云我的世界mc服务器配置怎么选择?

使用腾讯云服务器开Minecraft我的世界服务器配置怎么选择?10人以内玩2核4G就够用了,开我的世界服务器选择轻量应用服务器就够了,腾讯云轻量CPU采用至强白金处理器,大型整合包一般1.12版本的,轻量2核4G配置都差不多的&a…...

《低代码指南》——AI低代码维格云架构视图怎么用?

架构视图是一个展示信息层级关系的视图,轻轻拖拽卡片,就能搭建精巧缜密的企业组织架构视图、实现信息结构化。 利用好架构视图,可以很好地解决以下场景: 展示企业/团队的组织关系 可视化管理产品开发架构 统筹全员 OKR 完成情况 架构视图的基础知识​ 架构视图分为以下几个…...

ubuntu16.04安装vscode遇到的code 依赖于 libnss3 (>= 2:3.30)解决

ubuntu16.04安装vscode遇到的code 依赖于 libnss3 (> 2:3.30);然而:系统中 libnss3:amd64 的版本为 2:3.28.4-0ubuntu0.16.04.14解决方法 一开始下载了最新版本的vscode,安装时出现了上面的错误状况,最新版本的依赖库版本过低的…...

它来了,xhadmin多应用Saas框架正式发布!

这是一个很激动人心的时刻,因为这个框架从立项到现在已经一年多的时间了,先给大家欣赏下颜值吧。 上图所示是总后台的首页截图,看上去还是比较满意的,不过后续还有一些小小的调整。 应用市场的效果也是相当炸裂的,整体…...

PixMIM论文笔记

论文名称:PixMIM: Rethinking Pixel Reconstruction in Masked Image Modeling 发表时间:2023 年 3 月 4 日 作者及组织:上海人工智能实验室、西蒙菲莎大学、香港中文大学 GitHub:https://github.com/open-mmlab/mmselfsup/tree/d…...

设计师首选:最佳的5款网页设计软件

对于UI设计师来说,网页设计是一项必要的技能。如何做好网页设计?除了设计理念,网页设计和制作软件的应用也是不可或缺的。目前市场上有很多这样的软件,工人要想做好,就必须先磨利工具。如果他们想做网页设计&#xff0…...

ES6箭头函数

1.箭头函数的写法 如果函数内有返回值 var fn v > v 1 返回值如果不是表达式(是对象),用()括号返回 var fn v > ({ obj: v }) 返回值如果不是表达式(也不是对象)方法体内按正常写 var fu () > {var a 1;var b a1;return b; } 2.箭头函数和普通…...

毫米波雷达在环境监测中的关键作用

随着环境问题的日益凸显,精确、实时的环境监测成为了保护地球的关键一环。在这个背景下,毫米波雷达技术逐渐崭露头角,以其在环境监测中的独特优势成为不可或缺的工具。本文将探讨毫米波雷达在环境监测中的关键作用,以及它是如何应…...

print() 函数

二、print() 函数 这里先说一下 print() 函数,如果你是新手,可能对函数不太了解,没关系,在这里你只要了解它的组成部分和作用就可以了,后面函数这一块会详细说明的。 print() 函数由两部分构成 : 指令&a…...

PyQt 小程序

设备管理程序 v0.0.1.0, 终于出了一个基础版本,… … 两个字典的键值判断 辛亏用的是Python 这个编码时间大大缩短了...

大模型技术实践(五)|支持千亿参数模型训练的分布式并行框架

在上一期的大模型技术实践中,我们介绍了增加式方法、选择式方法和重新参数化式方法三种主流的参数高效微调技术(PEFT)。微调模型可以让模型更适合于我们当前的下游任务,但当模型过大或数据集规模很大时,单个加速器&…...

[正式学习java②]——数组的基本使用,java内存图与内存分配

一、数组的两种初始化方式 1.完整格式(静态初始化) 数据类型[] 数组名 new 数据类型[]{元素1,元素2…}; //范例 int[] arr new int[]{1,2,3,4}; 简化书写 一般我们会省略后面的 new 数据类型[] int[] arr {1,2,3,4}; 2.动态初始化 当不知道数组里面的初始值的时候&#xf…...

ESP32网络开发实例-TCP服务器数据传输

TCP服务器数据传输 文章目录 TCP服务器数据传输1、IP/TCP简单介绍2、软件准备3、硬件准备4、TCP服务器实现本文将详细介绍在Arduino开发环境中,实现一个ESP32 TCP服务器,从而达到与TCP客户端数据交换的目标。 1、IP/TCP简单介绍 Internet 协议(IP)是 Internet 的地址系统,…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...