虚拟云网络系列 | Antrea 应用于 VMware 方案功能简介(十二)

news2024/12/29 10:00:53

接续 Antrea 网络系列,接下来我想和大家讨论的是 Antrea 本身的两个网络与定址相关功能:Antrea Egress/Antrea IPAM。但在开始说明这两个机制前,先得讨论在原生 Kubernetes 方案内基础的网络与定址设计,通常在企业环境内会产生什么问题,才进而能探讨为什么需要新的机制,有哪些效益。因此本篇的重点就先着重在「现行的问题是什么」。

下面是本篇用来举例,但很典型显示常见企业客户 Kubernetes 环境的示意图。在此环境内有一个 Kubernetes 丛集,上面放了多个生产应用 (Portal/ERP/CRM/Vote)。每个生产应用为了资源区隔等考量,放在各自对应的 Namespace 里面。

在这里插入图片描述

请大家回忆一下原生 Kubernetes 最基本的定址机制,或是我们叫做 Node-IPAM:

・每一个 Kubernetes Node 内会被分配一个子网段。上图内,最左边的 Node 的内部网段是 10.10.1.0/24,最右边 Node 的内部网段是 10.10.7.0/24。这里的内部网段,当我们手动安装 Kubernetes 用 kubeadm init 启用时,可以用–pod-network-cidr 这个参数给一个大范围(比如说 10.10.0.0/16),然后每个新的 Kubernetes Node 加进来时,就从上面的范围内拿一段走,做为自己的子网段。

・当一个 Pod 被分派在某台 Node 内启用运作时,会从这个 Node 的内部子网段内分派一个 IP 地址填入。在上图左边 Node,里面有来自 Portal/ERP/Vote 不同 namespace 内建立的 Pod,每个 Pod 拿到的都是 10.10.1.0/24 内的 IP 地址。相同的,最右边的 Node 里面有 Portal/ERP/CRM 三个不同 namespace 内建立的 Pod,每个 Pod 拿到的都是 10.10.7.0/24 内的 IP 地址。

・在同一个 Namespace(同一个 Project / 应用)内,各个 Pod 拿到的 IP 地址是混乱的,比如说 ERP namespace 内的 Pod,拿到的 IP 来自不同网段,包括 10.10.1.12, 10.10.7.11, 10.10.9.82, 10.10.10.2。

接着请看下面第二个图。客户的现状是应用资料库目前还在外部没有转成容器,因此 K8S 内的 Pod 要能够连到外部资料库进行存取。

在这里插入图片描述

在标准 Kubernetes 的 Pod 基础连外机制 (Egress) 做法是什么呢?

・ 每个 Pod 连外时,都会用所在 K8S Node 的 Interface IP 做 Source-NAT。上图内,在左边 Node 里面,所有不同 Namespace 的 Pod,往外连线时,来源地址都会改为 172.16.11.11 的 Interface IP;同样右边 Node 里面的所有 Pod 连到外面世界时,都会带 172.16.11.17 的 Interface IP。

・ 在外部的防火墙或是资料库设备,看到这些连线时,只会看到来源地址是来自各台 K8S Node 的介面 IP,无法区分这个连线是来自哪个 Namespace/Project/ 应用。举个例子请大家想一下,如果外部的 ERP 资料库,要限制只有属于 ERP 的 Pod 可以连线到它身上,此时要怎么做呢?

用上面两张图,我们讨论了近年几乎在每个客户 Kubernetes 生产环境都有碰到的网络问题,用下面这张图来做个整理。这些问题尤其常出现在金融与政府客户要进行应用转型过程当中:

・ 外部防火墙或业务系统只看得到 K8S Node IP,看不到真实的应用网络连线来源,无法对应是哪个业务系统,此时在资安政策要求的防火墙控管、应用连线稽核纪录都无法进行。

・ 也不单纯是连外才有这个问题,即使都在 Kubernetes 内部连接不用 NAT,但当应用仍然要求纪录连线资讯时,看到的 IP 是杂乱的。比如说在前面的案例,如果 AP 日志纪录了有 10.10.1.5 的 pod 来连接它,我们只知道这是一个在 Node 1 号上面运作的 Pod,其他什么资讯都没有。况且 Pod 如果重启,IP 就换掉了,这个 IP 资讯根本没有意义。

・ 对于外对内的连线,很多客户也希望不要有 NAT 像是 Nodeport/LB/Ingress 等机制,而可以直接用标准路由的方式让外部系统连到这些 Pod。在基础标准 CNI 运作方式是不容易满足的。

