CoreDNS实现跨集群service解析实践

news2024/9/25 22:48:26

CoreDNS实现跨集群service解析实践

  • 背景介绍
  • 使用条件
  • 实现方案

CoreDNS是一款使用Go语言实现的专为云原生应用而生的DNS服务器。本文介绍CoreDNS在特定实际场景下的一种进阶使用实践,也许能为其他也在使用CoreDNS做服务发现的同学提供一些启发和思考。

背景介绍

在我们的实际生产环境中,往往会将关键服务部署在各自独立的k8s集群中,一方面是为了减小故障半径,另一方面也是为了资源最优分配(不同业务对机型、规格要求不同,比如计算型服务、存储型服务对机型有各自比较严格的要求才能实现机器资源的最佳利用)。

然而这些服务之间往往又不是逻辑独立的,相互之间存在依赖关系。比如服务A部署在k8s集群1中,服务B部署在k8s集群2中,而服务A、B之间存在依赖关系,服务A需要调用B提供的接口实现某些功能。这个时候就需要服务A能够通过某种方式能直接访问到服务B。

在我们的生产环境中存在大量的内部服务,相互之间有错综复杂的调用关系(数百个内部服务,分布在数十个不同的k8s集群上)。为了应对这些内部服务之间的服务发现需求,在我们的生产环境中借助CoreDNS来实现跨k8s集群的service域名解析。

使用条件

使用CoreDNS来实现跨集群的service域名解析并达到服务发现的效果,是需要有一些前提条件的。

  1. 跨集群POD IP可直通。这也就意味着,在k8s集群1上的业务POD A中,只要获取到k8s集群2上业务POD B的POD IP,就可以通过这个POD IP进行直接通信。这就要求容器网络插件能提供支持(比如Cilium就能实现这种跨集群POD直通),在我们内部是自研了一套网络插件,实现了跨集群POD IP直通,具备了本文方案的基础。

  2. 跨集群服务使用headless service的FQDN域名。由于本质上跨集群的服务通信是依赖于POD IP,即最终要解析得到对端服务的POD IP,这就意味着我们可以通过headless service的FQDN作为服务域名。一个完整的headless service格式为:
    {service_name}.{namespace}.svc.{cluster_domain}

  3. 每个k8s集群都有唯一的cluster domain。有了多集群中之后,为了唯一标识一个k8s集群,我们在创建k8s集群的时候就为其指定了独一无二的cluster domain,即/etc/kubernetes/kubelet-config.yaml中的clusterDomain字段(该字段如果不设置的话,默认为cluster.local)。指定了该字段之后,在创建dnsPolicy为ClusterFirst/ClusterFirstWithHostNet等业务POD时,POD的/etcd/resolv.conf中search域就会带上该cluster domain。如果创建k8s集群时没有指定的话,search域默认为:

search {ns}.svc.cluster.local svc.cluster.local cluster.local

有了上述3个前提之后,我们就可以设计CoreDNS跨集群service解析的方案了。

实现方案

在我们的方案中,主要利用CoreDNS forward插件能力。具体来说,将每个k8s集群独一无二的cluster domain作为Corefile的一个zone,然后CoreDNS在解析FQDN格式的service时,匹配到某个zone(cluster domain)时,就请求forward到对应的k8s集群的CoreDNS。

现在以两个k8s集群(cluster domain配置分别为cluster1.local、cluster2.local)为例说明实施步骤:

  1. 分别在两个k8s集群中为CoreDNS创建NodePort service(默认端口范围为30000-32768,这里选择的端口为32710):
    在这里插入图片描述
  2. 分别配置两个k8s集群中Corefile(一般为kube-system命名空间下的coredns configmap):
    在这里插入图片描述
  3. 等待CoreDNS自动reload Corefile之后,即可跨集群解析headless service了。

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

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

相关文章

三星推出990 EVO Plus固态硬盘,支持PCIe 4.0性能出色

容量高达4TB,提供增强的性能和能效。性能卓越,随机读写速度分别为为 1,050K IOPS 和 1,400K IOPS。 韩国——2024年9月25日—三星电子于今天宣布推出990 EVO Plus固态硬盘,为其固态硬盘产品线再添新成员。990 EVO Plus 支持 PCIe 4.0和最新的…

Icarus翼星求生教你使用服务器开服

1、购买后登录服务器(百度莱卡云游戏面板) 登录面板的信息在绿色的登陆面板按键下方,不是你的莱卡云账号 进入控制面板后会出现正在安装的界面,大约10分钟左右就能安装完成 2、创建端口 点击目录上的网络,再次页面下点…

kali-linux-2023.4 安装与配置

