浅谈kubernetes的域名解析

pod在进行域名解析时需要向CoreDns的service kube-dns转发域名解析的请求,,来完成域名解析的过程。

这个过程中有几个与NDS解析相关的重要组件:

1、CoreDNS :这是一种新的DNS服务器,旨在与Linux和Docker容器等配合使用,kubernetes中就是一个pod

2、kube-dns :coreDNS的service ,coreDnsPod地址总是发生变化,kube-dns 解决pod的服务发现与负载均衡的问题

3、kube-proxy:service clusterIp与coreDns-pod的IP映射靠kube-proxy来维护的,kube-proxy的ipvs存储服务集群IP与podIP之间的映射关系

kubernetes分集群内部域名解析和集群外部域名解析,下面就具体谈谈

一、Kubernetes 中的域名解析分析

DNS 对域名的解析,依赖容器内 resolv 文件的配置,如下

cat /etc/resolv.conf

nameserver kube-dns-ip

search devops.svc.cluster.local. svc.cluster.local. cluster.local.

ndots 5

这个文件中,配置的 DNS Server,一般就是 K8S 中,kubedns 的 Service 的 ClusterIP,这个IP是虚拟IP。所以,所有域名的解析,其实都要经过 kube-dns 的虚拟IP进行解析,不论是 Kubernetes 内部域名还是外部的域名。Kubernetes 中,域名的全称,必须是 service-name.namespace.svc.cluster.local 这种模式

1、集群内部域名解析

在 Kubernetes 中,比如服务 a 访问服务 b,对于同一个 Namespace下,可以直接在 pod 中,通过 curl b 来访问。对于跨 Namespace 的情况,服务名后接对应 Namespace即可。比如 curl b.devops。那么,这里边会有几个问题:

①:服务名是什么?②:为什么同一个 Namespace 下,直接访问服务名即可?不同 Namespace 下,需要带上 Namespace 才行?③:为什么内部的域名可以做解析,原理是什么?

service-name.namespace.svc.cluster.local 这种模式下,服务名,就是Kubernetes中 Service 的名称,所以,当我们执行下面的命令时:

curl b

必须得有一个 Service 名称为 b,这是前提。

在容器内,会根据 /etc/resolve.conf 进行解析流程。选择 nameserver  kube-dns-ip 进行解析,然后,用字符串 “b”,依次带入 /etc/resolve.conf 中的 search 域,进行DNS查找,分别是:

b.devops.svc.cluster.local -> b.svc.cluster.local -> b.cluster.local ,直到找到为止。

2、集群外部域名解析

访问外部域名走 search 域吗?得看情况,要看采用的是绝对域名解析还是非绝对域名解析,可以说,大多数情况下采用的是非绝对域名解析。

首先科普下什么是绝对域名解析和非绝对域名解析

a、非绝对域名解析:会按照 /etc/resolv.conf 中的 search 域,走一遍追加匹配,直到找到为止

b、绝对域名解析:不会追加search域而是直接进行DNS查找

那什么时候用绝对域名解析什么时候用非绝对域名解析呢?

resolv.conf文件有一个配置 ndots:

例如ndots:5

如果查询的域名包含的点“.”,不到5个,那么进行DNS查找,将使用非绝对域名

如果你查询的域名包含点数大于等于5,那么DNS查询,默认会使用绝对域名进行查询。

二、Kubernetes 中4种 DNS 策略

1、None

表示空的DNS设置

这种方式一般用于想要自定义 DNS 配置的场景,而且,往往需要和 dnsConfig 配合一起使用达到自定义 DNS 的目的。

2、Default

让 kubelet 来决定使用何种 DNS 策略。而 kubelet 默认的方式,就是使用宿主机的 /etc/resolv.conf(可能这就是有人说使用宿主机的DNS策略的方式吧),但是,kubelet 是可以灵活来配置使用什么文件来进行DNS策略的,我们完全可以使用 kubelet 的参数:–resolv-conf=/etc/resolv.conf 来决定你的DNS解析文件地址。

3、ClusterFirst

这种方式,表示 POD 内的 DNS 使用集群中配置的 DNS 服务,简单来说,就是使用 Kubernetes 中 kubedns 或 coredns 服务进行域名解析。如果解析不成功,才会使用宿主机的 DNS 配置进行解析。

4、ClusterFirstWithHostNet

在某些场景下,我们的 POD 是用 HOST 模式启动的(HOST模式,是共享宿主机网络的),一旦用 HOST 模式,表示这个 POD 中的所有容器,都要使用宿主机的 /etc/resolv.conf 配置进行DNS查询,但如果你想使用了 HOST 模式,还继续使用 Kubernetes 的DNS服务,那就将 dnsPolicy 设置为 ClusterFirstWithHostNet。

这几种DNS策略,需要在Pod,或者Deployment、RC等资源中,设置 dnsPolicy 即可

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,744评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,505评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,105评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,242评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,269评论 6 389
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,215评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,096评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,939评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,354评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,573评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,745评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,448评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,048评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,683评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,838评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,776评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,652评论 2 354

推荐阅读更多精彩内容