11-k8s-service网络
文章目录
- 一、网络相关资源介绍
- 二、开启ipvs
- 三、nginx网络示例
- 四、pod之间的访问示例
- 五、service反向代理示例
一、网络相关资源介绍
-
Servcie介绍
Service是对一组提供相同功能的Pods的抽象,并为它们提供一个统一的入口。借助Service,应用可以方便的实现服务发现与负载均衡,并实现应用的零宕机升级。Service通过标签来选取服务后端,一般配合Replication Controller或者Deployment来保证后端容器的正常运行。这些匹配标签的Pod IP和端口列表组成endpoints,由kubeproxy负责将服务IP负载均衡到这些endpoints上。即service不会直接到pod,service是直接到endpoint资源,就是地址加端口,再由endpoint再关联到pod。
-
Endpoint介绍
Endpoint主要记录了每个pod的IP地址信息,当Pod的IP发生变化时,endpoints会进行更新。当我们创建Service的时候,会自动生成一个Endpoint。
-
Service的四种类型
-
ClusterIP:默认类型,自动分配一个仅cluster内部可以访问的虚拟IP
-
NodePort:通过每个 Node 上的 IP 和静态端口(NodePort)暴露服务,以便外部可以通过端口访问到该服务。
如果不指定会随机指定端口,端口范围:30000~32767,端口范围配置在/usr/lib/systemd/system/kube-apiserver.service文件中
-
LoadBalancer:使用云提供商的负载均衡器,可以向外部暴露服务。外部的负载均衡器可以路由到 NodePort 服务和 ClusterIP 服务。
-
ExternalName:将服务通过DNS CNAME记录方式转发到指定的域名(通过 spec.externlName 设定) 。需要kube-dns版本在1.7以上。
-
-
kube-proxy
Service在很多情况下只是一个概念,真正起作用的其实是kube-proxy服务进程,每个Node节点上都运行着一个kube-proxy服务进程。当创建Service的时候会通过api-server向etcd写入创建的service的信息,而kube-proxy会基于监听的机制发现这种Service的变动,然后它会将最新的Service信息转换成对应的访问规则
kube-proxy目前支持三种工作模式:
- userspace :userspace模式下,kube-proxy会为每一个Service创建一个监听端口,发向Cluster IP的请求被Iptables规则重定向到kube-proxy监听的端口上,kube-proxy根据LB算法选择一个提供服务的Pod并和其建立链接,以将请求转发到Pod上。 该模式下,kube-proxy充当了一个四层负责均衡器的角色。由于kube-proxy运行在userspace中,在进行转发处理时会增加内核和用户空间之间的数据拷贝,虽然比较稳定,但是效率比较低。
- iptables:iptables模式下,kube-proxy为service后端的每个Pod创建对应的iptables规则,直接将发向Cluster IP的请求重定向到一个Pod IP。 该模式下kube-proxy不承担四层负责均衡器的角色,只负责创建iptables规则。该模式的优点是较userspace模式效率更高,但不能提供灵活的LB策略,当后端Pod不可用时也无法进行重试。
- ipvs 模式(推荐):ipvs模式和iptables类似,kube-proxy监控Pod的变化并创建相应的ipvs规则。ipvs相对iptables转发效率更高。除此以外,ipvs支持更多的LB算法。
二、开启ipvs
ps:master节点操作
-
查看未开启状态:ipvsadm -Ln
-
在Master节点修改,将mode: " "修改为mode: “ipvs”:kubectl edit -n kube-system cm kube-proxy
-
查看kube-system命名空间下的kube-proxy:kubectl get pod -n kube-system
-
删除:kubectl get pod -n kube-system |grep kube-proxy |awk ‘{system(“kubectl delete pod “$1” -n kube-system”)}’
-
删除后,k8s会自动再次生成,新生成的kube-proxy会采用刚刚配置的ipvs模式,再次查看:kubectl get pod -n kube-system
-
查看启动方式
kubectl get pod -n kube-system | grep kube-proxy kubectl logs -n kube-system kube-proxy-4c5xj
- 再次查看:ipvsadm -Ln
三、nginx网络示例
ps:master节点操作
-
部署:kubectl create deployment nginx --image=nginx
-
查看状态:watch -n 3 kubectl get pods -A
-
本机访问
1)查看默认生成的ClusterIP:kubectl get pod -o wide
2)访问:curl 192.169.189.110
3)查看路由:route -n
4)查看192.168.248.12服务器的路由
5)每个节点都会记录相应的CIN生成的IP,并且也会记录对应的源IP作为互联网关口。如上所见,我们在worker2(192.168.248.12)部署了pod,当我们访问189.*的时候,会跳转到worker2(192.168.248.12)网关。所以当我们访问 192.169.189.110时,实际上访问的是192.168.248.12上的nginx。
-
创建供外部访问的ip和端口(NodePort):kubectl expose deployment nginx --port=80 --type=NodePort
ps:在最新的 Kubernetes 版本中,
kubectl expose
不再支持--node-port
参数来指定 NodePort 端口。如果需要指定端口,则需要编写yaml文件生成。 -
查看端口:kubectl get pods,svc
-
访问nginx页面:http://192.168.248.11:30579
四、pod之间的访问示例
-
pod之间的网络访问推荐通过service name进行访问
-
创建busybox的pod并且进入: kubectl run -it --image busybox:1.28.4 dns-test --restart=Never --rm /bin/sh
ps:busybox是一个聚成了一百多个最常用linux命令和工具的软件工具箱,它在单一的可执行文件中提供了精简的Unix工具集,便于测试。
-
访问nginx:wget http://nginx
-
跨空间访问其他的service(加上".空间名"): wget http://nginx.default
五、service反向代理示例
-
反向代理外部ip:创建service并且自定义endpoints
1)编写service.yaml:vi /opt/edsvc.yaml
ps:不指定空间的默认default空间
apiVersion: v1 kind: Service metadata:name: nginx-svc-external labels:app: nginx spec:ports: - port: 80 targetPort: 80name: web type: ClusterIP
解释
apiVersion: v1 kind: Service #资源类型为Service metadata:name: nginx-svc-external # Service 名字labels:app: nginx # Service 自己本身的标签 spec:ports: #端口映射- port: 80 #service自己的端口,在使用内网ip访间时使用targetPort: 80 #目标pod的端口name: nginx-web #为端口起个名字type: ClusterIP #主随机启动一个瑞口(3080-32767》,映射到ports 中的踏口,该端口是直接掷定在node 上的,且集群中的每一个node都会绑定这个端口#也可以用于将服务暴露给外部访问,但是这种方式实际生产环境不推荐,效率较低,而且 Service 是四层负载
2)编写endpoints.yaml:vi /opt/endpoints.yaml
apiVersion: v1 kind: Endpoints metadata:labels:app: nginx name: nginx-svc-external namespace: default subsets: - addresses:- ip: 120.78.159.117 ports: - name: nginx-webport: 80protocol: TCP
解释
apiVersion: v1 kind: Endpoints metadata:labels:app: nginx # 与service一致name: nginx-svc-external #与service一致namespace: default #与service一致 subsets: - addresses:- ip: 120.78.159.117 #目标ip 地址ports: #与service一致- name: webport: 80protocol: TCP
3)创建资源
kubectl apply -f /opt/edsvc.yaml kubectl apply -f /opt/endpoints.yaml
4)查看代理地址:kubectl get ep
4)测试访问:kubectl run -it --image busybox:1.28.4 dns-test --restart=Never --rm /bin/sh --> wget http://nginx-svc-external
ps:可以看到,路径转发到外网ip去了
-
反向代理外部域名
1)创建资源:vi /opt/baidusvc.yaml
apiVersion: v1 kind: Service metadata:labels:app: wolfcode-external-domainname: wolfcode-external-domain spec:type: ExternalName externalName: www.wolfcode.cn
2)创建资源:kubectl apply -f /opt/baidusvc.yaml
3)查看svc:kubectl get svc
4)测试访问:kubectl run -it --image busybox:1.28.4 dns-test --restart=Never --rm /bin/sh --> wget wolfcode-external-domain
相关文章:

