K8s: 集群内Pod通信机制之DNS

ops/2025/3/4 13:26:51/

集群内Pod通信机制之DNS

  • Kubernetes 支持两种基本的服务发现模式 —— 环境变量和 DNS

1 ) DNS 概述

  • 可以使用附加组件 为 Kubernetes 集群设置 DNS 服务
  • 支持群集的 DNS 服务器(例如 CoreDNS)监视 Kubernetes API 中的新服务,并为每个服务创建一组DNS 记录
  • 如果在整个群集中都启用了 DNS,则所有 Pod 都应该能够通过其 DNS 名称自动解析服务
  • 例如,如果在 Kubernetes 命名空间 “my-ns” 中有一个名为 “my-service” 的服务
  • 则控制节点和DNS服务共同为 “my-service.my-ns” 创建 DNS 记录
  • “my-ns” 命名空间中的 Pod 应该能够通过简单地对 my-service 进行名称查找来找到它 (“my-service.my-ns” 也可以)
  • 其他命名空间中的Pod必须将名称限定为 my-service.my-ns
  • 这些名称将解析为为服务分配的群集 IP

2 )DNS 实践

  • Kubernetes DNS 在群集上调度 DNS Pod 和 服务

  • 并配置 kubelet 以告知各个容器使用 DNS 服务的 IP来解析 DNS 名称

  • 其原理是通过这个DNS记录为每个pod提供一个单一的这个域名

  • 然后让集群的DNS服务都能够把这个pod IP给它解析出来

  • 我们不推荐进入这个pod的IP 地址,有一些特殊的pod,比如说静态的 pod

  • 它的IP实际上是不变的,在这种方式下,会需要一个域名来给它固定一下

  • 因为我们不会记这个IP地址,我们会记这个域名解析的地址

  • 当 K8s 需要给一个pod提供个固定的域名的时候,就会涉及到创建DNS记录的这个方式

  • A/AAAA 记录

    • “普通” 服务会以 my-svc.my-namespace.svc.cluster-domain.example
    • 这种名字的形式被分配一个DNS A 或 AAAA 记录,取决于服务的 IP 协议族
    • 该名称会解析成对应服务的集群 IP
  • Pods A/AAAA 记录

    • 经由 Deployment 或者 DaemonSet 所创建的所有 Pods 都会有如下 DNS 解析项与之对应:
      pod-ip-address.deployment-name.my-namespace.svc.cluster-domain.example.
      
    • 就是我的 pod 创建之后,它会有一个pod IP地址, 然后 deployment 的名称再加上namespace
    • 再加上 svc.cluster-domain.example 这么一个路径来提供这个pod的一个访问路径
  • 然后,Pod本身提供 的 hostnamesubdomain 字段

    • 比如,创建 Pod 时其主机名取自 Pod 的 metadata.name 值
  • hostname,就是我的主机名, 这个pod我可以认为它是一个最小的主机,这个主机已经有个名字了,比如说叫 busybox1

  • 然后,它的子域名的名称就叫 default-subdomain ,或者叫 subdomain 也行

  • 然后域名就是你的公司名称,集群的名称,可以是你公司的域名,比如 x.com

  • 有了这样的参数之后,我们创建的pod,它就会自带 DNS这个域名,它的hostname 就会变成一个 full qualified 这么一个域名

  • 通过这个域名,能够让别人通过这个DNS服务来找到我

  • DNS服务,比如说我访问一个网站,x.com, 在公网上域名解析,会有 x.com 对应IP地址的解析记录

  • 所以, 通过访问这个域名,然后会拿到这个IP地址,之后,通过HTTP协议连到这个服务器上

  • 然后进行握手认证, 以及后续可能的cookie的校验, session的校验等来给我返回这个数据,这就是网络服务提供的一个过程

  • 创建 dns-pod.yaml

    apiVersion: v1
    kind: Service
    metadata:name: default-subdomain
    spec:selector:app: busyboxclusterIP: Noneports:- port: 1234 targetPort: 1234
    ---
    apiVersion: v1
    kind: Pod
    metadata:name: busybox1labels:app: busybox
    spec:hostname: busybox-1subdomain: aaacontainers:- name: busyboximage: busyboxcommand:- sleep- "3600"
    ---
    apiVersion: v1
    kind: Pod
    metadata:name: busybox2labels:app: busybox
    spec:hostname: busybox-2subdomain: bbbcontainers: - name: busyboximage: busyboxcommand:- sleep- "3600"
    
  • $ kubectl create -f dns-pod.yaml 创建Service和2组pod

    service/default-subdomain created
    pod/busybox1 created
    pod/busybox2 created
    
  • $ get po -w | grep busybox 查看pod的创建状态

    busybox1                        1/1     Running            0                 108s
    busybox2                        1/1     Running            0                 108s
    
  • $ kubectl exec -it busybox2 -- sh 登录一台pod

  • $ hostname busybox-2 这个是简短的

  • $ hostname -f busybox-2.bbb.default.svc.cluster.local 这个是全的,是dns上注册的地址

  • 有了上面全的域名地址,就可以访问到它这个pod了,通过这种方式,K8s提供了pod的dns注册机制

  • DNS 会为此名字提供一个 A 记录或 AAAA 记录,指向该 Pod 的 IP

  • “busybox1” 和 “busybox2” 这两个 Pod 分别具有它们自己的 A 或 AAAA 记录


