Kubernetes无头服务:从DNS解析到跨集群访问的实战指南

k8s跨集群通讯项目-Submariner 伴随着k8s的大量使用,无论是基于应用隔离或者高可用,容灾的需要还是运维管理的需求,很多企业都会部署多个K8S集群。 这就会导致有些应用依赖于其它k8s集群的微服务,需要从一个集群里的pod访问另外一个集群里的pod或者service。 为了解决跨集群服务调用的问题,市场上出现了很多开源项目来解决这个问题。有机遇CNI的,有与CNI无关的机遇集群间vpn的,有基于service mesh的。本文重点介绍一个在集群间建立vpn的开源方案Submariner。 Submariner 支持Pod 和服务在不同 K 阅读详情

1. 无头服务到底是什么?为什么有状态应用离不开它?

大家好,我是老K,在容器和云原生这块摸爬滚打十来年了。今天咱们不聊那些虚的,直接上干货,聊聊Kubernetes里一个听起来有点“吓人”,但用起来真香的东西——无头服务(Headless Service)。

很多刚接触K8s的朋友,一听到“无头”就觉得是不是功能不全或者有啥问题。其实恰恰相反,它解决的是普通服务解决不了的痛点。你可以把它想象成一个“通讯录”或者“电话黄页”。普通服务(ClusterIP类型)就像一个公司的总机,你打电话过去,总机接线员(负载均衡器)帮你转接到某个分机(Pod)。而无头服务呢,它直接把公司所有员工的姓名和分机号(Pod IP)都打印成一张列表给你,你想找谁,自己直接拨号就行。

这个特性,对于有状态应用来说简直是救命稻草。我最早是在部署Elasticsearch集群时被它“教育”的。你想啊,ES集群里的节点,每个都有自己独特的身份和数据,节点之间需要直接、稳定地互相通信,来同步数据、选举主节点。如果走普通服务的负载均衡,这次请求打到A节点,下次打到B节点,那集群的状态管理和数据一致性就全乱套了。无头服务就是为这种场景而生的,它为每个Pod提供了一个稳定的DNS域名,让集群内的成员能精准地找到彼此。

所以,无头服务的核心就两点:第一,没有ClusterIP,不负责流量转发;第二,DNS查询直接返回后端所有Pod的IP地址列表。它不干“接线员”的活,只提供“通讯录”服务。当你为一个StatefulSet(比如叫es-data)配套创建一个同名的无头服务后,每个Pod就会拥有一个像es-data-0.es-data.default.svc.cluster.local这样固定的网络标识,即使Pod重启、IP变更,这个域名依然指向它,这对于需要持久化身份的应用至关重要。

2. 深入骨髓:无头服务的DNS解析机制全揭秘

理解了无头服务是“通讯录”,那这本“通讯录”具体怎么用,里头的名字(DNS记录)又是怎么编排的,这就是门学问了。这部分如果搞不清楚,后面排错会非常痛苦。我踩过的坑告诉我,必须把DNS解析这点事掰开揉碎了讲明白。

2.1 服务级解析:拿到整本通讯录

当你通过无头服务的标准DNS名称(比如nginx-headless.test.svc.cluster.local)进行查询时,Kubernetes内置的CoreDNS(或其他DNS插件)不会像对待普通服务那样返回一个单一的ClusterIP。相反,它会返回与该服务选择器(Selector)匹配的所有健康的、就绪的Pod IP地址列表。

这个列表是以DNS A记录(或AAAA记录,对应IPv6)的形式返回的。你可以用nslookup或者dig命令在集群内的Pod里验证。比如,假设你的无头服务后面有3个Pod,IP分别是10.1.1.10, 10.1.1.11, 10.1.1.12。那么查询服务域名返回的就是这三个IP。客户端应用(比如你的Java连接池、Golang服务发现客户端)拿到这个列表后,就可以自己实现负载均衡策略,比如轮询、一致性哈希等。很多分布式系统的客户端SDK,像Kafka、Cassandra的驱动,都内置了这种基于主机列表的服务发现能力。

