问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Kubernetes DNS 记录

发布网友 发布时间:2022-11-29 18:00

我来回答

1个回答

热心网友 时间:2023-11-19 09:05

Kubernetes DNS-Based Service Discovery · GitHub

DNS for Services and Pods | Kubernetes

Kubernetes DNS 在 cluster 内部署 DNS Pod 和 Service ,kubelet会告知容器DNS服务IP,来解析DNS names。

Cluster内的每个Service (包括DNS server)会被分配一个 DNS name。默认,客户端Pod的serch list包含该Pod的namespace和cluster的默认domain。

DNS查询会根据不同的namespace返回不同的结果。DNS查询不指定namespace,那么就使用该pod的namespace;指定namesapce,才可以跨namespace查询。

可以通过Pod的 /etc/resolv.conf 文件扩展查询。该文件由Kubelet设置。比如,仅查询 data 将被扩展为 data.test.cluster.local 。 search 参数也可以用来扩展查询。更多DNS查询参见 the resolv.conf manual page.

总之,在 test namespace 内的pod,可以成功的解析 data.prod or data.prod.svc.cluster.local 。

哪些对象拥有 DNS records?

如下章节详细描述了支持的DNS record 的类型和分层。The following sections detail the supported DNS record types and layout that is supported. Any other layout or names or queries that happen to work are considered implementation details and are subject to change without warning. 最新的设置文档参见 Kubernetes DNS-Based Service Discovery

"Normal"( not headless ) Services 指派 DNS A or AAAA record,name 格式 my-svc.my-namespace.svc.cluster-domain.example 。这备解析为该Service的cluster IP。

**"Headless" **( without a cluster IP ) Services 也备指派 DNS A or AAAA record,name 格式 my-svc.my-namespace.svc.cluster-domain.example 。不同于 normal Services,其解析为select的一组Pods的IP。Clients 被期望使用标准round-robin的方式消费这组集合。

SRV Records are created for named ports that are part of normal or Headless Services . For each named port, the SRV record would have the form _my-port-name._my-port-protocol.my-svc.my-namespace.svc.cluster-domain.example . For a regular service, this resolves to the port number and the domain name: my-svc.my-namespace.svc.cluster-domain.example . For a headless service, this resolves to multiple answers, one for each pod that is backing the service, and contains the port number and the domain name of the pod of the form auto-generated-name.my-svc.my-namespace.svc.cluster-domain.example

有时,我们不需要负载均衡,也不需要配置Service IP。这种情况,我们可以创建"headless" Services,通过给cluster IP (.spec.clusterIP)显示指定"None"。

你可以使用headless Service来跟其他服务发现机制交互,不需要绑定到Kubernetes方案。

Headless Services,没有分配 cluster IP ,kube-proxy 不负责这些 Services, 平台上没有负载均衡或代理处理。DNS的自动配置,依赖于Service是否定义了selectors:

定义了selectors的headless Services,endpoints controller 在API 创建 Endpoints 记录,配置DNS返回A记录 (IP addresses) 直接指向 Service 后的 Pods 。

没有定义selectors的headless Services,endpoints controller 不创建 Endpoints 记录。DNS系统通过如下查找、配置:

pod 在 DNS 的name通常如下:In general a pod has the following DNS resolution:
pod-ip-address.my-namespace.pod.cluster-domain.example .

比如,在 default namespace的某个Pod,IP地址 172.17.0.3,cluster 的 domain name 是 cluster.local ,那么该Pod的DNS name是:
172-17-0-3.default.pod.cluster.local .

Deployment 创建的 pods,或Service 发布的 DaemonSet ,DNS解析如下:
pod-ip-address.deployment-name.my-namespace.svc.cluster-domain.example

Pod创建好后,它的hostname就被设置为Pod的 metadata.name 值。

Pod 的 spec 有一个可选项 hostname ,用于指定 Pod 的 hostname。指派后,优先与Pod 的 name 作为 pod 的 hostname。比如,配置Pod的 hostname 为 " my-host ",该 Pod 的hostname 将被设置为 " my-host "。

Pod spec 还有个可选项 subdomain ,用于指定subdomain。比如,某 Pod 设置 hostname 为 " foo ", subdomain 为" bar ",namespace " my-namespace ",那么完全域名(FQDN) 就是 foo.bar.my-namespace.svc.cluster-domain.example 。

