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

 

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

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

相关文章

二氧化铈纳米棒 Cerium Oxide Nanorods 氧化铈纳米棒

二氧化铈纳米棒 (西)产品名称:二氧化铈纳米棒 (安)英文名称:Cerium Oxide Nanorods (瑞)成分:氧化铈纳米棒、乙醇 (禧)浓度:0.1mg…

仿东郊到家按摩小程序app开发搭建

最新版的仿东郊到家按摩小程序,支持上门服务系统,全开源,并且支持公众号、小程序和app。前端使用uniapp,后端使用php,价格合理。用户端功能模块包括技师选择、预约服务、优惠券、订单等,还有意见功能和城市…

Spring Security 6.1.x 系列(4)—— 基于过滤器链的源码分析

一、自动配置 在 Spring Security 6.1.x 系列(1)—— 初识Spring Security 中我们只引入spring-boot-starter-security 依赖,就可以实现登录认证,这些都得益于Spring Boot 的自动配置。 在spring-boot-autoconfigure模块中集成了…

LSF 守护程序和进程、集群通信路径和安全模型

LSF 细观 了解在 LSF 主机上运行的各种守护进程,LSF 集群通信路径,以及 LSF 如何容许集群中的主机故障。 1、LSF 守护程序和进程 集群中的每个主机上都运行多个 LSF 进程。 正在运行的进程的类型和数量,取决于主机是主节点还是计算节点。 主…

吴恩达《机器学习》2-2->2-4:代价函数

一、代价函数的概念 代价函数是在监督学习中用于评估模型的性能和帮助选择最佳模型参数的重要工具。它表示了模型的预测输出与实际目标值之间的差距,即建模误差。代价函数的目标是找到使建模误差最小化的模型参数。 二、代价函数的理解 训练集数据:假设我…

【ELFK】之Filebeat

一、Filebeat介绍 1、Filebeat是什么? Filebeat适用于转发和集中数据的轻量级传送工具,Filebeat监视了指定的日志文件或位置,收集日志事件,并将他们转发到Elasticsearch或Logstash进行索引。 **Filebeat的工作方式:*…

【ETL工具】Datax-ETL-SqlServerToHDFS

🦄 个人主页——🎐个人主页 🎐✨🍁 🪁🍁🪁🍁🪁🍁🪁🍁 感谢点赞和关注 ,每天进步一点点!加油!&…

iPhone连不上Wi-Fi?看完这篇文章你就知道了!

大家在使用苹果手机的过程中有没有遇到过这样的情况:手机突然连接不上Wi-Fi,或者连接了也根本使用不了。遇到上述情况请不要着急,iphone连不上wifi是由很多种原因导致的。那么,iPhone连接不上Wi-Fi时该怎么办呢? 我们…

css写个三角形

点击三角形&#xff0c;展开或者收起内容 <template><div><div class"zhankai" click"btn()">展开 <span :class"{sanjiao:true,rotate:flag}"></span></div><!-- 展示或者收起 --><el-collapse-…

基于YOLOv8模型暗夜下人脸目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOv8模型暗夜下人脸目标检测系统可用于日常生活中检测与定位黑夜下人脸目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的目标检测&#xff0c;另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算法…

大数据之路-日志采集

数据采集作为大数据体系中的第一环节&#xff0c;对如何全面、高性能、规范完成海量数据的采集&#xff0c;并将其传输到大数据平台。 1.浏览器的页面日志采集 1.1 页面浏览日志采集流程 页面浏览日志是最基础的互联网日志&#xff0c;其中页面浏览量&#xff08;PageView&am…

redis6.0源码分析:跳表skiplist

文章目录 前言什么是跳表跳表&#xff08;redis实现&#xff09;的空间复杂度相关定义 跳表&#xff08;redis实现&#xff09;相关操作创建跳表插入节点查找节点删除节点 前言 太长不看版 跳跃表是有序集合zset的底层实现之一&#xff0c; 除此之外它在 Redis 中没有其他应用。…

深度学习入门(二)之神经网络

文章目录 从感知机到神经网络神经网络的例子复习感知机激活函数 激活函数sigmoid函数阶跃函数的实现阶跃函数的图形sigmoid函数的图形sigmoid函数与阶跃函数比较非线性函数ReLU函数 多维数组的运算多维数组矩阵乘法神经网络的内积 三层神经网络的实现符号确认各层间信号传递的实…

10kb的WordPress外链页面安全跳转插件

老白博客我参照csdn和腾讯云的外链跳转页面&#xff0c;写了一个WordPress外链安全跳转插件&#xff1a;给网站所有第三方链接添加nofollow标签和重定向功能&#xff0c;提高网站安全性。插件包括两个样式&#xff0c;由于涉及到的css不太一样&#xff0c;所以分别写了两个版本…

高效处理异常值的算法:One-class SVM模型的自动化方案

一、引言 数据清洗和异常值处理在数据分析和机器学习任务中扮演着关键的角色。清洗数据可以提高数据质量&#xff0c;消除噪声和错误&#xff0c;从而确保后续分析和建模的准确性和可靠性。而异常值则可能对数据分析结果产生严重影响&#xff0c;导致误导性的结论和决策。因此&…

纪念基于JavaScript 实现的后台桌面 UI 设计

目录 前言 C/S 到 B/S ASP Builder 的诞生 关于 Craneoffice.net 开发环境配置 后台界面的 UI 区域要素 桌面系统的想法和设计 搜索引擎 导航面板 快捷访问 二级导航 小组件及其它 设置桌面壁纸 小时钟 附件小程序 计算器界面设计 日历与任务 系统设置 天气小…

【HeidiSql_01】python在heidisql当中创建新表的注意事项

python在heidisql当中创建新表的注意事项 假设你已经在python当中弄好了所有的结果&#xff0c;并且保存在df_all这个dataframe当中&#xff0c;然后要将其导入数据库当中并创建一张新的表进行保存。 # 构建数据库连接,将merged_df写回数据库 from sqlalchemy import create_e…

进口跨境商城源码:高效、安全、可扩展的电商平台解决方案

电子商务的兴起为跨境贸易提供了前所未有的机会和挑战。在这个全球化的时代&#xff0c;跨境电商平台成为许多企业进军国际市场的首选。然而&#xff0c;搭建一个高效、安全、可扩展的进口跨境商城并非易事。 1. 解决方案概述 我们推出的 "进口跨境商城源码" 提供了一…

小程序商城免费搭建之java商城 电子商务Spring Cloud+Spring Boot+二次开发+mybatis+MQ+VR全景+b2b2c

1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…

uniapp @click点击事件在新版chrome浏览器点击没反应

问题描述 做项目时&#xff0c;有一个弹出选择的组件&#xff0c;怎么点都不出来&#xff0c;最开始还以为是业务逻辑限制了不能点击。后来才发现别人的电脑可以点出来&#xff0c;老版本的浏览器也可以点出来&#xff0c;最后定位到是新版的chrome就不行了 这是我的浏览器版本…