【Bond随你温故Kubernetes之】壹图复盘service与内部通信

最近跟朋友聊到了k8s

我:     “环境给了就只管用呗,副本自动管理地妥妥的,有啥可以复盘的?“

朋友: “容器的通讯与服务暴露还是有点东西的”

我:     “嗯~~(抿嘴点头)k8s端口名称众多,关系错综复杂,若要正确使用,就需要理清它们,复杂程度不亚于看懂明星们的前任关系图 :)”  

那就安排~


前言:本篇通过一个demo证实了各端口之间的关系与所起的作用,其过程涉及了容器之间的互相访问与前端反向代理,最终将服务暴露给用户这一E2E过程。

一. 首先了解下k8s service的4种类别:

1.ClusterIP:为k8s内部的其他Pod提供静态的访问服务,因为Pod的ip就像孩子的脸,说变就变,会导致其他pod不能稳定访问到该Pod。

2.NodePort:允许用户从集群从外部访问内部Pod,作用类似DNAT. 但是建议前端用Nginx反向代理,不要用它进行暴露服务。

3.LoadBalancer: 接入公有云实现负载均衡时使用,它对接的组件不在K8s内;注意与下图中的LoadBalancer:Ingress-Nginx-Controller 区分开。后者是部署在k8s内部的,为内部容器提供反向代理。(Ingress-Nginx-Controller 有机会再单独展开)

4.ExternalName:允许从容器内,借助内部与外部的FQDN实现访问外部资源,它不依赖ClusterIP。使用场景:k8s内的应用需要访问外部重型的数据库服务之类(本次画幅有限,不做展开)

二,这个demo表面看起来是这样的:

Pod间进行通讯,且数据持久化保存。

还有这样,前端页面实现负载均衡:

三. 资源看起来是这样的:

四. 背后的资源与端口是这样组织的:(请点开放大观摩)

端口、服务关系确实比较多,几句话难以表述清楚,但是有几个点值得指出:

1.k8s的资源里有各种port(containerPort,targetPort,Port,NodePort),图中标注了它们的位置与关系。同时澄清了一些问题:例如内部服务发现并不依赖NodePort,conteinerPort,证明了都是依赖于标签选择器。

2.service中的ClusterIP扮演了内部访问的重要角色,它与Port(即容器端口)为其他Pod提供服务暴露。

3.容器之间的路由由Kube-proxy维护,保存在IPVS/IPtables,两者从效果上一致,只有大规模部署时的性能差别,本实验用的IPVS,仅作展示。

4.同一个Pod内是可以有多个容器的,它们共用同一个PodIP,它们的containerPort分别一一对应到targetPort,端口号完全相同。但是前者是delpoyment级别的定义,后者是service级别的定义。

5.ingress-nginx-controller是k8s自己发布的LB组件,兼容性最好。管理员通过配置它的规则,让它自动转译为内部nginx容器中的具体配置(可进容器查看到)。本例演示的是单域名,单服务反向代理。多子域名多服务的负载均衡画不下了,见谅,有机会再单独复盘这部分,再局部放大看看。

6.internalTrafficPolicy与externalTrafficPolicy比较容易演示,但是画不下了。需要注意的是如果为local,则服务pod接收到的IP地址是Flannel的地址,而非客户端Pod地址。

7.手动给各个pod内塞了静态页面,并留下文字标记,方便curl侦测最终是哪个Pod在服务。

8.使用了了PV,PVC让数据持久化,即使mysql容器销毁数据也不会丢失,需要展开的话,再说。

9.想到啥再说吧,写多了太难读,图还是更清楚一些。

--- To Be Continued ---

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

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

相关文章

C语言每日一题(21)删除排序数组中的重复项

力扣 26.删除排序数组中的重复项 题目描述 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考…

计算机网络基础二

课程目标 了解 OSI 七层模型分层结构 了解 TCP/IP 协议簇四层模型分层结构 能够说出 TCP/IP 协议簇中 运输层、网络层和数据链路 层常见的 相关协议 能够说出 TCP/IP 的三次握手四次断开过程 了解 Vmware 的三种网络模式 能够使用客户端工具连接虚拟机 掌握主机名、 DNS…

Android S从桌面点击图标启动APP流程 (六)

系列文章 Android S从桌面点击图标启动APP流程 (一)Android S从桌面点击图标启动APP流程 (二) Android S从桌面点击图标启动APP流程 (三) Android S从桌面点击图标启动APP流程 (四) Android S从桌面点击图标启动APP流程 (五) Android 12的源码链接: android 1…

【OpenCV实现图像的算数运算,性能测试和优化,改变颜色空间】

文章目录 OpenCV功能概要图像的算数运算性能测试和优化改变颜色空间对象追踪 OpenCV功能概要 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,提供了丰富的图像处理和计算机视觉算法。它支持多种编程语言&…

Java中的volatile关键字

volatile是什么? "volatile"是一个关键字,用于修饰变量。它的作用是告诉编译器该变量可能会在意料之外的时候被修改,因此编译器在对该变量进行优化时需要特别小心。 具体来说,当一个变量被声明为"volatile"…

算法通过村第十七关-贪心|白银笔记|贪心高频问题

