kubernetes-service微服务
目录
一、service微服务
二、Ipvs模式
三、ClusterIP
1.ClusterIP
2.headless
四、NodePort
1.NodePort
2.默认端口
五、LoadBalancer
1.LoadBalancer
2.metallb
六、ExternalName
一、service微服务
Kubernetes Service微服务是一种基于Kubernetes的微服务架构,它通过将服务拆分成多个小服务单元来实现高度可扩展性、弹性和可维护性。每个服务单元都有自己的容器、存储和网络,可以独立部署和升级。同时,Kubernetes Service微服务还可以使用Kubernetes内置的负载均衡器来自动化地分配请求和处理服务故障。总之,Kubernetes Service微服务是一种基于Kubernetes的先进的容器编排和管理技术,它可以提供高效、高可用和高可扩展的微服务体系结构。
二、Ipvs模式
Kubernetes Service的IPVS模式是一种高效的负载均衡方式,它使用Linux内核提供的IPVS(IP Virtual Server)技术来实现。
在IPVS模式下,Kubernetes会在每个节点上创建一个独立的IPVS代理,并将所有服务的虚拟IP地址通过BGP协议广播到物理网络中。这些IP地址随后被路由到相应的节点,并由节点上的IPVS代理进行请求的转发。
IPVS代理可以根据服务的负载均衡策略(如轮询、源IP哈希、最小连接数等)选择合适的后端Pod,并将请求转发到该Pod上。同时,IPVS代理还支持会话保持(Session Affinity)功能,确保来自同一客户端的请求都被转发到同一后端Pod上,以避免数据不一致等问题。
IPVS模式的优势在于它的性能和可扩展性非常好,能够轻松处理大量的网络请求。同时,由于IPVS代理和物理网络之间的解耦,它也具有较好的灵活性和可靠性,能够适应各种不同的网络环境和服务需求。
修改proxy配置:
kubectl -n kube-system edit cm kube-proxy 
重启pod
kubectl -n kube-system get pod|grep kube-proxy | awk '{system("kubectl -n kube-system delete pod "$1"")}' 
切换ipvs模式后,kube-proxy会在宿主机上添加一个虚拟网卡:kube-ipvs0,并分配service IP


三、ClusterIP
1.ClusterIP
Kubernetes中的Service对象可以用来定义一组Pod的逻辑访问方式,其中ClusterIP是Service的默认类型。ClusterIP会为Pod提供一个虚拟IP地址,这个地址只在Kubernetes集群内部可用,其他外部网络无法访问该地址。
创建测试示例:
vim myapp.ymlapiVersion: apps/v1
kind: Deployment
metadata:labels:app: myappname: myapp
spec:replicas: 6selector:matchLabels:app: myapptemplate:metadata:labels:app: myappspec:containers:- image: myapp:v1name: myapp---apiVersion: v1
kind: Service
metadata:labels:app: myappname: myapp
spec:ports:- port: 80protocol: TCPtargetPort: 80selector:app: myapptype: ClusterIP//ClusterIP是Kubernetes Service的一种类型。它为同一个Kubernetes集群中的其他Pod提供了访问Service的IP地址。这个IP地址和Service是虚拟的, 不对外暴露,只能在集群内部使用。 
kubectl apply -f myapp.yml
kubectl get svc
dig -t A myapp.default.svc.cluster.local. @10.96.0.10 service创建后集群DNS提供解析


ClusterIP Service类型默认使用iptables调度。iptables负责将Service的ClusterIP地址映射到后端Pod的IP地址和端口上,处理请求的负载均衡和高可用性

2.headless
Kubernetes Service 的 headless 模式是指 Service 不会自动创建 ClusterIP 代理。在headless 模式下,当 Service 对应的 Pod 通过 DNS 查询时,将返回所有 Pod 的 IP 地址列表,而不是一个单独的 IP 地址。
headless Service 可以用于以下场景:
- 有状态应用程序(StatefulSet):每个 Pod 都需要一个唯一的标识符,例如数据库的名称。
- 多副本应用程序:需要将每个副本的 IP 地址列表返回给客户端来进行负载均衡。
- 集群内部通信:例如,一个应用程序需要直接与另一个应用程序的 Pod 进行通信,而不是 Service 的负载均衡代理。
使用 headless Service 的方法是,在 Service 的 YAML 文件中将 clusterIP 设置为 None,例如:
vim myapp.ymlapiVersion: v1
kind: Service
metadata:labels:app: myappname: myapp
spec:ports:- port: 80protocol: TCPtargetPort: 80selector:app: myapptype: ClusterIPclusterIP: None 
kubectl delete svc myapp
kubectl apply -f myapp.yml
kubectl get svc headless模式不分配vip

