K8S-使用SVC域名解决ip不固定导致consul服务注册脏数据异常问题

1 概述

各个模块注册nacos时,采用svc域名的方式,各模块间feign调用时使用的svc 域名来访问,这样就可以和ip解耦。

否则如果使用不固定IP,则可能在重启的时候,导致consul里面有一堆脏节点数据,影响服务调用。

2 SVC域名

2.1 简介

SVC域名在Kubernetes(K8s)中是一个重要的概念,用于标识Service的名称,通常是由一个或多个DNS标签组成的。以下是关于SVC域名的详细解释:

2.2 SVC域名的格式

SVC域名的格式通常为“service-name.namespace-name.svc.cluster.local”。

  • 其中,“service-name”是Service的名称,
  • “namespace-name”是Service所在的命名空间的名称,
  • “svc”是Kubernetes中预定义的DNS前缀,表示这是一个Service,
  • “cluster.local”则是集群的域名。

2.3 SVC域名的作用

  • 服务发现
    SVC域名可以将服务名称和Pod IP地址关联起来,使得其他Pod可以通过SVC域名来访问该服务。当一个Pod需要使用另一个服务时,它可以通过SVC域名来查找该服务的IP地址和端口号,从而建立与服务之间的通信。
  • 负载均衡
    当一个Pod需要访问多个实例的同一个服务时,SVC域名可以用于负载均衡。Kubernetes会根据Service的配置和策略,将请求分发到不同的Pod上,以实现负载均衡。
  • SVC域名的应用
    SVC域名在Kubernetes中的应用非常广泛,除了上述的服务发现和负载均衡外,还可以用于Ingress、ExternalName Service等场景。例如,通过Ingress和SVC域名的结合,可以实现外部流量到集群内部服务的路由和转发;而ExternalName Service则可以将集群内部的服务与外部服务进行关联,实现服务的透明化访问。

2.4 SVC域名的创建和管理

在Kubernetes中,SVC域名是通过创建Service资源来自动生成的。当创建一个Service时,Kubernetes会根据Service的元数据和配置信息,自动生成一个SVC域名,并将其与Service进行关联。

同时,Kubernetes还提供了DNS服务,用于解析SVC域名并返回对应的Pod IP地址和端口号。

2.5 总结

总之,SVC域名是Kubernetes中用于标识Service的重要概念,它通过将服务名称和Pod IP地址关联起来,实现了服务发现和负载均衡等功能,为Kubernetes集群的运维和管理提供了便利。

3 无状态服务

3.1 定义

在Kubernetes(K8s)中,无状态服务(Stateless Services)可以理解为一种不依赖于本地存储状态的服务。以下是关于K8s无状态服务的最通俗理解方式,遵循您要求的清晰格式:

无状态服务是指那些不保存任何有关请求或上下文的状态的服务。这意味着对于每一个请求,无状态服务都会以相同的方式处理,并且不依赖于任何先前的请求或状态。

3.2 特点

  • 无依赖
    无状态服务的任何一个实例都可以处理来自客户端的请求,而请求之间没有关联。
  • 水平扩展性
    无状态服务可以很容易地进行水平扩展,因为每个请求都是独立的,并且服务实例之间没有数据依赖。这意味着可以通过添加更多的副本来处理更多的请求流量。
  • 状态无关
    无状态服务不会在本地存储持久化数据。多个服务实例对于同一个用户请求的响应结果是完全一致的。
  • 可替换性
    无状态服务的实例可以随意启动和停止,而不会影响应用程序的状态或数据。

3.3 示例

无状态服务的典型示例包括:

  • Web服务器:如Nginx、Apache等,它们处理HTTP请求,但不保存任何关于特定用户的会话或状态信息。
  • API服务:提供RESTful API的服务,如各种微服务应用中的后端服务。
  • 负载均衡器:如HAProxy、Nginx作为负载均衡器使用时,它们将请求分发到后端服务器,但不保存关于请求的状态。

3.4 部署方式

在Kubernetes中,无状态服务通常使用Deployment进行部署。因为它们的实例可以随意启动和停止,所以使用Deployment可以很方便地管理这些服务实例的生命周期。

3.5 无状态服务的IP和域名变化

