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

Kubernetes Service服务发现dns之CoreDNS

文章目录

    • 背景
    • 什么是Service、服务发现、Endpoint
    • 什么是CoreDNS
      • CoreDNS 的工作原理
    • 常用命令
      • coredns 运行状态
      • 根据服务名,判断某个服务dns解析是否正常

背景

Kubernetes 集群内部的服务发现是微服务架构的核心基础,而 DNS 服务则是实现这一机制的关键组件。

在 Kubernetes 集群中,服务发现允许 Pod 通过服务名(而非硬编码 IP)定位其他服务。

早期的默认 DNS 组件 kube-dns 因架构复杂、性能瓶颈和维护成本高等问题逐渐被弃用。自 Kubernetes 1.11 起,CoreDNS 成为官方推荐的 DNS 解决方案。

什么是Service、服务发现、Endpoint

在 Kubernetes中,Service是用于将一组Pod以稳定的网络接口暴露出来,公开为一个网络服务的抽象,提供稳定的访问入口。虽然 Pod 的 IP 是动态分配的、会频繁变动,但 Service 通过分配一个固定的虚拟 IP(ClusterIP)来解决 Pod 动态变化的问题,并实现负载均衡,确保客户端始终可以通过统一的方式访问服务。

在 Kubernetes 中,Pod的生命周期是短暂的,可能会被终止和重新创建,而 Service 提供了一个持久的访问入口,确保用户或其他服务可以通过固定的 IP 地址或 DNS 名称访问这些 Pod

Endpoint:
在 Kubernetes 中,Endpoint 是用来连接服务和实际提供服务的 Pod 的资源。Endpoint 对象负责维护一组 IP 地址和端口信息,这些信息指向在集群中运行的实际 Pod,使得客户端可以通过 Service 访问这些 Pod。

Endpoint则是与 Service 相关联的资源,存储了与该服务相关联的实际 Pod 的 IP 地址和端口列表。
- 当一个 Service 被创建时,Kubernetes 控制平面会自动生成与该 Service 对应的 Endpoint,
- 用来维护服务和实际运行的 Pod 之间的映射。

命令操作

查看 Service 相关的 Endpoint:

kubectl get endpoints <service-name>

查看 Endpoint 详细信息:

kubectl describe endpoints <service-name>

服务的 DNS 解析结果通常是其 ClusterIP,但如果你需要查看服务的具体后端 Pod,可以检查其 Endpoints.

kubectl get endpoints my-service -n default

注意,加强对 Services(服务)的理解, 从lens工具菜单,我们可以看到Services(服务)归类到网络。

什么是CoreDNS

官网: https://coredns.io/

CoreDNS 是 Kubernetes 中用于服务发现和内部 DNS 解析的默认 DNS 服务器。

服务发现:在 Kubernetes 集群中,服务(Service)是通过 DNS 名称来访问的。当一个 Pod 需要访问另一个服务时,它会向 CoreDNS 发起一个 DNS 查询请求

这是最关键的插件,负责处理 Kubernetes 内部服务的 DNS 解析

CoreDNS 采用单进程模型,直接与 Kubernetes API 交互:

  • Kubernetes 插件:实时监听 Service/Endpoint/Pod 变更,生成 DNS 记录。
  • 插件链机制:通过组合插件实现 DNS 解析、缓存、转发等功能。
  • 无状态设计:无需依赖外部存储(如 etcd),降低运维复杂度。

CoreDNS 的工作原理

CoreDNS 的工作原理
1.当一个 Pod 请求一个服务的 DNS 名称(例如 my-service.my-namespace.svc.cluster.local)时,DNS 请求会被 CoreDNS 处理。
2.CoreDNS 检查 Corefile 中的配置,首先尝试使用 kubernetes 插件来解析请求。
3.如果服务名存在,CoreDNS 将返回服务的 ClusterIP 地址。
4.如果请求无法由 Kubernetes 内部解析,CoreDNS 使用 forward 插件将查询转发到外部 DNS 服务器进行解析。

常用命令

coredns 运行状态

  1. 查看 CoreDNS 的 Pod 状态

首先,确认 CoreDNS 的 Pod 是否正常运行。CoreDNS 通常位于 kube-system 命名空间。

kubectl get pods -n kube-system -l k8s-app=kube-dns

输出示例:

NAME                       READY   STATUS    RESTARTS   AGE
coredns-7f6cbbb7b8-abcde    1/1     Running   0          10d
coredns-7f6cbbb7b8-fghij    1/1     Running   0          10d

STATUS:确保 Pod 的状态是 Running。
READY:确保 Pod 的容器已经就绪(1/1 表示 1 个容器已就绪)。

  1. 查看 CoreDNS 的 Service

CoreDNS 通常通过一个 Service 暴露服务。可以查看其 Service 的状态。

kubectl get svc -n kube-system kube-dns

输出示例:

NAME       TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)         AGE
kube-dns   ClusterIP   10.96.0.10    <none>        53/UDP,53/TCP   10d

CLUSTER-IP:确保 CoreDNS 的 Service 有一个有效的 ClusterIP。
PORT(S):确保端口 53(UDP/TCP)已正确暴露。

  1. 检查 CoreDNS 的配置
    CoreDNS 的配置文件通常以 ConfigMap 的形式存在。可以查看其配置。
kubectl get configmap -n kube-system coredns -o yaml
  1. 验证 DNS 解析

最后,验证 CoreDNS 是否正常工作。可以在集群中创建一个临时 Pod 并测试 DNS 解析。

kubectl run -it --rm --image=busybox:1.28 --restart=Never -- dns-test -- nslookup kubernetes.default

根据服务名,判断某个服务dns解析是否正常

列出命名空间中的服务

kubectl get svc -n your-namespace

Kubernetes 会自动为每个 Service 分配一个 DNS 名称,格式为 <service-name>.<namespace>.svc.cluster.local

假设你找到的服务名是 my-service,位于 default 命名空间,那么它的 DNS 名称是:my-service.default.svc.cluster.local
如果服务位于其他命名空间(例如 my-namespace),则 DNS 名称是:my-service.my-namespace.svc.cluster.local

使用 nslookup 查询 DNS 信息

你可以通过创建一个临时 Pod(例如使用 busybox 镜像)来查询服务的 DNS 信息。

kubectl run -it --rm --image=busybox:1.36 --restart=Never dns-test -- nslookup my-service.default.svc.cluster.local

相关文章:

Kubernetes Service服务发现dns之CoreDNS

文章目录 背景什么是Service、服务发现、Endpoint什么是CoreDNSCoreDNS 的工作原理 常用命令coredns 运行状态根据服务名&#xff0c;判断某个服务dns解析是否正常 背景 Kubernetes 集群内部的服务发现是微服务架构的核心基础&#xff0c;而 DNS 服务则是实现这一机制的关键组…...

Spring Boot 测试:单元、集成与契约测试全解析

一、Spring Boot 分层测试策略 Spring Boot 应用采用经典的分层架构&#xff0c;不同层级的功能模块对应不同的测试策略&#xff0c;以确保代码质量和系统稳定性。 Spring Boot 分层架构&#xff1a; Spring Boot分层架构 A[客户端] -->|HTTP 请求| B[Controller 层] …...

用友NC系列漏洞检测利用工具

声明&#xff01;本文章所有的工具分享仅仅只是供大家学习交流为主&#xff0c;切勿用于非法用途&#xff0c;如有任何触犯法律的行为&#xff0c;均与本人及团队无关&#xff01;&#xff01;&#xff01; 目录标题 YongYouNcTool启动及适配环境核心功能界面预览一键检测命令执…...

PostgreSQL 创建表格

PostgreSQL 创建表格 在数据库管理中&#xff0c;表格&#xff08;Table&#xff09;是数据存储的基础。PostgreSQL作为一款强大的开源对象关系型数据库管理系统&#xff08;ORDBMS&#xff09;&#xff0c;创建表格是其最基本的功能之一。本文将详细讲解如何在PostgreSQL中创…...

一周一个Unity小游戏2D反弹球游戏 - 球的死区及球重生

前言 本文将实现当球弹到球板下方的死亡区域后,球会被重置到球板上发射点,并且重置物理状态的逻辑。 创建球的死亡区 之前创建的在屏幕下方的空气墙碰撞体可以将其Is Trigger勾选上,让其成为一个触发器,用来检测球是否进入该区域,如下。 创建一个脚本名为Deadzone…...

本地部署 DeepSeek:从 Ollama 配置到 Spring Boot 集成

前言 随着人工智能技术的迅猛发展&#xff0c;越来越多的开发者希望在本地环境中部署和调用 AI 模型&#xff0c;以满足特定的业务需求。本文将详细介绍如何在本地环境中使用 Ollama 配置 DeepSeek 模型&#xff0c;并在 IntelliJ IDEA 中创建一个 Spring Boot 项目来调用该模型…...

vue3:三项目增加404页面

一、路由添加 1、官网地址 带参数的动态路由匹配 | Vue Routerhttps://router.vuejs.org/zh/guide/essentials/dynamic-matching.html 2、复制核心语句 { path: /:pathMatch(.*)*, name: NotFound, component: NotFound } 3、粘贴到路由index.js中 4、建立页面 在view文件夹…...

MCAL(Microcontroller Abstraction Layer)介绍

目录 MCAL的核心作用 MCAL的模块组成 1. 微控制器驱动&#xff08;Microcontroller Drivers&#xff09; 2. I/O驱动&#xff08;DIO, PWM, ADC等&#xff09; 3. 通信驱动&#xff08;Communication Drivers&#xff09; 4. 存储驱动&#xff08;Memory Drivers&#xf…...

爬虫:PhantomJS的详细使用和实战案例