・ 很多客户希望 Pod 产生时 IP 可以固定不要变动。当然,通常也是稽核的考量。甚至有些是应用不想改,程式码内就把 IP 写死了。

在这里插入图片描述

先讲一下之前每次听到这些客户要求时,我的内心想法。简而言之就是:那你继续用虚机不就好了吗?用虚机也是部署很快很敏捷很稳定效能很好的啊?上面你的每个要求用 vSphere 全部通通都做得到啊?

基本上是这样,整个云原生应用,还有 Kubernetes 架构相关的设计,就是要把 IP 对应用的影响与绑定移除掉。IP 地址只是最底层要连接时的构件,但上层应用构件互联时,就仅用构件的服务名称 / FQDN 即可。应用层构件的识别应该是采用比如公私钥而非 IP 地址,构件间的安全保护,也应该改由 Label/Service 这些来定义而不会是 IP 或网段。如果客户整个应用从上层往下都采用云原生的概念来考虑,构件都改为容器,前面那四个困扰应该是不存在的。

但现况就是绝大部分的企业应该都还会有这些原本应用的技术债,难以在短期内大幅翻新。也因此,如果新技术方案在企业转型过程中,能够解决或至少缓解上述问题,那对客户当然也会有很大的好处。我们接下来讨论 Antrea Egress 与 IPAM 功能,就会着重在如何透过这些新机制,来解决前述客户的痛点。

本文作者:Colin Jao (饶康立), VMware 资深技术顾问,主要负责 VMware NSX 产品线,目前致力于网络虚拟化、分布式安全防护技术与新应用递送方案的介绍与推广。

内容来源|公众号:VMware 中国研发中心

有任何疑问,欢迎扫描下方公众号联系我们哦~
请添加图片描述

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

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

相关文章

使用docker部署一个jar项目

简介: 通过docker镜像, docker可以在服务器上运行包含项目所需运行环境的docker容器, 在线仓库里有很多各个软件公司官方发布的镜像, 或者第三方的镜像. 如果我们需要使用docker把我们的应用程序打包成镜像, 别的机器上只要安装了docker, 就可以直接运行镜像, 而不需要再安装应…

建网站一般使用Windows还是liunx好?

建网站一般使用Windows还是liunx好? 1;服务器配置比较低时,最好使用linux系统。 对于一个电脑新手,刚开始做网站时,都会选择入门级的服务器,我刚开始做网站时,就是这样的。我购买了一台入门级服…

为什么需要智能工业自动化网络?如何搭建?

在当今快节奏的社会中,工业自动化变得越来越重要。传统的手动操作和生产方式已经不能满足现代工业的需求。因此,建设工业自动化已成为一个必然趋势。通过不断进步的新技术创建更高效、更可靠、更安全的智能工业自动化网络。在本文中,我们将讨…

【转】金融行业JR/T0197-2020《金融数据安全 数据安全分级指南》解读

原文链接:金融行业JR/T0197-2020《金融数据安全 数据安全分级指南》解读 《金融数据安全 数据安全分级指南》 解 读 随着IT技术的发展,银行的基础业务、核心流程等众多事务和活动都运营在信息化基础之上,金融机构运行过程中产生了大量的数字…

SE-Net注意力机制详解

📌本次任务:了解SE-Net原理 SE-Net 是 ImageNet 2017(ImageNet 收官赛)的冠军模型,是由WMW团队发布。具有复杂度低,参数少和计算量小的优点。且SENet 思路很简单,很容易扩展到已有网络结构如 Inception 和 ResNet 中。(这篇论文是2019年的,应该是后续做了更新) 一…

(Acwing)完全背包问题

有 N 种物品和一个容量是 V 的背包,每种物品都有无限件可用。 第 ii 种物品的体积是 vi,价值是 wi。 求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。 输出最大价值。 输入格式 第一行两个整数&am…

远程连接身份验证错误,又找不到加密Oracle修正

一、问题描述 远程连接服务器出现了错误,错误信息为:远程连接身份验证错误,又找不到加密Oracle修正。 二、原因分析 出错原因:Windows的CVE-2018-0886 的 CredSSP 更新将CredSSP 身份验证协议默认设置成了“缓解”,…

右键文件夹 ------- 打开 vscode的方法