无状态服务的IP或域名在Kubernetes(K8s)中可以变化,但这种变化通常是由Kubernetes内部机制自动管理,而不是由用户直接修改。以下是关于无状态服务IP或域名变化的详细解释:

  • IP地址的变化:
    在Kubernetes中,每个Pod都有一个唯一的IP地址,这个IP地址是由Kubernetes网络插件自动分配的。当Pod被重新调度、重启或删除并重新创建时,它的IP地址可能会发生变化。

    对于无状态服务来说,由于它不依赖于特定的Pod IP地址,因此即使Pod IP地址发生变化,也不会影响服务的可用性和功能。服务消费者(如其他Pod)通常会通过Service来访问无状态服务,而不是直接通过Pod IP地址。

    Service在Kubernetes中负责暴露Pod的IP地址给其他服务进行访问。Service本身会有一个ClusterIP(集群内部IP),这个IP地址在Service的生命周期内是稳定的,即使Pod IP地址发生变化,ClusterIP也不会改变。

  • 域名的变化:
    在Kubernetes中,Service通常与DNS条目相关联,这使得其他Pod可以通过Service的名称(即域名)来访问它。这个域名在Service的生命周期内是稳定的,并且不会因为Pod IP地址的变化而变化。

    然而,在某些情况下(如Service的重新创建或修改),Service的域名可能会发生变化。这通常发生在用户手动修改了Service的元数据(如name字段)时。但在大多数情况下,用户不会直接修改Service的域名,而是依赖于Kubernetes的自动管理。

  • 总结:
    对于无状态服务来说,虽然Pod IP地址可能会发生变化,但由于Service的存在和Kubernetes的DNS机制,服务的稳定性和可用性并不会受到影响。服务消费者可以通过稳定的Service域名来访问无状态服务,而无需关心Pod IP地址的变化。

    如果需要修改无状态服务的访问方式(如更改端口、协议等),通常是通过修改Service的配置来实现的,而不是直接修改Pod IP地址或Service域名。这种修改可以通过kubectl命令或Kubernetes API来完成。

3.6 除了SVC以外其他实现无状态服务访问方式

除了SVC域名外,还有其他一些方式可以实现无状态服务的访问,但它们的稳定性和易用性可能不如SVC域名:

  • 直接访问Pod IP
    虽然可以直接通过Pod的IP地址来访问无状态服务,但这种方式并不推荐。因为Pod的IP地址可能会因为多种原因(如Pod重启、迁移等)而发生变化,导致服务不可用。
  • NodePort或LoadBalancer
    除了ClusterIP类型的Service外,Kubernetes还支持NodePort和LoadBalancer类型的Service。这些类型的Service会将服务暴露到集群外部,但它们的稳定性和易用性也取决于外部网络环境和负载均衡器的配置。
  • NodePort
    通过在每个节点上打开一个特定的端口来暴露服务,但这种方式可能会受到节点数量和端口数量的限制。
  • LoadBalancer
    依赖于云提供商提供的负载均衡器来暴露服务,这种方式可以提供更高的可用性和可扩展性,但通常需要额外的配置和管理成本。
  • 自定义DNS解析
    可以在Kubernetes集群外部设置自定义的DNS服务器,将服务名称解析到对应的ClusterIP或NodePort。但这种方式需要额外的DNS服务器和配置管理,可能会增加复杂性和维护成本。
  • 归纳
    在Kubernetes中,无状态服务的IP或域名变化通常不会影响使用,但推荐使用SVC域名来实现服务发现和访问。SVC域名提供了稳定性、服务发现和负载均衡等特性,使得无状态服务的访问变得更加简单和可靠。虽然还有其他一些实现方式,但它们的稳定性和易用性可能不如SVC域名。

3.7 总结

K8s无状态服务是一种不依赖于本地存储状态的服务,具有无依赖、水平扩展性、状态无关和可替换性等特点。它们通常使用Deployment进行部署,并且适用于不需要数据持久化的场景,如Web服务器、API服务和负载均衡器等。

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

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

相关文章

不同表格式下的小文件治理方式(开源RC file/ORC/Text非事务表、事务表、Holodesk表格式..)

友情链接: 小文件治理系列之为什么会出现小文件问题,小文件过多问题的危害以及不同阶段下的小文件治理最佳解决手段 小文件过多的解决方法(不同阶段下的治理手段,SQL端、存储端以及计算端) 概览 在前两篇博文中&am…

自学鸿蒙HarmonyOS的ArkTS语言<一>基本语法

一、一个ArkTs的目录结构 二、一个页面的结构 A、装饰器 Entry 装饰器 : 标记组件为入口组件,一个页面由多个自定义组件组成,但是只能有一个组件被标记 Component : 自定义组件, 仅能装饰struct关键字声明的数据结构 State:组件中的状态变量…

【JVM】触发 Full GC 的条件

在Java虚拟机(JVM)中,垃圾收集(Garbage Collection,简称GC)是管理内存的关键机制。Full GC(也称为Major GC或老年代GC)是一种较为耗时的垃圾收集过程,会对整个堆&#xf…

SpirngMVC面试题

说一下 SpringMVC 支持的转发和重定向的写法(必会) 1)转发: forward 方式:在返回值前面加"forward:",比如"”"forward:user.do?namemethod4" 2) 重定向: redirect 方式:在返回值前面加 redirect:, 比如"redi…

服务器雪崩的应对策略之----熔断机制

熔断机制(Circuit Breaker)是一种保护系统稳定性的重要手段。它的主要目的是防止系统在依赖的服务出现问题时,继续发送请求,从而保护系统免受进一步的影响。熔断机制通过监控请求的成功和失败率,在检测到故障率超过预设…

python全栈开发《10.数据类型之初识列表类型》

1.什么是列表 其实在生活中,有很多种排队的现象。比如看电影要排队买票,上地铁的时候要排队安检。在生活中,排队的是人,为了统一做一件事,而排成队伍,逐个的去等待执行这个任务,每个人都是执行这…

平衡查找树(数据结构篇)

