首页 > 其他分享 >容器中域名解析流程以及不同dnsPolicy对域名解析影响

容器中域名解析流程以及不同dnsPolicy对域名解析影响

时间:2023-12-12 10:44:44浏览次数:33  
标签:容器 dnsPolicy etc 域名解析 resolv cluster conf local

本文分享自华为云社区《容器中域名解析流程以及不同dnsPolicy对域名解析影响》,作者:可以交个朋友 。

一、coreDNS背景

部署在kubernetes集群中的容器业务通过coreDNS服务解析域名,Coredns基于caddy框架,将整个CoreDNS服务都建立在一个使用Go编写的HTTP/2 Web 服务器Caddy上。通过插件化(链)架构,以预配置的方式(configmap卷挂载内容配置)选择需要的插件编译,按序执行插件链上的逻辑,通过四种方式(TCP、UDP、gRPC和HTTPS)对外直接提供DNS服务。

二、kubelet通过修改容器/etc/resolv.conf文件使得容器中可解析域名

在kubernetes集群中,coreDNS服务和kube-apiserver通信获取clusterip和serviceName的映射关系,并且coreDNS本身通过clusterip(默认 xx.xx.3.10,比如集群clusterip网段为10.247.x.x,则coreDNS对外暴露服务的clusterip为10.247.3.10),我们知道操作系统域名服务器关键配置文件/etc/resolv.conf中的nameserver字段指定,所以只需要使得容器/etc/resolv.conf中 nameserver字段配置为coreDNS的clusterip地址即可。

那么谁来完成容器/etc/resolv.conf的修改和如何修改?kubelet负责拉起容器,启动参数中--cluster-dns字段对应值就是该集群coreDNS的clusterip地址,kubelet在拉起容器中,根据Pod的dnsPolicy选项,把该值修改注入到容器中。

三、Pod不同dnsPolicy对容器/etc/resolv.conf的影响

  • Default:如果dnsPolicy被设置为“Default”,则名称解析nameserver配置将从pod运行的节点/etc/resolv.conf继承。
# 节点/etc/resolv.conf配置
nameserver X.X.X.X
nameserver X.X.X.Y
options ndots:5 timeout:2 single-request-reopen
  • ClusterFirst:如果dnsPolicy被设置为“ClusterFirst”,则使用集群coredns的service 地址作为Pod内/etc/resolv.conf中nameserver配置。

nameserver 10.247.3.10 
search default.svc.cluster.local svc.cluster.local cluster.local 
options ndots:5 timeout:2 single-request-reopen
  • ClusterFirstWithHostNet:对于使用hostNetwork网络模式运行的Pod,需明确设置其DNS策略“ClusterFirstWithHostNet”,否则 hostNetwork + ClusterFirst实际效果 = Default

nameserver 10.247.3.10 
search default.svc.cluster.local svc.cluster.local cluster.local options ndots:5 timeout:2 single-request-reopen
  • None:它允许用户自定义Pod内/etc/resolv.conf配置,忽略Kubernetes环境中默认的DNS设置。应使用dnsConfigPod规范中的字段提供所有DNS设置 。

/etc/resolv.conf相关配置说明

nameserver:表示指定的DNS服务地址IP,用于解析域名的服务器。

search:表示域名解析时指定的域名搜索域。解析域名的时候,会依搜索域顺序构建域名解析地址。进行域名解析,直到解析即可。如:svcname.default.svc.cluster.local --> svcname.svc.cluster.local --> svcname.cluster.local

options:其他选项。最常见的选项配置有:
-   ndots值:判断域名解析地址中包含的“.”是否大于或等于ndots设定值,如果是,则以请求解析域名地址作为全限定域名发起解析请求,不再进行search域构建域名地址;如果小于ndots,则按照search域构建域名地址,再逐序发起解析请求。
-   timeout:等待DNS服务器返回的超时时间。单位秒(s)。

点击关注,第一时间了解华为云新鲜技术~

 

标签:容器,dnsPolicy,etc,域名解析,resolv,cluster,conf,local
From: https://www.cnblogs.com/huaweiyun/p/17896267.html

相关文章

  • K8s容器debug高级技巧
    使用kubectlexec执行指令如果您在Kubernetes上运行软件,您会想要在某些时候去调试您所部署的软件的一些方面。对于习惯于使用虚拟机(VMs)的人来说能自然使用的一种简单的调试方法,就是连接到一个正在运行的pod,然后进行解译: kubectlexec-itpodname-ccontainername......
  • Mat容器
    Mat:在openCV中用于存储矩阵数据的类型Mat中能存储的数据:cv::Mat_<_Tp>,cv::Mat_<double>,cv::Mat_<float>,cv::Mat_<uchar>,cv::Mat_<unsignedchar> openCV中规定的数据类型:   Mat类的创建:1.cv::Mat::Mat(introws,intcols,inttype)//注意:type:矩阵中存储......
  • 通过宿主机查看K8S或者是容器内的Java程序的简单方法
    通过宿主机查看K8S或者是容器内的Java程序的简单方法背景最近一个项目的环境出现了cannotcreatenativeprocess的错误提示出现这个错误提示时,dockerexec或者是kubeexec进入容器/POD内部后,无法使用jstack等的命令.然后想简单查看一下问题原因都无从下手.这次......
  • 云计算中的容器化搭档Docker和K8S
    目录Docker容器Docker架构Kubernetes(k8s)容器技术演变传统部署时代:虚拟化部署时代:容器部署时代:为什么需要Kubernetes,它能做什么?DockervsK8s容器引擎vs.容器编排器:支持的镜像类型:镜像定义方式:DockerSwarmvsK8sK8s弃用Docker?Dockerdocker是一种开源的应用容器引擎,可以将应......
  • C++ Qt开发:使用关联容器类
    当我们谈论编程中的数据结构时,顺序容器是不可忽视的一个重要概念。顺序容器是一种能够按照元素添加的顺序来存储和检索数据的数据结构。它们提供了简单而直观的方式来组织和管理数据,为程序员提供了灵活性和性能的平衡。Qt中提供了丰富的容器类,用于方便地管理和操作数据。这些容......
  • C++ Qt开发:使用顺序容器类
    当我们谈论编程中的数据结构时,顺序容器是不可忽视的一个重要概念。顺序容器是一种能够按照元素添加的顺序来存储和检索数据的数据结构。它们提供了简单而直观的方式来组织和管理数据,为程序员提供了灵活性和性能的平衡。Qt中提供了丰富的容器类,用于方便地管理和操作数据。这些容......
  • 基于Docker容器搭建hadoop完全分布式集群环境
    简介物理机:windows10宿主机:Centos7虚拟机,需要安装Docker服务hadoop集群节点:3个centos7的容器,hadoop1、hadoop2、hadoop3组件:容器镜像:Centos7DockerCE24.0.7JDK1.8.0_181Hadoop3.1.31.新建虚拟机安装CentOS72.安装Docker2.1安装docker服务yum-yinstalldocke......
  • ApplicationContextInitializer在Spring容器执行refresh之前执行
    ApplicationContextInitializer用于在刷新Spring容器之前的回调接口。ApplicationContextInitializer是Spring框架原有的概念,这个类的主要目的就是在ConfigurableApplicationContext类型(或者子类型)的ApplicationContext进行刷新refresh之前,允许我们对ConfigurableApplicatio......
  • 宝塔面板申请ssl证书验证失败,域名解析错误或验证URL无法被访
    一、问题描述使用宝塔面板建立站点,申请let‘sEncrypt免费ssl证书时提示验证失败,域名解析错误或验证URL无法被访!网上找了各种方案检查防火墙配置,安全组配置,域名解析,nginx代理等等乱七八糟的配置检查来检查去发现都没问题,后来我注意到,这个错误提示是去访问本站点内的一个文......
  • 在 wsl 中启动容器实例,相关资源默认存储在什么地方?
    在WSL(WindowsSubsystemforLinux)中启动的Docker容器实例,默认情况下相关资源存储在WSL的文件系统中。具体来说,WSL使用的是一个虚拟化的Linux环境,在Windows主机上运行,因此Docker容器实例的文件系统将存储在WSL的虚拟文件系统中。WSL提供了Windows和Linux文件系统之间的桥梁,使得在W......