http://www.ppmy.cn/ops/15680.html

相关文章

【Vue】Vue中使一个div铺满全屏

在Vue中实现div全屏铺满的方式与纯CSS实现类似&#xff0c;只是在Vue组件中应用CSS的方式略有不同。 最近在项目开发中&#xff0c;就遇到了这个问题&#xff0c;特此记录一下&#xff0c;方便大伙避坑。 有这么一段代码&#xff1a; <template><div class"fu…

医学影像图像去噪:滤波器方法、频域方法、小波变换、非局部均值去噪、深度学习与稀疏表示和字典学习

医学影像图像去噪是指使用各种算法从医学成像数据中去除噪声,以提高图像质量和对疾病的诊断准确性。MRI(磁共振成像)和CT(计算机断层扫描)是两种常见的医学成像技术,它们都会受到不同类型噪声的影响。 在医学影像中,噪声可能来源于多个方面,包括成像设备的电子系统、患…

Vue-条件渲染(初识vue渲染)

目录 一、Vue条件渲染-介绍 1.概念 2.特点 3.功能 4.好处 5.应用 二、Vue条件渲染-使用 1.初识渲染 2.条件v-if的使用 3.条件v-if-else的使用 4.条件v-else-if使用 5.template元素使用 6.条件渲染-阶段案例 7.条件v-show 三、Vue条件渲染-实例 1.权限管理系统 …

【window环境、Linux环境、QT三种方法实现TCP通信】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、Windows环境下实现TCP通信1.服务器2.客户端3.运行 二、Linux环境下实现TCP通信1.服务端2.客户端 三、Qt实现TCP通信1.服务端1.客户端 总结 前言 大多数项目…

第 3 章:GO 的接口和抽象 拓展篇 - CRUD 接口实现示例

第 3 章&#xff1a;GO 的接口和抽象 拓展篇 - CRUD 接口实现示例 在前面的第3章中&#xff0c;我们用简单的代码展示了GO的接口和抽象方法&#xff0c;但是代码的示例较少&#xff0c;部分同学可能会觉得理解起来比较抽象。因此在本章中&#xff0c;我们将通过一个具体的例子…

(三)组合特征与特征变换 学习简要笔记 #机器学习特征工程 #CDA学习打卡

目录 一. 统计及组合特征 1&#xff09;统计特征 2&#xff09;业务特征 3&#xff09;组合特征 &#xff08;a&#xff09;简单组合特征 &#xff08;b&#xff09;模型特征组合 二. 特征变换 1&#xff09;对数变换&#xff08;Logarithmic Transformation&#xff0…

vue3的getCurrentInstance获取当前组件实例

vue3的setup中没有this时需要使用getCurrentInstance()来获取。 在 Vue 3 中&#xff0c;getCurrentInstance 方法可以在组合式 API&#xff08;Composition API&#xff09;中获取当前组件实例。这个方法返回一个包含了组件实例的对象&#xff0c;你可以用它来访问组件的 pro…