1、右键vscode点击属性 2、这是地址栏,一会复制即可 3、新建一个txt文件,将这个复制进去 Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\*\shell\VSCode] "Open with Code" "Icon""D:\\Microsoft VS Code\\Code.exe"[HKE…

python编写小程序有界面,python编写小程序的运行

大家好,小编为大家解答python编写小程序怎么看代码的的问题。很多人还不知道python编写小程序的运行,现在让我们一起来看看吧! Python第一个简单的小游戏 temp input("请猜一猜姐姐的幸运数字是: ") guess int(temp) …

图文演示:如何三分钟极速搭建一个元宇宙3D虚拟展厅

引言: 元宇宙3D虚拟展厅时代已经来临。元宇宙是一个虚拟的、立体的数字空间,可以让用户沉浸在其中进行交互操作,并体验无限可能。如何快速搭建一个属于自己的虚拟展厅则受到越来越多人的关注。 一.虚拟展厅类型 1.党建展馆 实现…

GoLand隐藏和折叠控制台的运行命令

GoLand上方菜单栏点击Help->Find Action -> 输入“Registry” 之后在找到【go.run.processes.with.pty】,关闭 参考: goland控制台显示重叠问题解决方案

【css】nth-child选择器实现表格的斑马纹效果

nth-child() 选择器可以实现为所有偶数&#xff08;或奇数&#xff09;的表格行添加css样式&#xff0c;even&#xff1a;偶数&#xff0c;odd&#xff1a;奇数。 代码&#xff1a; <style> table {border-collapse: collapse;width: 100%; }th, td {text-align: cente…

试卷还原成空白卷怎么做?分享个简单的方法

在进行考试时&#xff0c;可能会填错答案或想要重新测试&#xff0c;此时需要正确擦除填写的试卷答案。下面介绍一些需要注意的事项以及正确的擦除方法。 使用橡皮擦或橡皮 正确的擦除方法是使用橡皮擦或橡皮对填写的答案进行擦除。首先&#xff0c;将橡皮擦或橡皮放置在试卷上…

垃圾回收机制和常用的算法

一.什么是垃圾回收&#xff1f; 垃圾回收主要针对堆和方法区&#xff08;非堆&#xff09;,程序计数器&#xff0c;虚拟机栈&#xff0c;本地方法栈这三个区域属于线程私有&#xff0c;随着线程的销毁&#xff0c;自然就会雄安会了&#xff0c;因此不需要堆着三个区域进行垃圾…

114.(cesium篇)cesium去掉时间轴并用按钮控制运动

地图之家总目录(订阅之前必须详细了解该博客) 地图之家:cesium+leaflet+echart+地图数据+地图工具等相关内容的介绍 文章末尾处提供保证可运行完整代码包,运行如有问题,可“私信”博主。 效果如下所示: cesium去掉时间轴并用按钮控制运动 下面献上完整代码,代码重要位…

剔除多余括号 C++详解

剔除多余括号 C详解 题目描述输入输出样例输入样例输出样例 解法&代码 题目描述 剔除四则运算表达式中的多余括号。 输入一个含有括号的四则运算表达式&#xff0c;可能含有多余的括号&#xff0c;编程整理该表达式&#xff0c;去掉所有多余的括号&#xff0c;原表达式中所…

管理类联考——逻辑——形式逻辑——汇总篇

简述 形式逻辑&#xff1a; 识别题型&#xff1a;逻辑符号表达及标志词&#xff1a;联假言符号化特殊命题“除非否则”&#xff1b;五大关系&#xff1a;矛盾、等价、包含、至少有一真、至少有一假&#xff1b;【通过“关系”&#xff0c;串联起“假联选”言】 识别题型&…

《吐血整理》高级系列教程-吃透Fiddler抓包教程(23)-Fiddler如何优雅地在正式和测试环境来回切换-上篇

1.简介 在开发或者测试的过程中&#xff0c;由于项目环境比较多&#xff0c;往往需要来来回回地反复切换&#xff0c;那么如何优雅地切换呢&#xff1f;今天介绍几种方法供小伙伴或者童鞋们进行参考。 2.实际工作场景 2.1问题场景 &#xff08;1&#xff09;已发布线上APP出…

1-3 AUTOSAR标准化接口

AUTOSAR标准化接口 AUTOSAR规范中&#xff0c;将不同模块间通信的接口主要分为以下三类&#xff1a; 标准接口&#xff08;Standardized Interface&#xff09; 在AUTOSAR规范中以C语言中API的形式明确定义。主要用于ECU上的BSW各模块间、RTE和操作系统间、RTE和通信模块间&am…

页面技术基础-html

页面技术基础-html 环境准备&#xff1a;在JDBC中项目上完成代码定义 1. 新建一个 Module:filr->右键 -》Module -》Java-》next->名字(html_day1)->finish 2. 在 Moudle上右键-》第二个选项&#xff1a;add framework .. -> 选择JavaEE下第一个选项 Web Apllicat…