headless通过svc名称访问,由集群内dns提供解析
dig -t A myapp.default.svc.cluster.local. @10.96.0.10 
集群内直接使用service名称访问
kubectl run demo --image busyboxplus -it --rmnslookup myapp 
四、NodePort
1.NodePort
NodePort类型的Service会在每个Node上打开一个端口,用于将请求转发到Pod。
nodePort是Service类型的一个字段,用于指定转发请求的端口范围。默认情况下,该值是随机分配的。
以下是创建一个NodePort类型的Service的yaml示例:
vim myapp.ymlapiVersion: v1
kind: Service
metadata:labels:app: myappname: myapp
spec:ports:- port: 80protocol: TCPtargetPort: 80selector:app: myapptype: NodePort 

nodeport在集群节点上绑定端口,一个端口对应一个服务

2.默认端口
NodePort 的默认端口是 30000 到 32767 之间的任意一个端口。可以通过 kubectl get svc 命令查看 NodePort 所绑定的端口。
vim myapp.ymlapiVersion: v1
kind: Service
metadata:labels:app: myappname: myapp
spec:ports:- port: 80protocol: TCPtargetPort: 80nodePort: 33333selector:app: myapptype: NodePort
nodeport默认端口是30000-32767,超出会报错:

添加如下参数,端口范围可以自定义
- --service-node-port-range=30000-50000

修改后api-server会自动重启,等apiserver正常启动后才能操作集群

五、LoadBalancer
1.LoadBalancer
Kubernetes中的LoadBalancer是一种服务类型,它允许在云环境中创建外部可访问的负载均衡器。在使用LoadBalancer类型的服务时,Kubernetes集群会自动创建云供应商的负载均衡器,并将请求分发到后端Pod中。
LoadBalancer服务类型需要云供应商支持,并且通过自动创建外部负载均衡器来实现。例如,使用AWS的Elastic Load Balancer或GCP的Load Balancer。配置一个LoadBalancer服务需要定义服务的端口和目标端口,以及要使用的负载均衡算法和策略。
使用LoadBalancer服务类型,可以轻松地将Kubernetes中部署的应用程序暴露给外部网络,并在应用程序实例之间分配流量,以便提供高可用性和可扩展性。
vim myapp.ymlapiVersion: v1
kind: Service
metadata:labels:app: myappname: myapp
spec:ports:- port: 80protocol: TCPtargetPort: 80selector:app: myapptype: LoadBalancer

LoadBalancer模式适用云平台,裸金属环境需要安装metallb提供支持
2.metallb
Metallb是一个用于处理Load Balancing的开源软件。在Kubernetes集群中,Service是一个抽象的概念,它为Pod提供了一个统一的入口,使得Pod可以被其他Pod或外部网络访问到。Metallb为Kubernetes Service提供了一个软件定义的Load Balancer,它可以自动分配IP地址,并将流量路由到正确的Pod。
Metallb的核心组件是speaker和controller。controller负责监控Kubernetes Service和Pod的状态,并为每个Service分配一个IP地址。而speaker则会在每个节点上运行,将Service的IP地址配置到节点上的网络接口。
使用Metallb,Kubernetes集群中的Service可以获得一个固定的IP地址,而无需依赖于云厂商的Load Balancer。这样可以提高集群的稳定性和可靠性,并且可以在任何环境下部署Kubernetes集群。
kubectl edit configmap -n kube-system kube-proxy
kubectl -n kube-system get pod|grep kube-proxy | awk '{system("kubectl -n kube-system delete pod "$1"")}'


strictARP: true //启用 Kubernetes Service 的 strictARP 选项可以防止 ARP 欺骗攻击,提高网络安全性
下载部署文件
wget https://raw.githubusercontent.com/metallb/metallb/v0.13.11/config/manifests/metallb-native.yaml 
修改文件中镜像地址,与harbor仓库路径保持一致


