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

Karmada Multi-Ingress(MCI)技术实践

一、背景

在多集群场景中,Kubernetes 原生 Ingress 控制器无法跨集群调度和管理流量。Karmada 作为一款 Kubernetes 多集群管理控制平面,推出了 Multi-Cluster Ingress(MCI)能力,专门解决多集群应用统一入口问题。

MCI 通过 MultiClusterIngress CRD 资源实现多集群 Ingress 的管理与自动下发,结合 karmada-agent 实现资源同步,最终达到跨集群流量入口统一、自动化、可控的目标。


二、MCI 核心组件说明

组件作用
MultiClusterIngress (MCI)核心 CRD 资源,定义多集群应用的统一入口
ServiceExport / ServiceImport解决跨集群后端服务发现问题
karmada Ingress Controller各成员集群内部流量入口,需接收 karmada-apiserver 分发的 Ingress 资源(Karmda并没有自己维护Karmda ingress Controller 需要手动编译可以参考此链接)

三、MCI 典型架构图

                   ┌──────────────────┐│  Karmada Control ││    Plane (Host)  │└──────────────────┘│┌─────────────┴─────────────┐│                           │┌─────────────────┐        ┌─────────────────┐│   Member Cluster│        │   Member Cluster││     (cluster1)  │        │     (cluster2)  │├─────────────────┤        ├─────────────────┤│ karmda-ingress  │        │ karmada-ingress │└─────────────────┘        └─────────────────┘

四、MCI 部署步骤详解

1. 环境准备

  • Kubernetes >= 1.20
  • Karmada >= v1.5.0
  • 各成员集群已加入 Karmada
  • 成员集群部署 karmada-ingress

2. 各成员部署 karmada-ingress

// for HTTPS
git clone https://github.com/karmada-io/multi-cluster-ingress-nginx.git
// for SSH
git clone git@github.com:karmada-io/multi-cluster-ingress-nginx.gitcd charts/ingress-nginxhelm install ingress-nginx . -n ingress-nginx --create-namespace

在部署完成后需要编辑 ingrss-nginx-controller deployment,添加以下内容:

apiVersion: apps/v1
kind: Deployment
metadata:...
spec:#...template:spec:containers:- args:- /nginx-ingress-controller- --karmada-kubeconfig=/etc/kubeconfig  # new line#...volumeMounts:#...- mountPath: /etc/kubeconfig            # new linename: kubeconfig                      # new linesubPath: kubeconfig                   # new linevolumes:#...- name: kubeconfig                        # new linesecret:                                 # new linesecretName: kubeconfig                # new line

5. 创建服务暴露资源

在创建之前需要跑一个 nginx deployment,执行命令 kubectl create deployment nginx --image nginx --port=80 --kubeconfig /root/.kube/kamadaconfig

然后再创建服务暴露,资源如下:


apiVersion: v1
kind: Service
metadata:name: serve
spec:ports:- port: 80targetPort: 80selector:app: nginx
---
apiVersion: policy.karmada.io/v1alpha1
kind: PropagationPolicy
metadata:name: example-policy # The default namespace is `default`.
spec:resourceSelectors:- apiVersion: apps/v1kind: Deploymentname: nginx - apiVersion: v1kind: Servicename: serveplacement:clusterAffinity:clusterNames:- test - test2
---
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:- test- test2
---
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:- test- test2

6. 创建 MultiClusterIngress 资源

MultiClusterIngress 也需要通过 karmada-apiserver 创建。

apiVersion: networking.karmada.io/v1alpha1
kind: MultiClusterIngress
metadata:name: demo-localhostnamespace: default
spec:ingressClassName: nginxrules:- host: demo.localdev.mehttp:paths:- backend:service:name: serveport:number: 81path: /webpathType: Prefix

五、验证方式

  1. 在本地电脑绑定域名:
echo "CLUSTER_INGRESS_IP demo.example.com" >> /etc/hosts
  1. 访问:
curl http://demo.example.com

应能正常访问后端服务。

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

相关文章:

  • verilog中timescale指令的使用
  • javaweb———html
  • 【taro react】 ---- RuiVerifySlider 行为验证码之滑动拼图使用【天爱验证码 tianai-captcha 】实现
  • android ui thread和render thread
  • 上海新华医院奉贤院区:以元宇宙技术重构未来医疗生态
  • RAG 之 Prompt 动态选择的三种方式
  • 华为OD机试 2025B卷 - 小明减肥(C++PythonJAVAJSC语言)
  • 编辑器Vim的快速入门
  • Session的工作机制及安全性分析
  • Qt(信号槽机制)
  • 解数独(C++版本)
  • 永磁同步电机PMSM的无传感器位置控制
  • dotnet publish 发布后的项目,例如asp.net core mvc项目如何在ubuntu中运行,并可外部访问
  • 自动化运维:使用Ansible简化日常任务
  • Word 怎么让字变大、变粗、换颜色?
  • 运维打铁: PostgreSQL 数据库性能优化与高可用方案
  • Flutter 入门
  • 能源管理综合平台——分布式能源项目一站式监控
  • 海岛分布式能源系统调度 粒子群算法优化
  • 基于拉普拉斯变换与分离变量法的热传导方程求解
  • 网安系列【10】之深入浅出CSRF攻击:从原理到实战(DVWA靶场演示)
  • 商城小程序的UI设计都有哪些风格
  • 磷酸镧:多功能稀土材料,助力未来科技
  • 如何排查服务器中已经存在的后门程序?
  • SOC估算综述:电池管理中的关键挑战与前沿技术
  • 【数据结构】第七弹——Priority Queue
  • 苹果开源 DiffuCoder :用于代码生成的掩码扩散模型
  • 深度学习机器学习比较
  • 安卓10.0系统修改定制化____系列 ROM解打包 修改 讲解 与安卓9文件差异
  • 【Godot4】正则表达式总结与测试