这里有个关键细节:DNS查询结果默认是不保证顺序的,并且有缓存。这意味着你的应用第一次解析拿到的是[IP1, IP2, IP3],下次可能变成[IP3, IP1, IP2]。如果你的客户端逻辑对顺序敏感,就需要在代码里做排序或者不依赖顺序。另外,由于DNS缓存的存在,Pod缩容或被驱逐后,它的IP可能还会在客户端的DNS缓存里停留一段时间(遵循记录的TTL),导致连接失败。所以,对于要求高可用的应用,最好实现更智能的健康检查和服务发现,而不是完全依赖DNS。

2.2 Pod级解析:精准呼叫张三李四

这是无头服务更强大的一个特性,也是StatefulSet的好搭档。Kubernetes会为每个Pod分配一个稳定的、可预测的DNS域名,格式是: <pod-name>.<service-name>.<namespace>.svc.cluster.local

其中<pod-name>是由StatefulSet控制器按序分配的,例如web-0, web-1, web-2。这个域名会直接解析到该Pod的IP地址。这就为有状态应用提供了稳定的网络标识。举个例子,在一个Redis Sentinel集群里,你可以配置redis-node-0.redis-headless.default.svc.cluster.local作为主节点,redis-node-1和redis-node-2作为从节点。无论这些Pod被调度到哪个节点,无论它们的IP如何变化,这个域名始终指向正确的Pod。

我经常用这个特性来初始化集群。比如部署一个三节点的ZooKeeper集群,在Pod的启动命令里,就可以通过zkServer-1.zk-headless.default.svc.cluster.local:2888:3888这样的域名来配置集群成员列表,完全不用担心IP变化的问题。要验证这个解析,你可以在集群内任意Pod执行:

nslookup web-0.nginx-headless.test.svc.cluster.local

如果一切正常,你会看到返回的正是web-0这个Pod的IP地址。

3. 手把手实战:从零创建并验证一个无头服务

光说不练假把式,咱们现在就来真刀真枪地部署一个无头服务,并把它背后的DNS解析过程看得明明白白。我会用一个简单的Nginx Deployment来演示,道理和Elasticsearch、Kafka这些复杂应用是一样的。

3.1 编写并部署YAML清单

首先,我们创建一个Deployment,它管理两个带有特定标签的Nginx Pod。注意看标签app: nginx-headless,这是后续服务选择Pod的关键。

# deployment-nginx-headless.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-headless
  namespace: test
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx-headless
  template:
    metadata:
      labels:
        app: nginx-headless
    spec:
      containers:
      - name: nginx
        image: nginx:alpine
        ports:
        - containerPort: 80

接着,创建核心的无头服务。最关键的一行就是clusterIP: None,这宣告了它的“无头”身份。

# service-headless.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx-headless
  namespace: test
spec:
  clusterIP: None # 这就是定义无头服务的魔法字段
  selector:
    app: nginx-headless # 必须和Deployment中Pod的标签匹配
  ports:
  - port: 80
    targetPort: 80

执行部署:

kubectl create namespace test
kubectl apply -f deployment-nginx-headless.yaml
kubectl apply -f service-headless.yaml

等Pod跑起来后,我们可以查看一下它们的IP和详细信息:

kubectl get pods -n test -l app=nginx-headless -o wide

假设输出如下,记住这两个IP(你的实际IP会不同):

NAME                               READY   STATUS    IP            NODE
nginx-headless-7cbbf6b9f8-abcde   1/1     Running   10.244.1.10   node-1
nginx-headless-7cbbf6b9f8-fghij   1/1     Running   10.244.2.20   node-2

3.2 在集群内进行DNS解析测试

现在,我们进入一个“工具人”Pod(比如临时启动一个busybox),来验证无头服务的DNS解析。

测试1:服务级解析(获取通讯录)

kubectl run -it --rm dns-test --image=busybox:1.28 --restart=Never -n test -- nslookup nginx-headless.test.svc.cluster.local

你期望看到的输出,应该是一个包含上面两个Pod IP(10.244.1.10和10.244.2.20)的地址列表。这证明无头服务正确地将所有匹配的Pod IP注册到了DNS。

测试2:Pod级解析(精准找人) 首先,我们需要知道Pod的具体名称。然后查询它的专属域名:

# 先获取Pod全名
kubectl get pods -n test -l app=nginx-headless

# 假设一个Pod叫 nginx-headless-7cbbf6b9f8-abcde
kubectl run -it --rm dns-test2 --image=busybox:1.28 --restart=Never -n test -- nslookup nginx-headless-7cbbf6b9f8-abcde.nginx-headless.test.svc.cluster.local

这次输出应该只返回一个IP地址,即10.244.1.10。这个稳定的域名对于有状态应用进行互相发现和通信至关重要。

4. 进阶挑战:跨集群访问无头服务实战

单集群内的无头服务用熟了,更刺激的来了:我们的应用(比如一个庞大的Elasticsearch数据集群)需要跨多个Kubernetes集群部署,不同集群的Pod需要像在同一个集群内那样直接通信。这听起来像是科幻片,但借助服务网格(Service Mesh) 或更专门的多集群服务发现项目,比如基于Submariner的ServiceExport/ServiceImport机制,是可以实现的。这里我以Submariner这个流行的方案为例,带你走通这个流程。

4.1 跨集群通信的核心思想与准备

跨集群访问的核心思想是“服务导出与导入”。我们把集群A里的无头服务“发布”出去(ServiceExport),然后在集群B里“订阅”这个服务(ServiceImport)。Submariner会在底层建立安全的隧道网络,让两个集群的Pod网络在逻辑上连通。

在开始之前,你需要:

  1. 已经安装并配置好Submariner,确保两个集群(我们叫它们cluster-a和cluster-b)之间建立了连接。这通常涉及在每一个集群上部署Submariner的相关组件(submariner-operator, gateway等)。
  2. 确保cluster-a中我们已经创建了之前提到的nginx-headless无头服务。

4.2 导出服务:让隔壁集群知道我的存在

在cluster-a(服务提供方集群)中,我们使用Submariner提供的subctl命令行工具,将nginx-headless服务导出。

# 在cluster-a的master节点上执行
subctl export service --namespace test nginx-headless

这个命令会创建一个ServiceExport资源。你可以检查一下:

kubectl get serviceexport -n test

看到nginx-headless这个资源,状态为True,就说明导出成功了。ServiceExport本身并不复杂,它就像一个声明:“我这儿有个服务,名字叫nginx-headless,在test命名空间里,其他集群可以来用。”

4.3 导入服务:发现并连接远方的伙伴

现在切换到cluster-b(服务消费方集群)。服务不会自动出现,我们需要确认cluster-a导出的服务已经被发现。Submariner的broker组件会同步这个信息。在cluster-b检查ServiceImport:

kubectl get serviceimport -A

你应该能看到一个来自cluster-a的ServiceImport,名字可能类似nginx-headless-test-cluster-a。这表示cluster-b已经感知到了那个无头服务。

4.4 跨集群DNS解析与访问测试

跨集群访问的DNS域名格式和单集群内有所不同。Submariner使用了一个特殊的域名后缀:svc.clusterset.local。有两种查询方式:

方式一:使用集群ID查询 每个通过Submariner连接的集群都有一个唯一的集群ID(安装时设定,假设cluster-a的ID是pve3)。

# 在cluster-b的某个Pod内执行(例如用busybox)
nslookup nginx-headless.test.svc.clusterset.local
# 或者更明确地指定集群
nslookup pve3.nginx-headless.test.svc.clusterset.local

这两种查询都应该返回cluster-a中那两个Nginx Pod的IP地址(10.244.1.10和10.244.2.20)。注意,这里返回的IP是cluster-a集群内的Pod IP,但由于Submariner建立了网络隧道,从cluster-b的Pod是可以直接ping通或curl这些IP的。

方式二:解析特定的跨集群Pod 如果你需要直接访问cluster-a中的某个特定Pod,可以使用包含集群ID的完整Pod域名:

nslookup nginx-headless-7cbbf6b9f8-abcde.pve3.nginx-headless.test.svc.clusterset.local

这个查询会精确地返回cluster-a中那个Pod的IP。

最终访问测试: 在cluster-b的一个Pod里,尝试直接curl跨集群的无头服务IP:

# 假设我们在cluster-b的某个Pod的shell中
curl http://10.244.1.10 # 这是cluster-a的Pod IP

如果网络隧道一切正常,你将收到来自cluster-a那个Nginx Pod返回的默认页面。这就实现了跨集群的Pod到Pod直接通信。

5. 避坑指南:无头服务常见问题与排查思路

玩转无头服务,尤其是跨集群场景,不可能一帆风顺。我把这些年遇到的典型问题和排查套路分享给你,能帮你节省大量熬夜时间。

问题一:DNS解析无头服务返回NXDOMAIN(记录不存在)

  • 可能原因1:标签选择器不匹配。这是最常见的原因。请用kubectl describe service <service-name> -n <namespace>仔细检查服务的Selector字段,再用kubectl get pods -n <namespace> --show-labels确认Pod的标签是否完全一致。一个拼写错误或大小写问题就会导致匹配失败。
  • 可能原因2:Pod未就绪。Kubernetes默认只将状态为Ready的Pod列入Endpoints。检查Pod的kubectl get pods输出,确保状态是Running且READY列为1/1或类似。查看Pod的readinessProbe配置是否过于严格导致一直未就绪。
  • 可能原因3:CoreDNS有问题。在集群内Pod执行nslookup kubernetes.default.svc.cluster.local,测试CoreDNS基础功能。如果失败,检查CoreDNS Pod是否运行正常,kubectl get pods -n kube-system -l k8s-app=kube-dns。

问题二:DNS解析返回空答案(No answer)或只有部分Pod IP

  • 可能原因1:Pod正在终止或启动中。DNS列表是动态的。当一个Pod被删除或新建时,会有短暂的时间窗口Endpoints列表不完整。这是正常现象,观察几秒后重试。
  • 可能原因2:Headless Service与StatefulSet配合时的坑。对于StatefulSet,确保无头服务的名字和StatefulSet的serviceName字段一致。并且,只有Pod进入Running和Ready状态后,其DNS记录才会被创建。
  • 排查工具:直接查看Service对应的Endpoints资源,这是最权威的IP列表来源。kubectl get endpoints <service-name> -n <namespace>。Endpoints里的地址应该和你的Pod IP一致。

问题三:跨集群访问不通,能解析但无法连接

  • 可能原因1:Submariner隧道未建立或中断。分别在两个集群执行subctl show networks和subctl show connections,检查隧道状态是否为connected。检查gateway Pod日志是否有错误。
  • 可能原因2:网络策略(NetworkPolicy)阻拦。跨集群流量依然受源集群或目的集群的NetworkPolicy控制。确保你的NetworkPolicy允许来自对方集群CIDR的流量,或者允许所有流量(仅测试时)。可以用kubectl get networkpolicy -A检查。
  • 可能原因3:防火墙或安全组规则。如果集群部署在公有云上,确保节点安全组允许UDP端口(默认是4800,用于Submariner的UDP封装)和IPsec所需端口(如果启用)的互通。
  • 排查步骤:
    1. 先通内:在cluster-a内部,从一个无关Pod curl 目标Pod IP,确保服务本身是可达的。
    2. 再跨集群:在cluster-b的Pod里,先ping一下cluster-a的Pod IP,看网络层通不通。如果不通,绝对是隧道或网络策略问题。
    3. 抓包定位:如果ping通但curl不通,可以在目标Pod所在节点或Pod内用tcpdump抓包,看TCP SYN包是否到达,以及是否有回包。这能帮你判断问题是出在路由、防火墙还是应用层。

问题四:客户端应用如何处理DNS列表变化 这是开发层面需要注意的。如果你的客户端应用只是启动时解析一次DNS并缓存IP列表,那么当Pod扩缩容时,客户端将无法感知新节点或移除故障节点。解决方案是:

  • 使用支持动态更新的客户端库,如大多数现代服务发现客户端。
  • 实现定时的DNS重新解析,并设置合理的TTL。
  • 结合使用Kubernetes的Endpoints API,直接Watch Endpoints的变化,这是最实时的方式,但实现复杂度较高。

无头服务,尤其是结合跨集群技术,确实把Kubernetes的服务发现能力提升到了一个新的维度。它要求我们对网络、DNS有更深的理解。但一旦掌握,你就能设计出更灵活、更健壮的分布式系统架构。记住,多动手测试,从最基础的DNS解析查起,逐步推进,复杂的网络问题也能被层层分解、最终解决。

Kubernetes多集群管理与跨集群通信实战 最近公司要做多活容灾,需要在两个机房部署K8s集群。听起来不难,但真正做起来才发现坑太多:集群之间怎么通信?服务怎么跨集群调用?配置怎么同步?折腾了两周,总算跑通了。这篇文章记录下完整的实现过程,包括踩过的坑和解决方案。多集群不是银弹,小团队不要盲目跟风。但如果你有容灾需求、地域性能要求、或者成本优化需求,可以考虑。关键是把网络搞定,其他问题都好解决。可以试试开源SD-WAN方案,或者用星空组网这类商业产品(测试环境可以先用免费版探探路)。代码和配置都放在GitHub了,有问题可以留言讨论。 阅读详情

相关推荐

龙芯3A5000开发板PMON升级UEFI固件实战指南

固件是计算机硬件与操作系统之间的关键桥梁,负责初始化硬件并引导系统启动。其工作原理是在上电后执行自检、加载引导程序,最终将控制权移交操作系统。在国产化平台中,采用标准化的UEFI固件具有重要技术价值,它能提供图形化配置界面、统一硬件驱动模型,并支持安全启动等现代特性,从而显著提升硬件兼容性与系统管理效率。这一技术广泛应用于PC、服务器及嵌入式设备,尤其在需要运行银河麒麟等主流操作系统的龙芯开发板场景中,将传统PMON固件升级至UEFI,能实现更流畅的系统安装与更稳定的运行体验。本文基于固件升级与UEFI引导

weixin_42664597的博客 563

四十三、openlayers进阶实战——动态航线与飞机姿态同步控制的实现技巧

本文深入探讨了在OpenLayers中实现动态航线与飞机姿态同步控制的核心技巧。通过解析航线曲率计算、飞机图标姿态绑定、核心动画引擎构建以及处理跨子午线显示难题,提供了从基础到进阶的完整解决方案,并分享了性能优化与常见问题排查的实战经验,帮助开发者打造流畅、真实的飞行轨迹可视化效果。

dropout6artist的博客 102

苹果开发者账号( Apple Developer)登录出现:你的 Apple ID 暂时不符合使用此应用程序的条件(您的apple账户不符合资格)

Apple开发对于新手来说确实可能会遇到各种问题,在遇到 Apple Developer 账号登录问题时,除了检查账号的安全性设置和协议确认外,还需要考虑账号的具体配置问题,比如主邮箱的设置。

Winter_Sun灬的博客 4134

Kubernetes无头服务(Headless Service)实战:从DNS解析到跨集群访问

本文深入解析Kubernetes无头服务(Headless Service)的核心机制与实战应用。通过对比普通Service,阐明其无ClusterIP、DNS直接返回Pod IP列表的特性,适用于点对点直连、客户端负载均衡及有状态应用场景。详细剖析了服务级与Pod级DNS解析原理,并演示了如何与StatefulSet黄金搭档部署ZooKeeper等有状态集群。最后,探讨了利用Submariner等工具实现无头服务跨集群访问的进阶方案。

tree的博客 195

银河麒麟服务器操作系统V10SP3 U盘安装中“基础软件仓库错误”的排查与修复指南

本文针对在无网络环境下使用U盘安装银河麒麟服务器操作系统V10SP3时,遇到的“基础软件仓库错误”问题,提供了详细的排查与修复指南。核心解决方案是通过进入救援模式,使用lsblk命令确定U盘实际设备路径,并在系统引导时手动添加inst.repo内核参数来指定安装源,从而绕过安装程序的自动探测故障,确保安装流程顺利进行。

ik67890123的博客 1196

315、弱电基础知识介绍

常见的弱电系统包括:闭路电视监控系统、防盗报警系统、门禁系统、电子巡更系统、停车场管理系统、可视对讲系统、家庭智能化系统及安防系统、背景音乐系 统、LED显示系统、等离子拼接屏系统、DLP大屏系统、三表抄送系统、楼宇自控系统、防雷与接地系统、寻呼对讲及专业对讲系统、弱电管道系统、UPS不 间断电源系统、机房系统、综合布线系统、计算机局域网系统、物业管理系统、多功能会议室系统、有线电视系统、卫星电视系统、卫星通讯系统、消防系统、电话 通讯系统、酒店管理系统、视频点播系统、人力资源管理系统等等。

qq_43416206的博客 1366

K8s 跨集群通信的“量子纠缠”:当 DNS 黑洞吞没你的服务请求

明明服务就在那里,跨集群访问却总是‘查无此人’?

2201_75340297的博客 1579

【系统分析师】核心考点:100个高频知识点汇总

本文系统梳理了系统分析师考试的11大领域高频考点,重点解析了计算机硬件与体系结构的7个核心知识点:计算机五大部件(CPU/存储器/总线等)、校验码类型(奇偶/海明/CRC)、CISC与RISC指令系统对比、总线分类与特性、RAID磁盘阵列级别、流水线技术原理及Flynn系统分类法。内容涵盖硬件组成、数据校验、指令架构、存储技术等关键概念,通过表格对比和公式说明,为考生提供结构化的知识框架与备考重点。

数据知道的博客 5569

KubeSphere跨集群服务发现终极指南:Headless Service与DNS配置详解

KubeSphere作为专为Kubernetes多云、数据中心和边缘管理打造的容器平台,提供了强大的跨集群服务发现能力。本文将详细介绍如何通过Headless Service与DNS配置实现KubeSphere集群间服务的高效发现与通信,帮助新手用户快速掌握这一核心技能。 ## 什么是Headless Service? 在Kubernetes中,Service通常用于为Pod提供稳定的网络访问

gitblog_00586的博客 1033

华为OD机试真题 新系统2026-04-01 C++ 实现【计算数列位置N的值】

如果其前面的M个元素中,存在值相同的元素,则该位置上的数值等于前面M个数中最大的数值与最小的数值之如果其前面的M个元素中,不存在值相同的元素,则该位置上的数值等于前面M个数中最大的数值与最小的数值之差;1、输入M、N两个数,则按照以下规则形成一个数列;两个整数,用逗号分割,分别表示M和N。一个整数,表示数列第N个位置上的数值。2、数列的前M个元素的值为1到M;请计算该数列第N个位置上的数值。N取值范围:1<= N<=50。M取值范围:3<=M<=10。

MISAYAONE的博客 1153

对CryptoDriver里密钥格式定义的探索(1)

一入网络安全才发现深似海,传统汽车MCU码农转型之路异常艰难。在CP AUTOSAR中的CryptoDriver SWS对密钥格式的需求来源于RFC,其中要求了RSA、ECC、SHE等key material的格式。再往下看,我就有些迷糊了,例如关于RSA Private Key的OCTEE STRING格式根据IETF RFC8017,Public Key又得根据RFC5280,完全不得其解。所以今天先从生成密钥对,并对其进行解析开始,一步一步拆解。

认真搞搞汽车MCU 527

CoreDNS实现跨集群service解析实践

借助coredns实现跨集群解析的一种进阶实践

一蓑烟雨 1362

VTK在QT与非QT环境下使用的区别

VTK可以在QT框架内使用,也可以独立于QT使用,这两种使用方式在架构、交互和渲染方面有显著差异。

深之JohnChen的专栏 629

使用Submariner实现kubernetes的跨集群网络互联

使用Submariner实现kubernetes多集群里网络互联(启用Globalnet解决Pod CIDR和Service CIDR完全相同的冲突)

qq_41450292的博客 1232

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Kubernetes多集群服务发现:基于DNS和Service Mesh的跨集群流量路由架构设计

本文系统梳理了Kubernetes多集群服务发现的两种主流架构方案。DNS模式以低侵入性为特点,适用于简单的跨集群调用场景;Service Mesh方案提供了更精细的流量治理和可观测性,适合核心业务链路的跨集群调用。在实际生产中,混合方案在复杂度与灵活性之间取得了最佳平衡。多集群服务发现的根问题在于分布式系统的边界扩展——当我们将应用拆分为多个Kubernetes集群时,服务发现的边界也必须随之扩展。

qwe0iop0的博客 2539

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Kubernetes中如何实现跨集群通信?

在Kubernetes中实现跨集群通信是一个复杂但常见的需求,尤其是在多集群或多区域部署的情况下。

qq_33240556的博客 808

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Kubernetes 跨集群流量调度实战