文章目录 前言区间问题判断区间是否重复合并区间插入区间 字符串分割加油站问题总结 前言 提示:如果生活把你的门关上了,那你就再打开,这就是门,门就是这样的。 --佚名 贪婪的思想不一定要理解的很透彻,但是贪婪的问题…

Cookie技术

Cookie中文名称为小型文本文件,指某些网站为了辨别用户身份、进行会话跟踪而储存在用户本地终端上的数据。 Cookie是由服务器端生成,发送给User-Agent(—般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文…

软考系列(系统架构师)- 2013年系统架构师软考案例分析考点

试题一 软件架构(根据描述填表、ESB 定义和功能) 【问题1】(10分) 服务建模是对Ramp Coordination信息系统进行集成的首要工作,公司的架构师首先对Ramp Coordination信息系统进行服务建模,识别出系统中的两…

从Mysql架构看一条查询sql的执行过程

1. 通信协议 我们的程序或者工具要操作数据库,第一步要做什么事情? 跟数据库建立连接。 首先,MySQL必须要运行一个服务,监听默认的3306端口。在我们开发系统跟第三方对接的时候,必须要弄清楚的有两件事。 第一个就是通…

uniapp开发小程序 小米手机真机bottom:0无效 底部间隙 设备安全区域处理办法

uniApp自定义导航 CSS设置 bottom:0竟然无效,而iphone和开发模拟器没有问题 height: 150rpx;position: fixed;left: 0;right: 0;bottom: calc(var(--window-bottom,0)); 网上查了各种方法,包括设置bottom:-20啊以及 padding-bottom: constant(safe-are…

静电模型PIC方法的Matlab仿真设计

任务要求: 采用PIC模拟方法的静电模型来模拟多环形电子注在圆柱系统中的运动轨迹。模拟电子枪阴极表面发射电子注,电子在静态场的作用下运动直至稳定的运动过程。其中 系统长:0.01m 系统半径:0.005m 入射的每个宏电子电流&#x…

业界中说的快速原型法是什么

快速原型法是一种软件开发过程,其核心思想是在开发初期快速构建一个系统的原型,即一个工作模型,以便用户和开发者能够更好地理解系统的需求和功能。这种方法强调快速迭代和用户参与,目的是更早地发现和修正问题,从而提…

Ubuntu中查看电脑有多少个核——lscpu

1. 使用lscpu命令: 打开终端并输入以下命令: lscpu你会看到与CPU相关的详细信息。查找"CPU(s)"这一行来看总的核心数。另外,“Core(s) per socket”表示每个插槽或每个物理CPU的核数,“Socket(s)”表示物理CPU的数量。将这两个值相乘即得到总…

IO流框架,缓冲流

一.缓冲流有什么优点 Java中的缓冲流(Buffered Stream)具有以下优势: 提高效率:缓冲流通过在内存中缓存一部分数据,减少了直接从内存到磁盘或从磁盘到内存的频繁IO操作,从而提高了读写效率。缓冲区大小调整…

蓝桥杯双周赛算法心得——通关(哈希+小根堆)

大家好,我是晴天学长,这是很重要的贪心思维题,哈希的存法和小根堆的表示很重要。 1) .通关 2) .算法思路 通关 用hash(int[])存点的子节点并按输入顺序存关卡的号码(输入顺序就是) 列如&#…

RabbitMQ-死信交换机和死信队列

1. 简介 1.1 DLX简介 DLX: Dead-Letter-Exchange 死信交换器,死信邮箱 当消息成为Dead message后,可以被重新发送到另一个交换机,这个交换机就是DLX。 如下图所示: 其实死信队列就是一个普通的交换机,有些队列的消息…

初步认识 Web Components 并实现一个按钮

目录 1.Web Components 基本概念 1.1 三个场景 1.2 是什么 2.使用 Custom Elements 实现一个按钮 2.1 概念介绍 2.1.1 Shadow DOM 2.1.2 Element.attachShadow() 2.1.3 在组件中 使用 Shadow DOM 基本步骤 2.1.4 attributeChangedCallback 2.1.5 get observedAttribu…

Spring Security漏洞防护—HttpFirewall和 HTTPS

一、HttpFirewall Spring Security有几个领域,你所定义的 pattern 会针对传入的请求进行测试,以决定应该如何处理请求。这发生在 FilterChainProxy 决定请求应该通过哪个过滤链时,以及 FilterSecurityInterceptor 决定哪些安全约束适用于请求…

计算机毕设 flink大数据淘宝用户行为数据实时分析与可视化

文章目录 0 前言1、环境准备1.1 flink 下载相关 jar 包1.2 生成 kafka 数据1.3 开发前的三个小 tip 2、flink-sql 客户端编写运行 sql2.1 创建 kafka 数据源表2.2 指标统计:每小时成交量2.2.1 创建 es 结果表, 存放每小时的成交量2.2.2 执行 sql &#x…

Servlet 与Spring对比!

前言: Spring相关的框架知识,算是目前公司在用的前沿知识了,很重要!! 那么以Spring为基础的框架有几个? 以Spring为基础的框架包括若干模块,其中主要的有Spring Framework、Spring Boot、Spring…