11-k8s-service网络
文章目录 一、网络相关资源介绍二、开启ipvs三、nginx网络示例四、pod之间的访问示例五、service反向代理示例 一、网络相关资源介绍 Servcie介绍 Service是对一组提供相同功能的Pods的抽象,并为它们提供一个统一的入口。借助Service,应用可以方便的实现…...

MyBatisPlus(二十二)代码生成器
使用场景 使用代码生成器,根据数据库表,自动生成对应的 Entity,Mapper,Service,Controller 。 代码 依赖 两个依赖: 生成器依赖模板依赖 <dependency><groupId>com.baomidou</groupId&…...
git报错The project you were looking for could not be found 解决方式
问题描述: 使用git从远程仓库克隆项目到本地的时候。 git clone http://gitlab.com/project/xxxx.git出现这个问题:The project you were looking for could not be found. 原因分析: 你的账号没有项目的权限,你可以在浏览器输…...

“编辑微信小程序与后台数据交互与微信小程序wxs的使用“
引言 在现代移动应用开发中,微信小程序已经成为了一个非常流行和广泛使用的平台。为了使小程序能够展示丰富的内容和实现复杂的功能,与后台数据的交互是至关重要的。同时,微信小程序还提供了一种特殊的脚本语言——wxs,用于增强小…...

从Linux的tty_struct指针获取驱动上下文
背景 问题 前段时间开发一个tty驱动,用途是实现仪器对GPIB消息的接收、处理和上报。对于上报场景,下位机应用将上报内容写入一个驱动创建的tty设备,tty子系统将应用的输入转发给tty驱动,tty驱动将其转换成对SPI从设备࿰…...

PHP WAP餐厅点餐系统mysql数据库web结构apache计算机软件工程网页wamp
一、源码特点 PHP餐厅点餐系统是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 PHP WAP餐厅点餐系统 代码 https://download.csdn.net/download/qq_41221322/88440001 二、…...

