DNS概述

DNS为Kubernetes集群内的工作负载提供域名解析服务。本文主要介绍Kubernetes集群中DNS域名解析原理和ACS集群中默认内置的DNS服务器CoreDNS。

Kubernetes集群中DNS域名解析原理

ACS集群中kubelet的启动参数有--cluster-dns=<dns-service-ip>--cluster-domain=<default-local-domain>,这两个参数分别被用来设置集群DNS服务器的IP地址和主域名后缀。

ACS集群默认部署了一套CoreDNS工作负载,并通过kube-dns的服务名暴露DNS服务。ACS部署的CoreDNS工作负载后端是两个名为coredns的Pod,集群会根据Pod内的配置,将域名请求发往集群DNS服务器获取结果。Pod内的DNS域名解析配置文件为/etc/resolv.conf,文件内容如下。

nameserver 172.xx.x.xx
search kube-system.svc.cluster.local svc.cluster.local cluster.local
options ndots:5

图 1. DNS解析原理示例图kube-dns(CoreDNS)域名解析图

序号

描述

业务Pod(Pod Client)试图访问Nginx服务(Service Nginx)时,先会请求本地DNS配置文件(/etc/resolv.conf)中指向的DNS服务器(nameserver 172.21.0.10,即Service kube-dns)获取服务IP地址,得到解析结果为172.21.0.30的IP地址。

业务Pod(Pod Client)再直接发起往该IP地址的请求,请求最终经过Nginx服务(Service Nginx)转发到达后端的Nginx容器(Pod Nginx-1和Pod Nginx-2)上。

关于集群DNS域名解析原理的详细说明,请参见DNS原理和配置说明

CoreDNS介绍

CoreDNS是Kubernetes集群中负责DNS解析的组件,能够支持解析集群内部自定义服务域名和集群外部域名。CoreDNS具备丰富的插件集,在集群层面支持自建DNS、自定义hosts、CNAME、rewrite等需求。与Kubernetes一样,CoreDNS项目由 CNCF托管。

ACS集群使用CoreDNS负责集群的服务发现,您可以根据不同使用场景配置CoreDNS及使用CoreDNS提升集群DNS QPS性能: