coredns 自定义解析域名
介绍
CoreDNS部署作为具有静态IP的Kubernetes服务公开。CoreDNS和kube-dns服务都kube-dns
在该metadata.name
字段中命名。这样做可以使依赖于旧kube-dns
服务名称的工作负载具有更强的互操作性,以解析集群内部的地址。它抽象出了DNS提供程序在该公共端点后面运行的实现细节。kubelet将DNS传递给带有--cluster-dns=<dns-service-ip>
标志的每个容器。
DNS名称也需要域名。您可以使用标志在kubelet中配置本地域--cluster-domain=<default-local-domain>
。
DNS服务器支持正向查找(A记录),端口查找(SRV记录),反向IP地址查找(PTR记录)等。有关更多信息,请参阅服务和Pod的DNS。
自定义DNS服务
CoreDNS是一个通用的权威DNS服务器,可以作为集群DNS,符合dns规范。
CoreDNS ConfigMap选项
CoreDNS是一个模块化和可插拔的DNS服务器,每个插件都为CoreDNS添加了新功能。这可以通过维护Corefile来配置,Corefile是CoreDNS配置文件。集群管理员可以修改CoreDNS Corefile的ConfigMap以更改服务发现的工作方式。
在Kubernetes中,CoreDNS安装了以下默认的Corefile配置。
apiVersion: v1
kind: ConfigMap
metadata:
name: coredns
namespace: kube-system
data:
Corefile: |
.:53 {
errors
health
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
upstream
fallthrough in-addr.arpa ip6.arpa
}
prometheus :9153
proxy . /etc/resolv.conf
cache 30
loop
reload
loadbalance
}
Upstream
用于解析指向外部主机的服务(外部服务)。
- prometheus:CoreDNS的度量标准可以在http:// localhost:9153 / Prometheus格式的指标中找到。
- proxy:任何不在Kubernetes集群域内的查询都将转发到预定义的解析器(/etc/resolv.conf)。
- cache:这将启用前端缓存。
- loop:检测简单的转发循环,如果找到循环则停止CoreDNS进程。
- reload:允许自动重新加载已更改的Corefile。编辑ConfigMap配置后,请等待两分钟以使更改生效。
- loadbalance:这是一个循环DNS负载均衡器,可以在答案中随机化A,AAAA和MX记录的顺序。
有时我们需要使Pod内解析特定域名.consul.local, 此时可以在CoreDNS中配置它。 明确强制所有非集群DNS查找要经过特定的名称服务器(nameserver)而不是/etc/resolv.conf
proxy . 172.16.0.1
upstream 172.16.0.1
最终的ConfigMap以及默认Corefile
配置如下所示:
apiVersion: v1
kind: ConfigMap
metadata:
name: coredns
namespace: kube-system
data:
Corefile: |
.:53 {
errors
health
hosts {
10.222.111.232 e34574cedpd.redis.rds.aliyuncs.com
fallthrough
}
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
upstream 172.16.0.1
fallthrough in-addr.arpa ip6.arpa
}
prometheus :9153
proxy . 172.16.0.1
cache 30
loop
reload
loadbalance
}
consul.local:53 {
errors
cache 30
proxy . 10.150.0.1
}