数据结构之平衡查找树 平衡查找树(AVL树) 概念: 为了防止因为插入删除而导致的树结构不平衡(通常我们删除节点总是对右子树的最小值节点替代操作,而不是交替的利用左子树的最大值节点替代,这就将导致左子树的平均深度大于右子树平均深度&a…

基于Java的高校校园点餐系统

开头语: 你好,我是计算机专业的学长,如果你对高校校园点餐系统感兴趣或有相关开发需求,欢迎联系我。 开发语言:Java 数据库:MySQL 技术:JSP技术 工具:Eclipse、Tomcat 系统展示…

分布式用例执行

前言 这两天趁着有时间,我疯狂的码字了~~ 背景 我们公司是做人工智能平台的,什么是人工智能呢? 大数据 机器学习。大数据运行的基本就不快。机器学习算法运行起来也是慢的让人泪流满面。在我们的集群配置下,我使用一个 5M 的数…

基于IDEA的Maven(properties属性配置)

&#xff08;property &#xff1a;财产&#xff09;properties&#xff1a;它的复数。 同样也是基于上篇博客进行学习。&#xff08;具体的全部项目代码和结构可以去查看上篇...&#xff09; <properties><!--当前jdk版本 , 这一步可以完全省略--><maven.com…

【技巧】Leetcode 137. 只出现一次的数字 II【中等】

只出现一次的数字 II 给你一个整数数组 nums &#xff0c;除某个元素仅出现 一次 外&#xff0c;其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。 示例 1&#xff1a; 输入&…

2024青海三支一扶招1910人7月6日笔试

&#x1f4e2;2024年青海省三支一扶计划招募1910人公告已发布&#xff01; 小&#x1f004;️帮大家整理好了考试关键时间点&#xff1a; ★ 报名时间&#xff1a;6月20日至6月25日 ★ 报名网站&#xff1a;青海省人事考试信息网&#xff08;www.qhpta.com&#xff09; ★ 网上…

android studio构建项目报错Could not create an instance of type com.android.build.api.variant.impl.Applicat

Could not create an instance of type com.android.build.api.variant.impl.ApplicationVariantImpl 这个错误通常是由于Gradle插件版本不兼容导致的。你可能正在使用的Gradle插件版本与你的Android Studio版本不兼容。 要解决这个问题&#xff0c;你可以尝试以下解决方法&a…

音视频入门基础:H.264专题(3)——EBSP, RBSP和SODB

音视频入门基础&#xff1a;H.264专题系列文章&#xff1a; 音视频入门基础&#xff1a;H.264专题&#xff08;1&#xff09;——H.264官方文档下载 音视频入门基础&#xff1a;H.264专题&#xff08;2&#xff09;——使用FFmpeg命令生成H.264裸流文件 音视频入门基础&…

行为树行为树行为树

行为树由一个个节点组成 结构&#xff1a;树状结构运行流程&#xff1a;从根节点开始自顶向下往下遍历&#xff0c;每经过一个节点就执行节点对应的功能。 我们规定&#xff0c;每个节点都提供自己的excute函数&#xff0c;返还执行失败/成功结果。 然后根据不同节点的执行结…

C++ Primer 学习 -- Day 2

第 3 章知识点总结 3.1 .1 命名空间的using 声明提醒 3.2.1 定义和初始化 string 对象直接初始化和拷贝初始化 3.2.2 string 对象上的操作提醒比较 string 对象( vector 也一样 )字面值和 string 对象相加提醒 3.2.3处理 string 对象中的字符建议处理每个字符&#xff1f;使用基…

国产数据库中读写分离实现机制

在数据库高可用架构下会存在1主多备的部署&#xff0c;备节点可以根据业务场景分发一部分流量以充分利用资源&#xff0c;并减轻主库的压力&#xff0c;因此在数据库的功能上需要读写分离来实现。 充分利用备节点的资源&#xff0c;提升业务的吞吐量&#xff1b;防止运维等非业…

《算法设计与分析》第五六章:回溯法与分支限界法

文章目录 回溯法分支限界法一、本章作业1.活动安排问题2.旅行商问题3.单源最短路径4.任务分配问题 二、算法积累1.回溯法求解01背包问题2.回溯法求解最大团问题3.回溯法求解n皇后问题4.回溯法求解地图着色5.回溯法求解哈密尔顿图6.回溯法求活动安排7.分支限界法求01背包问题8.分…

Flutter第十三弹 路由和导航

目标&#xff1a; 1.Flutter怎么创建路由&#xff1f; 2.怎么实现路由跳转&#xff1f;页面返回&#xff1f; 一、路由 1.1 什么是路由&#xff1f; 路由(Route)在移动开发中通常指页面&#xff08;Page&#xff09;&#xff0c;在Android中通常指一个Activity。所谓路由管…

小功率电机驱动方案中如何选择驱动IC

小功率电机驱动方案及驱动IC的选择 电机驱动作为工业4.0中工厂自动化整个闭环中的执行器环节&#xff0c;其性能好坏直接影响到整个闭环的性能。因此&#xff0c;工业4.0对电机驱动提出了更高的性能和功能要求&#xff0c;例如更快的响应速度、更高的带宽、更高精度的位置和速…