kali官网 作者:程序那点事儿 日期:2024/01/15 21:34 进入kali官网,点到下载页面 选择安装方式(本次私用虚拟机安装)。裸机安装是指,先要安装虚拟机(例如:CentOS7&#xff09…

【算法】贪心+堆排序实现大根堆及标准库容器类的融合使用

📢博客主页:https://blog.csdn.net/2301_779549673 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 JohnKi 原创,首发于 CSDN🙉 📢未来很长&#…

centos7安装Redis单机版

一、检查是否有GCC环境 gcc --version # 提示-bash: gcc: 未找到命令 说明没有gcc环境# 安装gcc环境 yum install gcc# 如果yum源报错 # 1.检查网络是否正常 ping www.baidu.com # 2.备份当前的yum源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo…

IntraWeb制作汉堡菜单

IntraWeb开发web网站时如何制作手机页面? delphi源代码:示例两列布局带顶部汉堡菜单(兼容电脑与手机) 功能:交互式网页,两列布局,顶部汉堡菜单,点击汉堡图标关闭左侧栏,…

【NLP】基于“检测器-纠错器”中文文本纠错框架

前言 许多方法将中文拼写纠正(检测和纠正给定中文句子中的错误字符)视为序列标注任务,并在句子对上进行微调。一些方法使用错误检测器作为初步任务,然后将检测结果用于辅助后续的错误纠正过程。然而,现有方法在使用检…

RIFormer:保持你的视觉主干有效但移除令牌混合器

摘要 https://arxiv.org/pdf/2304.05659 本文研究了如何在去除其基本构建块中的标记混合器(token mixers)的同时保持视觉主干的有效性。标记混合器作为视觉变换器(Vision Transformers, ViTs)的自注意力机制,旨在实现…

java项目之新闻稿件管理系统(源码+文档)

项目简介 新闻稿件管理系统实现了以下功能: 新闻稿件管理系统的主要使用者管理员功能有个人中心,用户管理,记者管理,审批员管理,新闻分类管理,新闻信息管理,系统管理等。记者发布新闻信息&…

uniapp 整合 OpenLayer3

安装openLayer插件 命令行&#xff1a;npm install ol 安装sass插件 命令行&#xff1a;npm install -D sass 使用方法&#xff1a; *** *** <style scoped lang"scss"> </style> 安装ElementPlus 命令行&#xff1a;npm install element-plus -…

汽车零部件开发流程关键阶段

目录 1、定点阶段 1.1、定点前的准备工作 1.2、定点决策过程 1.3、定点后的工作交接 2、A样阶段&#xff1a;设计验证与基本功能实现 2.1、样件制作&#xff1a;从设计图纸到实物转化 2.2、功能测试&#xff1a;初步验证与性能评估 2.3、评估与优化&#xff1a;A样阶段…

Java数据库连接jdbc

Java数据库连接jdbc 导入java包 1、根目录&#xff0c;新建一个lib目录&#xff08;Dire&#xff09; 2、将jar包放入lib目录下 3、File -> Project Structure&#xff08;项目结构&#xff09; 4、Libraries-> ->java->找到项目的lib目录 5、Apply->OK使用JD…

下载2001年版英特尔开发手册与使用网易有道词典

本专栏的任务&#xff0c;是翻译2001年版英特尔开发手册的第3卷。上一节&#xff0c;我写了开篇语。本节&#xff0c;我是打算将这个版本的英特尔开发手册的下载方式公布出来。使得大家可以将其下载回去。如果你看的块的话&#xff0c;你可以自行翻译与学习。 一. 下载英特…

数据结构const char *INSTNAME[]

代码片段解析 #include <cstring> #include <fstream> #include <sstream> #include <string>const char *INSTNAME[]{"lui", "auipc", "jal", "jalr", "beq", "bne", "blt…

从理论到实践:解锁《数字化专业知识体系》助力企业数字化转型的落地之道

全面解码数字化转型——从理论构想到实践落地 在全球数字化浪潮的推动下&#xff0c;企业正面临前所未有的变革压力。虽然数字化转型的概念已经深入人心&#xff0c;但将其从战略蓝图转化为实际成果的过程仍充满挑战。《数字化专业知识体系》&#xff08;《Towards a Digital …

双目视觉路线,为什么一直没有存在感

“在大疆之前没有人做双目&#xff0c;现在基本上主流的都是单目加多传感器融合&#xff0c;推给车企的时候就会经历一个更长的过程。”一位前大疆车载员工曾这样向雷峰网《新智驾》表示。 双目视觉方案在车载上的应用起起伏伏&#xff0c;从早期的高端车型专属&#xff0c;到…

快手B端商业化技术探索:基于LLM构建智能RAG与Agent平台

导读&#xff1a;大模型技术正以前所未有的速度与各领域融合&#xff0c;为各行各业带来变革&#xff0c;围绕快手B端商业化的业务场景&#xff0c;本文详细阐述了构建基于LLM的Agent技术平台的策略、挑战及解决方案&#xff0c;为您带来宝贵的见解与启示。 一、大模型应用建设…

一日连发两款视频大模型,火山引擎杀疯了!

9月24日&#xff0c;字节跳动旗下火山引擎在深圳举办AI创新巡展&#xff0c;并首次对外发布豆包视频生成-PixelDance、豆包视频生成-Seaweed两款AI大模型&#xff0c;并公布了多项AI大模型的全新升级&#xff0c;以一种全新的姿态迎接AI时代的到来。 雷科技此次受邀参与巡展&a…

机器学习算法与Python实战 | 三万字详解!GPT-5:你需要知道的一切(上)建议收藏!

本文来源公众号“机器学习算法与Python实战”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;三万字详解&#xff01;GPT-5&#xff1a;你需要知道的一切 作者&#xff1a;Alberto Romero &#xff08;青稞AI整理&#xff09; 原…

2024杭电多校7——1007创作乐曲

补题链接 也是好久没补题了&#xff0c;欠了好多好多,我的评价是加训 题目如下: 官方题解: 官方题解一如既往的简洁&#xff0c; 对于不会做的人要读懂真的挺难 \sout{对于不会做的人要读懂真的挺难} 对于不会做的人要读懂真的挺难 首先询问最少删除多少音符(一般人来说不…