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

news2024/12/23 19:06:14

最近跟朋友聊到了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.coloradmin.cn/o/1145266.html

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

相关文章

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

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

基于Or-Tools的指派问题建模求解(PythonAPI)

基于Or-Tools的指派问题建模求解(PythonAPI) 指派问题(又称为分配问题,assignment problem)基于Or-Tools的指派问题建模求解(PythonAPI)导入pywraplp库数据准备声明MIP求解器初始化决策变量初始…

自然语言处理 (NLP) 简介

自然语言处理 (Natural Language Processing NLP) 简介 本课程是关于NLP 101的4部分系列中的第1部分: 自然语言处理导论(今天的教程)BagofWords模型简介Word2Vec:自然语言处理中嵌入的研究BagofWords与Wo…

3年轻量:腾讯云轻量2核2G4M应用服务器366三年!

腾讯云轻量应用服务器三年特价,3年轻量2核2G4M服务器,2023双十一优惠价格366元三年,自带4M公网带宽,下载速度可达512KB/秒,300GB月流量,50GB SSD盘系统盘,阿腾云atengyun.com分享腾讯云轻量2核2…

apk反编译修改教程系列-----修改apk中的图片 任意更换apk桌面图片【三】

往期教程: apk反编译修改教程系列-----修改apk应用名称 任意修改名称 签名【一】 apk反编译修改教程系列-----任意修改apk版本号 版本名 防止自动更新【二】 这次实例演示下如何更换apk安装后的桌面图标图片。其实这个步骤前面我有一个教程贴。这次针对步骤做个补…

C++初阶-类和对象(中)1

类和对象(中)1 一、类的6个默认成员函数二、构造函数概念特性 三、析构函数概念特性 四、拷贝构造函数概念特征 一、类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何…

ASP.NET WebApi 极简依赖注入

文章目录 环境服务类启动项注入使用依赖注入的优点 环境 .NET Core 7.0ASP.NET CoreVisual Studio 2022 服务类 public class T_TempService {public T_TempService(){}public void Test(){}}启动项注入 #region 依赖注入 builder.Services.AddTransient<T_TempService&g…

【LeetCode力扣】189 53 轮转数组 | 最大子数组和

目录 1、189. 轮转数组 1.1、题目介绍 1.2、解题思路 2、53. 最大子数组和 2.1、题目介绍 2.2、解题思路 1、189. 轮转数组 1.1、题目介绍 原题链接&#xff1a;189. 轮转数组 - 力扣&#xff08;LeetCode&#xff09; ​ 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3输…

Android数据对象序列化原理与应用

序列化与反序列化 序列化是将对象转换为可以存储或传输的格式的过程。在计算机科学中&#xff0c;对象通常是指内存中的数据结构&#xff0c;如数组、列表、字典等。通过序列化&#xff0c;可以将这些对象转换为字节流或文本格式&#xff0c;以便在不同的系统之间进行传输或存…

ChineseChess4 2023.10.27

中国象棋残局&#xff1a;黑双卒压境&#xff0c;如何破黑中心卒 要么一将黑棋死棋&#xff0c;要么想法子把黑中卒干掉&#xff0c;而且干掉中卒&#xff0c;基本要想用车去抽&#xff0c;也不知道棋局有问题呢&#xff0c;还是怎么回事&#xff0c;没想到。 中国象棋残局模拟…

重要环节不可忽视,CSS性能优化引领用户体验!

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 ⭐ 专栏简介 &#x1f4d8; 文章引言 一、前…

【驱动开发】基于GPIO子系统编写LED驱动,编写应用程序进行测试设置定时器,5秒钟打印一次hello world

基于GPIO子系统编写LED驱动&#xff0c;编写应用程序进行测试&#xff0c;设置定时器&#xff0c;5秒钟打印一次hello world 驱动程序&#xff1a; #include <linux/init.h> #include <linux/module.h> #include <linux/of.h> #include <linux/of_gpio.…

Tensorflow2 中模型训练标签顺序和预测结果标签顺序不一致问题解决办法

本篇文章将详细介绍Tensorflow2.x中模型训练标签顺序和预测结果标签顺序不一致问题&#xff0c;这个问题如果考虑不周&#xff0c;或者标签顺序没有控制好的情况下会出现预测结果精度极其不准确的情况。 训练数据集的结构&#xff1a;数据集有超过10的类别数&#xff0c;这里包…

全网最详细的大数据架构搭建配置及说明文档

版本兼容 JDK1.8.0_211ZooKeeper3.4.14Hadoop3.2.1Hive3.1.2HBase2.2.1Scala2.13.1Spark2.4.4MySQL5.7.28 基本配置 修改ip和主机名 主机名IP地址JavaZookeeperHadoopHiveHBaseSparkMySQLhadoop192.168.137.201√√√√√√slave1192.168.137.202√√√√√√slave2192.168…

如何在《倩女幽魂》游戏中使用搭建工具

如何在《倩女幽魂》游戏中使用搭建工具 S5 一键搭建脚本 进行 游戏礼包销售。 首先&#xff0c;定义在《倩女幽魂》游戏中使用搭建工具 S5 一键搭建脚本 进行 游戏礼包销售&#xff0c;需要完成以下几个步骤&#xff1a; 准备工作&#xff1a;确保您已经安装了华科云商软件&am…

Vite+Vue3项目全局引入scss文件

前言 Sass 是世界上最成熟、最稳定、最强大的专业级CSS扩展语言&#xff01;在日常项目开发过程中使用非常广泛&#xff0c;今天主要讲一下 ViteVue3 项目中该如何全局引入 scss 文件&#xff0c;引入混合 mixin 文件的不同配置。捎带说一下 Vue2 中的引入方式做一下简单的对比…

力扣:143. 重排链表(Python3)

题目&#xff1a; 给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0 → L1 → … → Ln - 1 → Ln请将其重新排列后变为&#xff1a; L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … 不能只是单纯的改变节点内部的值&#xff0c;而是需要实际的进…

8通道模数转换AD7091驱动代码SPI接口ADC,verilog

名称&#xff1a;8通道模数转换AD7091驱动代码 软件&#xff1a;QuartusII 语言&#xff1a;Verilog 代码功能&#xff1a; 使用verilog代码设计AD7091R-8驱动代码 控制接口为SPI接口&#xff0c;实现8通道模数转换&#xff0c;输出8通道数字信号。 FPGA代码Verilog/VHDL代码…

JS问题:如何实现文本一键复制和长按复制功能?

前端功能问题系列文章&#xff0c;点击上方合集↑ 序言 大家好&#xff0c;我是大澈&#xff01; 本文约2000字&#xff0c;整篇阅读大约需要4分钟。 本文主要内容分三部分&#xff0c;第一部分是需求分析&#xff0c;第二部分是实现步骤&#xff0c;第三部分是问题详解。 …

学习视觉CV Transformer (2)--Transformer原理及代码分析

下面结合代码和原理进行深入分析Transformer原理。 2 Transformer深入分析 对于CV初学者来说&#xff0c;其实只需要理解Q K V 的含义和注意力机制的三个计算步骤&#xff1a; Q 和所有 K 计算相似性&#xff1b;对相似性采用 Softmax 转化为概率分布&#xff1b;将概率分布…