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

集群内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.mzph.cn/diannao/1786.shtml

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

相关文章

Navicat 干货 | 掌握 PostgreSQL 规则语法

PostgreSQL 规则提供了一种强大的机制,控制查询执行并在数据库内部实施数据操作。理解规则的语法和用法对于有效利用其功能至关重要。在上周的文章中,我们探讨了 PostgreSQL 规则的工作原理及其与触发器的区别。今天的文章将使用免费的 “dvdrental”示例…

程序员35岁会失业吗?针对中年危机的5种解决方案

在程序员的职业生涯中,35岁被许多人认为是一道重要的分水岭。这个年龄被赋予了特殊的意义,因为在这个年龄段,许多程序员开始对自身的职业发展进行反思和重新定位。一方面,随着科技的飞速发展,新的编程语言和技术层出不…

3.AlexNet--CNN经典网络模型详解(pytorch实现)

看博客AlexNet--CNN经典网络模型详解(pytorch实现)_alex的cnn-CSDN博客,该博客的作者写的很详细,是一个简单的目标分类的代码,可以通过该代码深入了解目标检测的简单框架。在这里不作详细的赘述,如果想更深…

如何使用rdtsc和C/C++来测量运行时间(如何使用内联汇编和获取CPU的TSC时钟频率)

本文主要是一个实验和思维扩展,除非你有特殊用途,不然不要使用汇编指令来实现这个功能。扩展阅读就列出了一些不需要内联汇编实现的 写本文是因为为了《Windows上的类似clock_gettime(CLOCK_MONOTONIC)的高精度测量时间函数》这篇文章找资料的时候&…

不同版本vue安装vue-router

vue-router 是vue官网发布的一个插件库,单页面路由。vue 和 vue-router 之间版本也需要对应。 vue2.x版本使用vue-router3.x版本,vue3.x使用vue-router4.x版本,根据自己的需要选择合适的版本 1、可以在安装前查看vue-router版本,…

说一说什么是并发队列,并发队列和并发集合的区别是什么

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:并发队列和并发集合,以及他们的区别 并发队列是一种特殊的队列数据结构,它能够支持多个线程同时对队列进行操作,包括插入和删除操作,而不需要…

陈奂仁联手 The Sandbox 推出“Hamsterz Doodles”人物化身系列

全新人物化身系列结合艺术与实用性 开创元宇宙新篇章 著名亚洲唱作歌手兼香港电影金像奖得主陈奂仁携手 The Sandbox,兴奋地宣布推出新的元宇宙人物化身系列 —— Hamsterz Doodles 仓鼠涂鸦。 陈奂仁在 The Sandbox 推出 Hamsterz Doodles 系列,将艺术与…

波士顿动力抛弃液压机器人Atlas,推出全新电动化机器人,动作超灵活

本周,机器人科技巨头波士顿动力宣布液压Atlas退役,并推出了下一代产品——专为实际应用而设计的全电动Atlas机器人,这也意味着人形机器人迈出了商业化的第一步。 Atlas——人形机器人鼻祖 Atlas(阿特拉斯)这个名字最…

STM32F407,429参考手册(中文)

发布一个适用STM32F405XX、STM32F407XX、STM32F415XX、STM32F417XX、STM32F427XX、STM32F437XX的中文数据手册,具体内容见下图: 点击下载(提取码:spnn) 链接: https://pan.baidu.com/s/1zqjKFdSV8PnHAHWLYPGyUA 提取码…

计算请假时间,只包含工作时间,不包含中午午休和非工作时间及星期六星期天,结束时间不能小于开始时间

1.计算相差小时,没有休息时间 computed: {// 计算相差小时time() {let time 0;if (this.ruleForm.date1 &&this.ruleForm.date2 &&this.ruleForm.date3 &&this.ruleForm.date4) {// 开始时间let date1 this.ruleForm.date1;let y date…

[笔试训练](二)

004 牛牛的快递_牛客题霸_牛客网 (nowcoder.com) 题目&#xff1a; 题解&#xff1a; 使用向上取整函数ceil()&#xff0c;&#xff08;记得添加头文件#include<cmath>&#xff09; #include <iostream> #include <cmath> using namespace std;int main(…

【深度学习实战(15)】使用训练好的语义分割模型进行推理测试

一、语义分割推理测试的一般流程 前处理 &#xff08;1&#xff09;get image &#xff08;2&#xff09;letter_box&#xff1a;o_h&#xff0c;o_w&#xff0c;i_h&#xff0c;i_w&#xff0c;n_h&#xff0c;n_w &#xff08;3&#xff09;1/250&#xff0c;CHW&#xff0c…

Java中ArrayList和顺序表

目录 1.线性表 2.顺序表 3 ArrayList简介 4. ArrayList使用 4.1 ArrayList的构造 4.2 ArrayList常见操作 4.3 ArrayList的遍历 1.线性表 线性表 &#xff08; linear list &#xff09; 是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结 …

Linux-延迟任务and定时任务

一.在系统中设定延迟任务要求如下 在系统中建立easylee用户&#xff0c;设定其密码为easylee 延迟任务由root用户建立 要求在5小时后备份系统中的用户信息文件到/backup中 确保延迟任务是使用非交互模式建立 确保系统中只有root用户和easylee用户可以执行延迟任务的设定 二.在…

ArrayList与顺序表(1)

前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; hellohello~&#xff0c;大家好&#x1f495;&#x1f495;&#xff0c;这里是E绵绵呀✋✋ &#xff0c;如果觉得这篇文章还不错的话还请点赞❤️❤️收藏&#x1f49e; &#x1f49e; 关注&#x1f4a5;&#x…

【苍穹外卖】HttpClient-快速理解入门

目录 HttpClient-快速理解&入门1. 需求2. 如何使用3. 具体示例4. 大致优点5. 大致缺点 HttpClient-快速理解&入门 1. 需求 在平常访问服务器里面的资源的时候&#xff0c;我们通常是通过浏览器输入网址&#xff08;或者在浏览器点击某个连接&#xff09;这种方式&…

测试的分类(2)

目录 按照执行方式分类 静态测试 动态测试 按照测试方法 灰盒测试 按照测试阶段分类 单元测试 集成测试 系统测试 冒烟测试 回归测试 按照执行方式分类 静态测试 所谓静态测试就是不实际运行被测软件,只是静态地检查程序代码, 界面或文档中可能存在错误的过程. 不以…

ffmpeg安装使用(详细)

目录结构 前言ffmpeg下载ffmpeg环境变量配置ffmpeg环境变量配置验证ffmpeg使用举例说明.mp4 转 .wav.mp3 转 .wav.ogg 转 .wav 参考链接 前言 本文主要记录ffmpeg在Windows系统中的安装使用方法。 ffmpeg下载 FFmpeg官网下载 ffmpeg环境变量配置 解压后将“.\ffmpeg\bin”…

vscode 如何断点调试ros1工程

在vscode中断点调试ros1工程主要分为以下几步&#xff1a; 1. 第一步就是修改cmakelist.txt&#xff0c;到调试模式。 将CMAKE_BUILD_TYPE原来对应的代码注释掉&#xff0c;原来的一般都不是调试模式。加上下面一行代码&#xff0c;意思是设置调试模式。 # 断点调试 SET(CMAK…

Python 运行时的目录信息

摘要说明&#xff1a; 在 python 执行过程中&#xff0c;会涉及各种目录信息&#xff0c;了解各种目录的含义和获取方式&#xff0c;可以让我们更好地进行代码控制&#xff0c;并进行相应的处理。 一. 操作场景说明 1. 几个目录和文件 Windows的命令行窗口所在目录 &#xf…