上传harbor仓库:


部署服务
kubectl apply -f metallb-native.yaml
kubectl -n metallb-system get pod 
配置分配地址段
vim config.yamlapiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:name: first-poolnamespace: metallb-system
spec:addresses:- 192.168.67.120-192.168.67.200 #修改为自己本地地址段---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:name: examplenamespace: metallb-system
spec:ipAddressPools:- first-pool

通过分配地址从集群外访问服务

六、ExternalName
Kubernetes Service 的 ExternalName 类型是一种非常简单的服务类型,它允许 Kubernetes 集群中的服务通过一个 DNS CNAME 来引用一个外部的服务。这个服务可以是集群外的任何服务,比如一个第三方的数据库或者缓存服务器等。
使用 ExternalName 类型的服务,可以方便地将 Kubernetes 集群中的应用程序连接到集群外的服务,同时还可以使用 Kubernetes 的负载均衡和服务发现功能。这样就可以实现将多个服务整合到一个统一的 DNS 域名下管理的目的。
ExternalName 类型的服务定义非常简单,只需要指定服务名称和外部服务的 DNS 名称即可。例如:
vim externalname.yamlapiVersion: v1
kind: Service
metadata:name: my-service
spec:type: ExternalNameexternalName: www.westos.org‘kubectl apply -f externalname.yaml
dig -t A my-service.default.svc.cluster.local. @10.96.0.10