FSM 是 Flomesh 的另一款开源产品,用于 Kubernetes 南北向的流量管理。FSM 以可编程代理 Pipy 为核心,提供了 Ingress 管理器、Gateway API* 实现、负载均衡器以及跨集群的服务注册发现等功能。使用 FSM 管理 osm-edge 服务网格入口流量Flomesh Ingress 的 SSL 透传Flomesh 多租户 Ingress Controller参与跨集群调度的集群,我们称之为集群联邦。一个集群要加入集群联邦,需要在控制平面所在的集群中注册该集群。

shaderx004的博客 885

容器注册到consul_「架构」kubernetes 跨集群 服务注册与发现方案探讨

原创:80后程序员的世界观(微信公众号ID:zhuangmeilicom),欢迎分享,转载请保留出处。本文分三个部分:kubernetes 集群内部的服务注册与发现kubernetes consul实现服务注册与发现kubernetes 跨集群服务注册与发现一、kubernetes 集群内部的服务注册发现k8s平台通过kube-dns或者coreDNS实现了服务注册和发现功能。对于应用来讲,这个功...

weixin_29006187的博客 1182

实现Kubernetes跨集群服务应用的高可用

我们在进行生产环境部署时得到的一个明确的需求,是Kubernetes用户希望服务部署能够zone、跨区域、跨集群甚至跨云边界(译者:如跨云供应商)。相比单集群多zone部署,跨集群服务提供按地域分布,支持混合云、多云场景,提升高可用等级。客户希望服务能够跨一到多个集群(可能是本地或者远程集群),并希望这些集群无论内部或外部都有一致稳定的连接。 在Kubernetes 1.3版本,我们希望降低跨...

u014389734的博客 788

federation机制的最新发布_基于Federation实现Kubernetes跨集群应用调度实践

1 Kubernetes Federation介绍1.1 Kubenetes Federation概述Kubernetes Federation实现在混合云模式下统一管理多个跨region或者跨公有云供应商的Kubernetes集群,使Kubernetes应用支持在多个跨区域集群之间部署、调度以及同步,从而实现应用的高可用以及灾备的效果。Kubernetes Federation主要包含...

weixin_39528843的博客 987

跨集群服务——实现Kubernetes应用的高可用

我们在进行生产环境部署时得到的一个明确的需求,是Kubernetes用户希望服务部署能够zone、跨区域、跨集群甚至跨云边界(译者:如跨云供应商)。相比单集群多zone部署,跨集群服务提供按地域分布,支持混合云、多云场景,提升高可用等级。客户希望服务能够跨一到多个集群(可能是本地或者远程集群),并希望这些集群无论内部或外部都有一致稳定的连接。在Kubernetes 1.3...

全网:架构师研究会 161

《Kubernetes网络权威指南》读书笔记 | 你的名字:通过域名访问服务

书籍来源:《Kubernetes网络权威指南:基础、原理与实践》在一个Kubernetes集群中,DNS服务是非必需的,因此无论是Kube-dns还是CoreDNS,通常以插件(add-on)的方式安装,作为运行在集群上的应用。

团爸讲算法 1191

多云联邦集群管理(2)(跨云服务统一访问)

本文详细介绍了基于Kubernetes的多集群互联方案ClusterMesh,采用Karmada+Calico+Submariner架构实现跨集群服务发现与通信。重点阐述了技术架构、组件交互流程(如VXLAN隧道与IPSec加密)、多集群CIDR规划及安装部署步骤(含Karmada纳管、Calico配置、Submariner网关搭建)。通过示例演示了跨集群域名访问(如svc-name.ns.svc.clusterset.local)和全局服务暴露,验证了方案可行性。

zishen的专栏 1358

Thanos 跨集群 TLS 通信实战:基于 Envoy 代理的 Querier 安全 gRPC 访问方案

在 Thanos 全局视图(Global View)模式下,当未使用 [Thanos Receive](https://link.gitcode.com/i/f87e5a035af4550d0c4bc1d2beb53bcb) 时,你通常会有若干集中式集群,需要为这些集群提供安全、基于 TLS 的 gRPC 路由,以便访问网络外部远程集群中携带 sidecar 的 leaf Prometheus 实

gitblog_00770的博客 1013
上一篇: Wireshark (四) 实战解析:HTTP协议中的敏感数据追踪
下一篇: 文本挖掘实战(二):大众点评评论数据清洗与存储优化
java5
博客等级 码龄22年 85粉丝 2103原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值