智慧公厕改变城市生活,厕所革命标杆应用解决方案
随着城市化进程的加快,公厕作为城市基础设施的重要组成部分,扮演着不可忽视的角色。然而,传统的公厕粗放型管理模式,已经无法满足市民日益增长的需求。为了提升公厕的管理和服务水平,智慧公厕应运而生。 什么是智慧公…...

YOLOv5改进实战 | 更换主干网络Backbone(四)之轻量化模型MobileNetV3
前言 轻量化网络设计是一种针对移动设备等资源受限环境的深度学习模型设计方法。下面是一些常见的轻量化网络设计方法: 网络剪枝:移除神经网络中冗余的连接和参数,以达到模型压缩和加速的目的。分组卷积:将卷积操作分解为若干个较小的卷积操作,并将它们分别作用于输入的不…...

上新啦!请查收云原生虚拟数仓 PieCloudDB 十月动态
PieCloudDB Database 最新动态 PieCloudDB 压缩效率得到提升 为了节省存储空间,降低用户存储费用,PieCloudDB 在压缩率上不断优化,包括: 对 HLL(HyperLogLog)支持游程编码(Run Length Encodi…...
第五章:Python中的集合(上)
Python中的集合 是一组不可重复元素的无序集合。集合通常用于在其中执行成员测试,删除重复项,计算交集、并集和差集等操作。 Python的集合是可迭代对象。具体来说,集合可以通过for循环逐个访问其中的元素。同时,集合还支持一些迭代器相关的方法,例如iter()函数和next()函…...

虚拟机灾备建设中NFS存储直接访问技术应用
NFS(Network File System)是一种网络文件系统,允许不同计算机之间共享文件和目录。在Linux系统中,可以使用NFS协议来访问网络存储。 当新服务器硬盘不足时,旧的服务器硬盘容量大,不拔硬盘的情况下…...
java业务开发常用的配置表及代码
配置表 通过配置表,灵活的配置。 开发中某些经常变更的参数值,加上配置。比如 订单30分钟后失效,需求变更,要改为15分钟,那么直接改配置表就行了,不用发版。 某些关键的容易出错的逻辑,加上一…...
安装Homebrew安装Git(Mac)
使用Homebrew安装Git(Mac) 1 安装Xcode 安装Homebrew之前,需要安装Xcode Comand Line Tools: xcode-select --install 2 安装Homebrew /usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/mas…...

[云原生1.] Docker容器的简单介绍和基本管理
文章目录 1. Docker容器的基本概述1.1 简介1.2 容器的优点1.3 Docker与虚拟机的区别1.4 Docker核心组成1.4.1 镜像1.4.2 容器1.4.3 仓库 1.5 容器在内核中支持2种重要技术1.5.1 linux六大namespace(命名空间) 1.6 Docker的使用场景 2. Docker的部署2.1 前…...
JSR303数据校验
Component //注册bean ConfigurationProperties(prefix "person") Validated //数据校验 public class Person { Email(message"邮箱格式错误") //name必须是邮箱格式 private String name; } 使用数据校验,可以保证数据的正确性!…...

JavaCV + FFmpeg 播放音视频
JavaCV FFmpeg 播放音视频 1、导入JavaCV库1.1 使用ffmpeg必要库1.2 简单FFmpeg命令 待续~~~~ FFmpeg documentation bytedeco/javacv - GitHub 1、导入JavaCV库 gradle下面这种会导入javacv-platform所有包,非常耗时:https://repo.maven.apache.org/…...

万能DIY预约小程序源码系统 上门预约服务小程序搭建 适用于各种预约场景 自由DIY功能模块
在这个快节奏的时代,预约服务已经成为了我们日常生活的一部分。从看病挂号到餐厅预订,从美发美容到家政服务,预约已经深入到了各个领域。然而,传统的预约方式存在着许多不便,如电话预约、在线填写表格等,不…...
边缘检测算法
边缘检测算法是在数字图像处理中常用的一种技术,用于检测图像中物体边缘的位置。以下是几种常见的边缘检测算法: Sobel算子:Sobel算子是一种基于梯度的算法,通过计算图像的水平和垂直方向的梯度值,并将其组合起来得到边…...

数据结构与算法-树
树 🎈1.树和二叉树🎈2.树🔭2.1树的定义🔭2.2树的4种表示方法🔭2.3树的基本术语🔭2.4树的抽象数据类型定义 🎈3.二叉树🔭3.1二叉树的定义🔭3.2二叉树的抽象数据类型定义&a…...
【Bug排查】Uncaught (in promise) Error: Infinite redirect in navigation guard
记一次Bug排查 今日在做尚硅谷的商品甄选项目时,遇到无法登录的问题:报错Uncaught (in promise) Error: Infinite redirect in navigation guard 一开始我去搜CSDN,都说是路由的问题,我对前端也不了解,试着改了一下&…...

网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...

Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...