相关文章:
kubernetes-service微服务
目录 一、service微服务 二、Ipvs模式 三、ClusterIP 1.ClusterIP 2.headless 四、NodePort 1.NodePort 2.默认端口 五、LoadBalancer 1.LoadBalancer 2.metallb 六、ExternalName 一、service微服务 Kubernetes Service微服务是一种基于Kubernetes的微服务架构&…...
让你笑到不行的笑话短视频接口,快来试试!
11在当今这个快节奏的社会中,笑话成为了许多人调节情绪的有效方法。如今,短视频平台已经成为了最受欢迎的娱乐方式之一,因此,将笑话和短视频结合起来,成为了一种很有趣的方式来带给我们欢乐。今天我们要介绍的是挖数据…...
系列四十五、Spring的事务传播行为案例演示(五)#MANDATORY
一、演示Spring的传播行为(MANDATORY) 1.1、StockServiceImplMANDATORY /*** Author : 一叶浮萍归大海* Date: 2023/10/30 15:43* Description: 演示MANDAORY的传播行为* 外部不存在事务:抛出异常 No existing transaction found for…...
idea插件(二)-- String Manipulation(字符串处理工具)
目录 1. 安装 String Manipulation 2. 默认快捷键 3. 操作说明 3.1 变量名的形式处理 3.2 文本形式的转化...
HQChart实战教程67-worker批量计算股票指标
HQChart实战教程67-worker批量计算股票指标 什么是Worker批量指标计算示例地址步骤1. 创建一个后台工作线程类2. 发送指标计算任务3. 接收计算结果数据对接 完整源码demo_workerthread_sina.htmlhqchart_worker_sina.js HQChart插件源码地址 什么是Worker Worker 接口是 Web W…...
博客系统自动化测试项目实践
文章目录 一.测试需求分析1.功能分析2.非功能分析 二.制定测试方案(计划 策略)三.编写测试用例四.执行自动化测试用例五.编写测试报告六.项目总结 一.测试需求分析 1.功能分析 通过功能测试需求分析 2.非功能分析 非功能分析主要从:界面,性能,安全性,…...
软考高级之系统架构师系列之操作系统基础
概念 接口 操作系统为用户提供两类接口:操作一级的接口和程序控制一级的接口。操作一级的接口包括操作控制命令、菜单命令等;程序控制一级的接口包括系统调用。 UMA和NUMA UMA,统一内存访问,Uniform Memory Access,…...
制作一个可以arm架构下运行的docker镜像(for Python)
看完本篇文章,你将得到一个可以arm架构下运行的python 基础镜像。 题外话 这里直接说docker镜像有点儿草率,因为目前很多容器都是Podman了。 podman的介绍 arm和aarch傻傻分不清楚 现在这两个是一样的意思了。 arm64和aarch64之间的区别 开始制作镜…...
Goland连接服务器/虚拟机远程编译开发
创建SSH连接 SSH用于与远程服务器建立连接 Settings -> Tools -> SSH Configurations 添加新的ssh连接,Host为ip地址,Username为用户名,认证方式这里选择密码验证 全部填完后可以点击Test Connection测试连接是否成功 创建Deployment…...
大数据Doris(十四):Doris表中的数据基本概念
文章目录 Doris表中的数据基本概念 一、Row & Column...
【Linux】Linux环境配置以及部署项目后端
🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于Linux的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一.Linux环境配置 1.JDK ①上传安装包到…...
RabbitMQ消费者的可靠性
目录 一、消费者确认 二、失败重试机制 2.1、失败处理策略 三、业务幂等性 3.1、唯一消息ID 3.2、业务判断 3.3、兜底方案 一、消费者确认 RabbitMQ提供了消费者确认机制(Consumer Acknowledgement)。即:当消费者处理消息结束后&#x…...
云计算助力史上首届“云上亚运”圆满成功!
201金,魔幻的BGM,以及崛起的中国科技,让杭州亚运会成功出圈。 很多网友表示太震撼了!开幕式很漂亮,杭州为了奥运造新城真豪横,看完一整个文化自信住! 赛场内外除了无数个令人感动的瞬间&#…...
博彦科技:以金融为起点,凭借创新技术平台真打实干
【科技明说 | 重磅专题】 成立于1995年的博彦科技,已有28年左右的发展历程。 我没有想到,博彦科技也对AIGC领域情有独钟。博彦科技自研的数字人产品SaaS平台,可以接入包括百度文心一言、阿里通义千问等AI大模型产品。可见&#…...
NLP实践——中文指代消解方案
NLP实践——中文指代消解方案 1. 参考项目2. 数据2.1 生成conll格式2.2 生成jsonline格式 3. 训练3.1 实例化模型3.2 读取数据3.3 评估方法3.4 训练方法 4. 推理5. 总结 1. 参考项目 关于指代消解任务,有很多开源的项目和工具可以借鉴,比如spacy的基础模…...
【Redis】认识Redis-特点特性应用场景对比MySQL重要文件及作用
文章目录 认识redisredis的主要特点redis的特性(优点)redis是单线程模型,为什么效率这么高,访问速度这么快redis应用场景redis不可以做什么MySQL和Redis对比启动RedisRedis客户端Redis重要文件及作用 认识redis redis里面相关的小…...
goland setup go env
go env -w设置的变量,在goland中不生效,需要额外配置。 点击goland->preference,在go module里,设置go环境变量即可。...
如何打造一支敏捷测试团队
文章目录 摘要01 从测试角度理解敏捷理念什么是敏捷?测试人员应该怎样理解敏捷理念?敏捷宣言对于测试活动的启发与思考总结如下。敏捷原则12条敏捷实践框架为什么要做敏捷 02 什么是敏捷测试03 敏捷测试为什么会失败04 诊断脑暴会的成果示例敏捷测试原则…...
STM32F40EZT6 PWM可控制电压原理
PWM可控制电压原理 主要通过PWM 输入模式根据控制单位时间内输出的平均电压,以调节电压大小。而PWM输出模式通过调节占空比,控制平均电压大小; 设置TIM为PWM输出模式 第一步:时钟使能: GPIO,TIM; 第二步&a…...
信号灯集,消息队列
信号灯集 1、概念 信号灯(semaphore),也叫信号量。它是不同进程间或一个给定进程内部不同线程间同步的机制;System V的信号灯是一个或者多个信号灯的一个集合。其中的每一个都是单独的计数信号灯。而Posix信号灯指的是单个计数信号灯。 通过信号灯集实现…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...
c# 局部函数 定义、功能与示例
C# 局部函数:定义、功能与示例 1. 定义与功能 局部函数(Local Function)是嵌套在另一个方法内部的私有方法,仅在包含它的方法内可见。 • 作用:封装仅用于当前方法的逻辑,避免污染类作用域,提升…...
从物理机到云原生:全面解析计算虚拟化技术的演进与应用
前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...
