域名服务器从k8s访问不稳定,使用云厂商托管K8S时容器域名解析注意事项

2023-10-27

云厂商托管 Kubernetes 服务的 Pod 域名解析注意事项

使用云厂家提供托管式Kubernetes,Pod的域名解析参数,通过界面创建Pod的话,可能厂商界面没有开放dnsConfig配置,采用了一些默认值,在使用时候,需要了解清楚厂商提供的默认配置,否则会存在问题。

典型的一个配置是 ndots ,如果你在Pod内访问的域名字符串,点 数量在 ndots 阈值范围内,则被认为是Kubernetes集群内部域名,会被追加 ..svc.cluster.local 后缀,这样会导致每次解析域名时候有2次(IP4/IP6)无效解析,在大规模并发场景下存在性能瓶颈。

云厂商一般将Kubernetes的DNS服务(CoreDNS或SkyDNS)与厂商提供的外部DNS级联了,因此这种问题再功能测试阶段不会被暴露,只在性能测试阶段能暴露出来。

DNS查找原理与规则

DNS域名解析配置文件 /etc/resolv.conf

nameserver 10.247.x.x

search default.svc.cluster.local svc.cluster.local cluster.local

options ndots:3

参数说明

nameserver 域名解析服务器

search 域名的查找后缀规则,查找配置越多,说明域名解析查找匹配次数越多,这里匹配有3个后缀,则查找规则至少6次,因为IPV4,IPV6都要匹配一次

options 域名解析选项,多个KV值;其中典型的有 ndots ,访问的域名字符串内的点字符数量超过 ndots 值,则认为是完整域名,直接解析

Kubernetes的dnsConfig配置说明

nameservers:将用作Pod的DNS服务器的IP地址列表。最多可以指定3个IP地址。当Pod dnsPolicy 设置为“ None”时,列表必须至少包含一个IP地址,否则此属性是可选的。列出的服务器将合并到从指定的DNS策略生成的基本名称服务器,并删除重复的地址。

searches:Pod中主机名查找的DNS搜索域列表。此属性是可选的。指定后,提供的列表将合并到从所选DNS策略生成的基本搜索域名中。删除重复的域名。Kubernetes最多允许6个搜索域。

options:可选的对象列表,其中每个对象可以具有name 属性(必需)和value属性(可选)。此属性中的内容将合并到从指定的DNS策略生成的选项中。删除重复的条目

dnsPolicy域名解析的几种场景应用

对应的容器中的deployment的yaml中的dnsPolicy有三种配置参数ClusterFirst, Default, None

Default:Pod从运行pod的节点继承名称解析配置。有关 详细信息,请参阅相关讨论

ClusterFirst:任何与配置的群集域后缀不匹配的DNS查询(例如"www.kubernetes.io")将转发到从该节点继承的上游名称服务器。群集管理员可能配置了额外的存根域和上游DNS服务器。有关 在这些情况下如何处理DNS查询的详细信息,请参阅相关讨论。

ClusterFirstWithHostNet:对于使用hostNetwork运行的Pod,您应该明确设置其DNS策略“ ClusterFirstWithHostNet”。

None:Kubernetes v1.9(Beta in v1.10)中引入的新选项值。它允许Pod忽略Kubernetes环境中的DNS设置。应使用dnsConfigPod规范中的字段提供所有DNS设置。请参阅下面的DNS配置子部分。

1. 场景1-采用自定义DNS

采用自己建的DNS来解析Pods中的应用域名配置,可以参考以下代码配置,此配置在Pod中的DNS可以完全自定义,适用于已经有自己建的DNS,迁移后的应用也不需要去修改相关的配置;

apiVersion: v1

kind: Pod

metadata:

namespace: default

name: dns-example

spec:

containers:

- name: test

image: nginx

dnsPolicy: "None"

dnsConfig:

nameservers:

- 1.2.3.4

searches:

- ns1.svc.cluster.local

- my.dns.search.suffix

options:

- name: ndots

value: "2"

- name: edns0

2. 场景2-采用kubernets的CoreDNS

优先使用Kubernetes的DNS服务解析,失败后再使用外部级联的DNS服务解析。

apiVersion: v1

kind: Pod

metadata:

namespace: default

name: dns-example

spec:

containers:

- name: test