文章目录 一、PhantomJS介绍1.1 什么是 PhantomJS1.2 PhantomJS 的特点与优势二、PhantomJS 的安装2.1 在 macOS 上安装 PhantomJS2.2 在 Linux 上安装 PhantomJS2.3 在 Windows 上安装 PhantomJS2.4 验证安装三、PhantomJS 的基本使用3.1 示例 1:打开网页并截图3.2 示例 2:获…...

目标检测——数据处理

1. Mosaic 数据增强 Mosaic 数据增强步骤: (1). 选择四个图像&#xff1a; 从数据集中随机选择四张图像。这四张图像是用来组合成一个新图像的基础。 (2) 确定拼接位置&#xff1a; 设计一个新的画布(输入size的2倍)&#xff0c;在指定范围内找出一个随机点&#xff08;如…...

深度学习工程师的技术图谱和学习路径

在构建一个深度学习工程师的技术图谱时,按照“技能树与能力模型”的结构可以帮助清晰地展示出技术体系的层次化关系,帮助学习者更好地理解每个技术点的依赖与顺序。 深度学习工程师的技术图谱和学习路径 以下是深度学习工程师的技能树,包括从基础到进阶的学习路径,以及对…...

Qt 文件操作+多线程+网络

文章目录 1. 文件操作1.1 API1.2 例子1&#xff0c;简单记事本1.3 例子2&#xff0c;输出文件的属性 2. Qt 多线程2.1 常用API2.2 例子1&#xff0c;自定义定时器 3. 线程安全3.1 互斥锁3.2 条件变量 4. 网络编程4.1 UDP Socket4.2 UDP Server4.3 UDP Client4.4 TCP Socket4.5 …...

如何使用ArcGIS Pro制作横向图例:详细步骤与实践指南

ArcGIS Pro&#xff0c;作为Esri公司推出的新一代地理信息系统&#xff08;GIS&#xff09;平台&#xff0c;以其强大的功能和灵活的操作界面&#xff0c;在地理数据处理、地图制作和空间分析等领域发挥着重要作用。 在地图制作过程中&#xff0c;图例作为地图的重要组成部分&…...

Kotlin 嵌套类和内部类

在Kotlin中&#xff0c;嵌套类&#xff08;Nested Class&#xff09;和内部类&#xff08;Inner Class&#xff09;是两种不同的类&#xff0c;它们在定义和使用上有一些区别。 1.嵌套类&#xff08;Nested Classes&#xff09;默认是静态的&#xff08;即等同于Java中的stati…...

蓝蝶(BlueStacks)模拟器Root、Magisk、LSPosed及Shamiko框架安装与过应用检测指南

蓝蝶&#xff08;BlueStacks&#xff09;模拟器Root、Magisk、LSPosed及Shamiko框架安装与过应用检测指南 蓝蝶bluestacks模拟器root和magisk以及Lsposed和shamiko框架的安装过应用检测 一、引言 蓝蝶&#xff08;BlueStacks&#xff09;模拟器是一款广受欢迎的安卓模拟器&…...

OpenCV计算摄影学(6)高动态范围成像(HDR imaging)

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 高动态范围成像&#xff08;HDR imaging&#xff09;是一种图像处理技术&#xff0c;旨在通过增加图像的动态范围来更准确地表示真实世界的亮度差…...

[ComfyUI][AI生图]如何在Comfyui中安装插件管理器

如何在ComfyUI便携版中安装插件管理器 在现代软件环境中,图形用户界面(GUI)提供了一种直观的方式来与应用程序交互。ComfyUI是一个出色的GUI框架,它使用户能够通过图形化方式配置和管理他们的应用程序。特别是ComfyUI的便携版,它允许用户在没有安装的情况下使用这一工具,…...

初探Ollama与deepseek

什么是Ollama&#xff1f;它与大模型有什么联系&#xff1f; 简单说&#xff0c;Ollama就像是你电脑上的一个 “大模型小助手”。 以前&#xff0c;很多强大的大语言模型&#xff0c;比如能回答各种问题、写文章、翻译等的那些模型&#xff0c;要么只能在网上的服务器上用&am…...

Linux top 常用参数记录

top命令经常用来监控linux的系统状况&#xff0c;能实时显示系统中各个进程、线程的资源占用情况&#xff0c;是常用的性能分析工具。 一些常用参数记录 top的使用方式 top [-d number] | top [-bnp] # 5s 更新一次 top -d 5# 进行2次top命令的输出结果 top -n 2# 查看进程的…...

CCF-CSP认证 202104-1灰度直方图

题目描述 思路 首先输入矩阵长度、矩阵宽度和灰度范围&#xff0c;结果数组长度可固定&#xff0c;其中的元素要初始化为0。在输入灰度值的时候&#xff0c;结果数组中以该灰度值为索引的元素值1&#xff0c;即可统计每个灰度值的数量。 代码 C版&#xff1a; #include <…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...