[k8s系列六]K8S网络补充之DNS

前面两章介绍了service和ingress,service有Cluster IP和Node Port两种类型:

  • ClusterIP提供一个集群内部的虚拟IP(clusterIP),以便在集群内部通过clutserIP:port访问;
  • NodePort:在每个节点上打开一个端口,在集群外部可以通过nodeIP:nodePort访问,在内部依然可以通过clutserIP:port 访问。

但实际上,集群内部一般不直接用Cluster IP,而是用service名作为域名,通过Core DNS组件做一次域名解析后得到cluster IP。跨集群一般也不用nodePort,而是走Ingress ,或者loadbalance service。

1. DNS

DNS(Domain Name System) 用于将域名解析成IP地址,例如

# host www.baidu.com
www.baidu.com has address 180.101.49.11
www.baidu.com is an alias for www.a.shifen.com.
www.baidu.com is an alias for www.a.shifen.com.

2. CoreDns

Kubernetes 早期的 DNS 组件叫 KubeDNS。CNCF 社区后来引入了更加成熟的开源项目 CoreDNS 替换了 KubeDNS。所以我们现在提到 KubeDNS,其实默认指代的是 CoreDNS 项目。

# kubectl get deployment -n kube-system -o wide
NAME                      READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS                IMAGES                                                               SELECTOR
calico-kube-controllers   1/1     1            1           53d   calico-kube-controllers   docker.io/calico/kube-controllers:v3.22.1                            k8s-app=calico-kube-controllers
coredns                   2/2     2            2           53d   coredns                   registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.6   k8s-app=kube-dns

# kubectl get svc -n kube-system -o wide
NAME       TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE   SELECTOR
kube-dns   ClusterIP   10.96.0.10   <none>        53/UDP,53/TCP,9153/TCP   53d   k8s-app=kube-dns

集群中的每一个 Service(包括 DNS 服务本身)都将被分配一个 DNS name。格式为:<service_name>.<namespace>.svc.<cluster_domain>。cluster_domain默认为cluster.local。
每一个Pod创建时,都会在Pod的/etc/resolv.conf文件中,自动加入kube-dns service的domain name与相对应的IP地址。因此Pods可以透过名为kube-dns的service组件,找到正在运行的kube-dns。

3. 示例

根据附录1创建dnsutils pod,并按照DNS格式,尝试解析kube-dns(kube-system命名空间)和whoami-clusterip(default命名空间)。然后查看pod的域名解析文件/etc/resolv.conf中的内容,最后尝试在通过域名+端口号访问whoami-clusterip服务。

# 01 创建dnsutils pod
# kubectl apply -f dnsutils-pod.yaml

# 02 查询kube-dns服务域名解析
# kubectl get svc -n kube-system
NAME       TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE
kube-dns   ClusterIP   10.96.0.10   <none>        53/UDP,53/TCP,9153/TCP   53d

# kubectl exec dnsutils -- nslookup kube-dns.kube-system.svc.cluster.local
Server:     10.96.0.10
Address:    10.96.0.10#53

Name:   kube-dns.kube-system.svc.cluster.local
Address: 10.96.0.10

# 03 查询whoami-clusterip服务域名解析,是之前文章示例创建的
# kubectl get svc
NAME               TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
kubernetes         ClusterIP   10.96.0.1       <none>        443/TCP    53d
whoami-clusterip   ClusterIP   10.106.29.136   <none>        8080/TCP   16d

# kubectl exec dnsutils -- nslookup whoami-clusterip.default.svc.cluster.local
Server:     10.96.0.10
Address:    10.96.0.10#53

Name:   whoami-clusterip.default.svc.cluster.local
Address: 10.106.29.136

# 04 查看pod的域名解析文件, 10.96.0.10指向kube-dns的cluster ip
# kubectl exec dnsutils -- cat /etc/resolv.conf
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local www.tendawifi.com
options ndots:5

# 05在dnsutils pod中尝试访问whoami-clusterip服务
# a) 需要安装curl, 必要时需要修改成国内源,然后执行apt-get update。
# apt-get install curl

# b) 通过域名+端口,访问whoami-clusterip服务
# curl whoami-clusterip.default.svc.cluster.local:8080
I'm whoami-deployment-8886867c8-pc67z

附录

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

推荐阅读更多精彩内容