image: nginx

dnsPolicy: ClusterFirst

3. 场景3-采用云厂家公网域名解析

适用于Pods中的域名配置都在公网访问,这样的话Pods中的应用都从外部的DNS中解析对应的域名

apiVersion: v1

kind: Pod

metadata:

namespace: default

name: dns-example

spec:

containers:

- name: test

image: nginx

dnsPolicy: Default

4. 场景4-采用HostNet的DNS解析

如果在POD中使用hostNetwork:true配置网络,pod中运行的应用程序可以直接看到宿主主机的网络接口,宿主主机所在的局域网上所有网络接口都可以访问到该应用程序

apiVersion: extensions/v1beta1

kind: Deployment

metadata:

name: nginx

spec:

template:

metadata:

labels:

app: nginx

spec:

hostNetwork: true

dnsPolicy: ClusterFirstWithHostNet

containers:

- name: nginx

image: nginx:1.7.9

ports:

- containerPort: 80

如果不加上dnsPolicy: ClusterFirstWithHostNet, pod默认使用所在宿主主机使用的DNS,这样也会导致容器内不能通过service name 访问k8s集群中其他POD。

原文链接

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

域名服务器从k8s访问不稳定,使用云厂商托管K8S时容器域名解析注意事项 的相关文章

  • IOS_Swift_enum枚举方法

    本博文为子墨原创 转载请注明出处 http blog csdn net zimo2013 article details 50116811 enum Type Int case A 1 case B 3 普通方法 func toString
  • 前端之JavaScript

    目录 JS引入方式 Script标签内写代码 引入额外的js文件 JS注释 结束符 变量声明 JS数据类型 数值 number 字符串 String 布尔值 Boolean null和undefined 对象 Object forEach
  • Unity 修改场景中人型骨骼模型的骨骼旋转角度

    出自1909 ca fk 1 unity中设置 模型设置 选中asset中模型 在inspector中选中Rig 取消 Optimize Game Object 的勾选 如果需要获取游戏运行过程中模型各个骨骼的transform 则必须取消
  • jieba分词出现如下错误:AttributeError: 'float' object has no attribute 'decode'

    在利用结巴 jieba 进行分词时出现如下错误 AttributeError float object has no attribute decode 真实挺无语的 当读取编码为utf8时不会报错 当读取为gbk时会报这类错误 这个可以解决
  • fabric中链码关于缺少go的包依赖问题的解决方法

    我们可以在cmd中下载依赖包 go get github com hyperledger fabric common util v1 4 go get github com hyperledger fabric core chaincode
  • dubbo 负载策略,容错策略等常见问题

    目录 一 dubbo 概述 dubbo中的角色分析 dubbo 以 Zookeeper作为注册中心时的执行流程 dubbo 负载均衡策略 xml 方式配置负载均衡策略 SpringBoot yml 文件配置 dubbo 负载配置示例 dub
  • react实现拖拽排序(菜单+视频+图片等)

    DOM结构部分 拖动菜单部分 div div menuList length gt 0 menuList map item i gt div div
  • 刷题笔记-数组---求一个数组中第三大的数

    题目 求取一个数组中第三大的数 数组中至少有一个数据 eg 输入 a 1 2 3 输出 1 第三大的数为1 输入 a 1 2 输出 2 当数组中的数据少于三个时 输出最大的数据 输入 a 1 1 3 2 3 4 输出 2 解题思路 给出的一
  • 【神经网络】神经网络架构大全剖析(附原始论文地址)

    随着新的神经网络架构不时出现 很难跟踪这些架构 知道所有缩写 DCIGN BiLSTM DCGAN anyone 起初可能有点压倒性 所以我决定编写一个包含许多这些体系结构的备忘单 这些大多数是神经网络 有些是完全不同的野兽 虽然所有这些体
  • PTA程序设计类实验辅助教学平台-基础编程题--JAVA--7.4 BCD解密

    import java util Scanner public class Main public static void main String args Scanner sc new Scanner System in
  • Listener监听器与web.xml相关配置

    Listener监听器 在JavaWeb中有个叫监听器的东西 这监听器主要用来监听三大对象 HttpServletRequest HttpSession ServletContext 每个对象对应着各自的监听器接口 监听器可以监听这三个对象
  • ORA-28547:连接服务器失败,可能是Oracle Net管理错误

    网上有很多很杂的文章 我找到一个比较可以解决这个问题的方案 分享出来 真的这个Oracle的安装 plsql的安装 虚拟机的链接 数据库的连接这两天真的能把我搞的生不能 求死不能 差点就放弃当程序员了 不过还好的是 我的一直足够坚定 其实昨
  • 【开发工具】Mac电脑彻底删除Idea(卸载)

    将应用移至废纸篓进行删除 删除缓存和日志文件 打开 终端命令行 iterm 然后使用命令行执行如下命令 上面的 xxx 对应你的电脑当前使用用户名 记得更换上面的日期版本 IntelliJIdea202x x 旧版本 cd Users xx
  • 计算机网络原理_第7章 应用层 IP地址与域名

    IP 地址由32位 即4字节 二进制组成 为书写方便起见 常将每个字节作为一段并且以十进制表示 每段间用 分隔 一 IP地址由网络标识和主机标识两部分组成 常用的IP地址有A B C三类 每类均规定了网络标识和主机标识在 32 位中所占的位
  • android app闪退原因总结分析

    存储不够 缓存过多 剩余空间不够 针对内存 后台任务太多 导致运存不够 针对运存 App和SDK版本不兼容 sdk版本明显低于app 高版本app调用低版本SDK没有的API 不同版本间API 对象或类加载器等差异导致调用异常 程序运行时异
  • IDEA+maven搭建web框架

    一 安装maven 配置环境变量 M2 HOME D maven apache maven 3 3 3 path M2 HOME bin 修改本地仓库地址 进入到apache maven 3 3 3 conf 修改settings xml文
  • GitHub热榜登顶:开源版GPT-4代码解释器,可安装任意Python库,本地终端运行

    省时查报告 专业 及时 全面的行研报告库 省时查方案 专业 及时 全面的营销策划方案库 免费下载 2023年8月份全网热门报告合集 ChatGPT提词示例 让你的ChatGPT聪明100倍 超百页干货资料 AI应用的难点 痛点与未来 202
  • 高并发与高可用知识总结

    文章目录 高并发与高可用知识总结 高并发与高可用知识总结 究竟啥才是互联网架构 高并发 一 什么是高并发 高并发 High Concurrency 是互联网分布式系统架构设计中必须考虑的因素之一 它通常是指 通过设计保证系统能够同时并行处理
  • 【接口声明与接口实现需文件分离】

    接口声明与接口实现需文件分离 定义一个ADT时 类型定义放在头文件中 类型接口的实现 一定要放在同名cpp文件中 否则就会报错 实现一定不能放在头文件中

