当前位置: 首页 > news >正文

Karmada 多集群服务发现

一、背景介绍

多集群架构下,不同 Kubernetes 集群间的服务如何互通是核心挑战。Karmada 支持 Kubernetes Multi‑cluster Service APIs(MCS),通过 ServiceExportServiceImport 实现跨集群服务发现与调用,帮助多集群服务统一管理和访问。安装和部署可以参考此链接。

二、关键资源与概念

资源类型作用描述创建位置
ServiceExport声明某服务要被跨集群导出控制面集群 (Host)
ServiceImport表示控制面集群导入该服务,实现跨集群访问控制面集群 (Host)
PropagationPolicy用于跨集群传播资源控制面集群 (Host)

三、ServiceExport 和 ServiceImport 的使用场景

3.1 ServiceExport 使用场景

  • 服务提供方向外共享服务时使用
    某个成员集群中有服务需要暴露给其他集群访问时,需在该成员集群创建对应的 ServiceExport 资源。
  • 标识“这是一个跨集群共享的服务”,Karmada 根据此资源在控制面集群生成对应的 ServiceImport,并同步给需要访问的集群。
  • 典型场景:多活架构中,各集群运行不同服务副本,需统一暴露给消费者集群。

3.2 ServiceImport 使用场景

  • 服务消费方集群创建,代表该集群“导入”了某个跨集群服务,形成本地访问入口。
  • 通过 ServiceImport,目标集群会自动创建与原服务对应的“派生服务”(Derived Service),Pod 可直接访问。
  • 典型场景:需要访问其他集群服务的集群,为服务调用端提供访问接口。

四、环境准备

  • Karmada 已安装并运行,控制面集群和多个成员集群已加入;
  • 集群网络环境已经打通;
  • 各集群 Pod 和 Service CIDR 不冲突,网络连通;
  • 已安装 ServiceExportServiceImport CRD,并通过 PropagationPolicy 同步到成员集群。

五、操作流程

1. 在成员集群部署服务

例如,在成员集群 Member1 中部署示例应用:

apiVersion: apps/v1
kind: Deployment
metadata:name: serve
spec:replicas: 1selector:matchLabels:app: servetemplate:metadata:labels:app: servespec:containers:- name: serveimage: jeremyot/serve:0a40de8args:- "--message='hello from cluster member1 (Node: {{env \"NODE_NAME\"}} Pod: {{env \"POD_NAME\"}} Address: {{addr}})'"env:- name: NODE_NAMEvalueFrom:fieldRef:fieldPath: spec.nodeName- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name
---      
apiVersion: v1
kind: Service
metadata:name: serve
spec:ports:- port: 80targetPort: 8080selector:app: serve
---
apiVersion: policy.karmada.io/v1alpha1
kind: PropagationPolicy
metadata:name: mcs-workload
spec:resourceSelectors:- apiVersion: apps/v1kind: Deploymentname: serve- apiVersion: v1kind: Servicename: serveplacement:clusterAffinity:clusterNames:- member1

部署完成后,确保 Service 和 Deployment 运行正常。

2. 创建 ServiceExport

在控制面集群创建 ServiceExport,声明将 serve 服务导出:

apiVersion: multicluster.x-k8s.io/v1alpha1
kind: ServiceExport
metadata:name: serve
---
apiVersion: policy.karmada.io/v1alpha1
kind: PropagationPolicy
metadata:name: serve-export-policy
spec:resourceSelectors:- apiVersion: multicluster.x-k8s.io/v1alpha1kind: ServiceExportname: serveplacement:clusterAffinity:clusterNames:- member1

通过 PropagationPolicy,将该 ServiceExport 资源传播到 Member1。

3. 创建 ServiceImport 并传播到目标成员集群

在控制面集群创建对应的 ServiceImport,表示该服务已被导入:

apiVersion: multicluster.x-k8s.io/v1alpha1
kind: ServiceImport
metadata:name: serve
spec:type: ClusterSetIPports:- port: 80protocol: TCP
---
apiVersion: policy.karmada.io/v1alpha1
kind: PropagationPolicy
metadata:name: serve-import-policy
spec:resourceSelectors:- apiVersion: multicluster.x-k8s.io/v1alpha1kind: ServiceImportname: serveplacement:clusterAffinity:clusterNames:- member2

再用 PropagationPolicy 将 ServiceImport 传播到目标成员集群 Member2。

4. 访问跨集群服务

在 Member2 集群中,Pod 可以访问导入的服务,示例命令:

kubectl --context member2 exec -it <pod-name> -- curl <derived-service-cluster-ip>:80

这表示 Member2 集群中的 Pod 能通过 ServiceImport 自动创建的服务访问 Member1 的应用,实现跨集群服务调用。

http://www.dtcms.com/a/262940.html

相关文章:

  • Apache Doris Profile 深度解析:从获取到分析,解锁查询性能优化密码
  • RedhatCentos挂载镜像
  • LeetCode Hot100(图论)
  • SQL参数化查询:防注入与计划缓存的双重优势
  • 使用 Sqlcmd 高效导入大型 SQL Server 数据库脚本 (.sql)
  • 深入理解 B+ 树:数据库索引的脊梁
  • AI初学者如何对大模型进行微调?——零基础保姆级实战指南
  • vscode一个文件夹有残余的git仓库文件,已经失效了,怎样进行清空仓库残余文件并重新初始化git--ubuntu
  • 【stm32】HAL库开发——CubeMX配置RTC,单片机工作模式和看门狗
  • 炸鸡派-基础测试例程
  • Linux入门篇学习——Ubuntu 系统介绍和Ubuntu启用root用户
  • 在线五子棋对战项目
  • 1.1_2 计算机网络的组成和功能
  • python+uniapp基于微信小程序的食堂菜品查询系统
  • Deepoc 大模型:无人机行业的智能变革引擎
  • vue-33(实践练习:使用 Nuxt.js 和 SSR 构建一个简单的博客)
  • SpringCloud Gateway
  • C++ 第四阶段 STL 容器 - 第五讲:详解 std::set 与 std::unordered_set
  • 蓝牙耳机开发--探讨AI蓝牙耳机功能、瓶颈及未来展望
  • 链表题解——两两交换链表中的节点【LeetCode】
  • AWS 开源 Strands Agents SDK,简化 AI 代理开发流程
  • Objective-c把字符解析成字典
  • 【微服务】.Net中使用Consul实现服务高可用
  • 链表重排序问题
  • java JNDI高版本绕过 工具介绍 自动化bypass
  • Python训练营打卡Day58(2025.6.30)
  • 晨控CK-FR03与和利时LX系列PLC配置EtherNetIP通讯连接操作手册
  • linux下fabric环境搭建
  • [免费]微信小程序停车场预约管理系统(Springboot后端+Vue3管理端)【论文+源码+SQL脚本】
  • Spring Security 鉴权与授权详解(前后端分离项目)