如果在同一 namespace 内,存在一个 headless service ,与某pod的subdomain名相同,集群的DNS仍然返回Pod FQDN 的 A or AAAA record。
比如,Pod 的 hostname 是 "busybox-1" , subdomain 是 "default-subdomain",同时名为 "default-subdomain" 的 headless Service 在同一个namespace中,该 pod 将识别它自己的FQDN 为 busybox-1.default-subdomain.my-namespace.svc.cluster-domain.example 。DNS 为该name提供 A or AAAA record ,指向该 Pod 的 IP。Pod "busybox1" 和 "busybox2" 都可以拥有唯一的 A or AAAA records。

Endpoints对象指派 hostname 以 endpoint addresses,以及它的 IP。

FEATURE STATE: Kubernetes v1.20 [beta]

当Pod被配置为可以拥有FQDN,它的 hostname就成了缩写的hostname。比如,如果某Pod的FQDN是 busybox-1.default-subdomain.my-namespace.svc.cluster-domain.example ,那么该Pod默认的hostname就是 busybox-1 并且 hostname --fqdn 命令返回FQDN。

当你在Pod spec 设置 setHostnameAsFQDN: true ,kubelet 就会将该 Pod's FQDN 写入到该Pod namespace的into the hostname for that Pod's namespace. 这样,hostname 和 hostname --fqdn 都将返回 Pod 的 FQDN。

可以给每个pod设置DNS policies。Kubernetes 现在支持如下pod-specific DNS policies。这些 policies 设置在Pod Spec的 dnsPolicy 配置项。

Pod 的 DNS Config 提供了更多DNS控制手段。

dnsConfig 可选配置项可以与任意 dnsPolicy 搭配使用。但是,如果 dnsPolicy 设置为 " None ",那么 dnsConfig 配置项必须被指定。

如下是 dnsConfig 配置项的可定义属性:

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...的话有啥影响,怎么听说对六年后换证有影响? ...重新刷学时吗,科一科二科三科四可以转校吗? 考完科一科二科三科四要多久 ...但是科目三的学时没有打满对以后有没有影响? 我的学时卡没有打过,一点都没有,不过我科一科二科三科四都全部考完了... 五行穿搭2021年10月8日五行属什么怎么穿衣 十月八日上到十月几日 ipadmini和iphone6是充电器不一样、还是数据线不一样呢?可以互相使用充 ... iphone6的插头可以通用ipad mini 吗 iphone6和ipad mini的充电器可以通用吗 k8s 内部dns配置说明 k8s网络配置DNS 杭州西湖的著名景观及特点? 长沙一座“巨无霸”公园,斥资10亿打造,建成后却免费开放 曲靖哪里可以看遇见你电影啊 农垦博纳影城IMAX银幕多大? 7月25号晚上九点,农垦博纳国际影城播放的是什么电影 noip 2003 提高组 神经网络 题意 linux sh脚本无法cd到某目录:cd: can't cd to /opt/test 阳光电源下礼拜走势?阳光电源股票历史走势图?阳光电源发行股价多少? 阳光电源全年股票走势图 格兰仕微波光波G8023ctlk3说明书 昆明到杭州K80列车要经过哪些地方 k8203次列车时刻表 k8023次列车2号车厢29号靠窗户吗 俗话说:宁可生错命,不可取错名!你当初是怎样给孩子取名的呢? 一句关于名字的谚语? 左耳朵里像有东西在飞一样,时不时的又响一下,有谁知道是怎么了吗? 耳朵里进飞虫 有小飞蚊飞进耳朵里,感觉它在里面飞,请问要怎么办 Kubernetes DNS支持 小学和初中有什么区别? 卡粉是什么意思 卡粉的意思 大盘跌什么板块会涨 steam 方舟进化 进不了游戏 以前某宝购买时 能玩的 几个月没玩了 现在进不了游戏 如图 怎样登录另一个笔名 非主流个性笔名 医用雾化器咽炎能用吗 治疗效果怎么样 摇杆游戏机连接电视分辨率 砧板有股酸臭味正常吗 砧板有异味怎么去除 晚上吃什么易长高呢 孩子睡前可以常吃这些食物,不仅睡得安稳,还利于身高、大脑发育 广州社保不够5年怎么买房 长高晚上吃什么好 每天晚上吃什么有利于长高拜托了各位 谢谢 江湖风云录羽衣刀法怎么获得 江湖风云录无相刀法前置功法 启蒙运动的主要内容和历史意义是什麽 10月27济南考的什么试 电脑一体机以前可以连无线网现在又不行了?