随机推荐

  • ubuntu安装ROS melodic(最新、超详细图文教程)

    Ubuntu 安装 ROS ROS安装 准备 方法一 推荐 使用小鱼ROS一键安装 方法二 使用官方教程 配置rosdep 方法一 推荐 使用小鱼ROS一键安装 方法二 通过修改文件 ROS简介 ROS 是一个适用于机器人的开源的元操作系统
  • QT5.12编译MQTT

    使用mingw81 64进行编译安装 超级便捷的方法 几步即可完成 源码传送门 https github com emqx qmqtt git 打开下图编译器控制台 打开后如下图所示 步骤一 进入下载的mqtt源码目录 qtmqtt 5 1
  • C语言单链表的建立

    1 头文件 include
  • codeforce刷题 1

    1 Sequence Pair Weight 题目大意 给定一个长度为 n 的数组 a 规定 i lt j 且 ai aj 为一个数对 求数组 a 的 所有连续子序列中有多少个这样的数对 输出总数 解题思路 易得如果一个一个子序列去遍历的话
  • STM32 电机教程 4 - 直流有刷电机闭环电流控制

    前言 有刷电机是大家最早接触的一类电机 中学时物理课堂上介绍电动机也是以它为模型来展示的 有刷电机的主要结构就是定子 转子 电刷 通过旋转磁场获得转动力矩 从而输出动能 电刷与换向器不断接触摩擦 在转动中起到导电和换相作用 有刷电机采用机械
  • SpringBoot中一个空格引发的服务器崩塌

    SpringBoot中一个空格引发的服务器崩塌 在练习SpringBoot整合Thymeleaf的时候 由于一时不查 导致服务器崩塌 细究之下 原来是一个空格的原因 练习是这样的 打算在com action包下建一个UserAction c
  • 嵌入式系统中的“四个地址”

    1 物理地址 计算机在运行程序时 需要对代码指令及相关数据进行保存 而这些数据将会保存到内存 包括RAM和ROM 中 为了能够在读取数据时 可以直接找到数据的位置所在 因此 会对内存进行编号 从0开始顺序编号 直到其支持的最大存储单元 物理
  • 防止SQL注入的五种方法

    一 SQL注入简介 SQL注入是比较常见的网络攻击方式之一 它不是利用操作系统的BUG来实现攻击 而是针对程序员编程时的疏忽 通过SQL语句 实现无帐号登录 甚至篡改数据库 二 SQL注入攻击的总体思路 1 寻找到SQL注入的位置 2 判断
  • Topaz Photo AI for Mac v1.3.1,图像智能ai降噪软件

    Topaz Photo AI是一款适用于Mac的图像处理软件 它使用人工智能技术对照片进行编辑和优化 该软件提供了多种强大的功能 帮助用户轻松地改善图像质量 并实现自定义的效果 Topaz Photo AI支持多种文件格式 包括JPEG T
  • css web页面实现一个弹窗

    div 基本层级 div class pc invest join container div class bg wrap div class place hold div div class top container div class
  • go 类型断言

    1 什么是类型断言 由于 interface 是 一般类型 不是具体类型 如果要转成具体类型 就需要使用类型断言 直接将 x 的值 赋给 a 是不可以的 编译前检查都过不去 断言后可成功赋值 输出结果为 5 2 带检查的类型断言 类型断言有
  • 继承和方法重写

    目录 继承的基本概念 super关键字 1 使用super关键字调用父类成员 子类对象 实例化子类对象 方法重写 方法重写特点 继承的基本概念 1 继承是面向对象的三大特征之一 继承可以解决编程中代码冗余的问题 是实现代码重用的 重要手段之
  • 第五章、ROS常用组件

    第五章 ROS常用组件 TF坐标变换 实现不同类型的坐标系之间的转换 rosbag 用于录制ROS节点的执行过程并可以重放该过程 rqt 工具箱 集成了多款图形化的调试工具 可实现的案例 roslaunch turtle tf2 turtl
  • 熄灯问题

    公众号 CppCoding 题目描述 include
  • VMD-LSTM的数据回归预测(主要应用于风速,负荷,功率)

    VMD LSTM预测 clc clear all close all warning off restoredefaultpath tic 导入数据 ff xlsread windspeed xls B2 B1001 ff ff data
  • 利用lambda表达式为槽函数传递参数20221021

    利用lambda表达式为槽函数传递参数 lambda是匿名函数 lambda 参数 函数体 fun lambda print 我是没有参数的lambda函数 fun 我是没有参数的lambda函数 fun xy lambda x y pri
  • @那些想要转行AI的人:送你一份人工智能入门指南

    人工智能是什么 人工智能为何重要 我们应该畏惧人工智能吗 为什么突然之间所有人都在谈论人工智能 你可能会从网上知道人工智能如何为亚马逊和Google的虚拟助理提供支持 或者人工智能如何一步步地取代所有的工作 有争议的 但是这些文章极少很好的
  • Qt(2):MOC文件解析

    在Qt下 从QObject派生的类都会生成moc 文件 1 比如现在有2个文件 qmyobject h和qmyobject cpp 它里面有一个类QMyObject 记为版本A cpp view plain copy print class
  • hadoop中的ssh无密码登录配置

    目标 在配置hadoop分布式安装过程中 需要配置ssh的无密码登录 在组建hadoop集群的时候 需要多台实体机进行通信 发送或者读取数据 namenode和datanode之间 就是借助ssh 在通信过程中如果需要操作人员频繁输入密码是
  • 域名服务器从k8s访问不稳定,使用云厂商托管K8S时容器域名解析注意事项

    云厂商托管 Kubernetes 服务的 Pod 域名解析注意事项 使用云厂家提供托管式Kubernetes Pod的域名解析参数 通过界面创建Pod的话 可能厂商界面没有开放dnsConfig配置 采用了一些默认值 在使用时候 需要了解清