Kubernetes1.6中配置私有 DNS 区域以及上级域名服务
2017-05-04 16:28
381 查看
很多用户都有自己的域名区域,并且希望能够集成到 Kubernetes DNS 的命名空间去。例如混合云用户可能希望能在集群内解析他们内部的 “.corp” 。其他用户用户可能有一个受非
Kubernetes 管理的服务发现系统(例如 Consul)。我们在 Kubernetes 1.6 中推出了新功能,可配置私有 DNS 区域(通常称为存根域)以及外部的上级域名服务,本文将会讲解如何使用这一功能。
Kubernetes 目前在 Pod 定义中支持两个 DNS 策略:
如果
Pod 所在节点继承而来。注意,本文所述功能在
如果
查询会被发送到 kube-dns 服务。kube-dns 服务负责相应以集群域名为后缀(例如
)会被转发给来自节点定义的上级域名服务器。
在这一功能推出之前,通常需要利用替换上级 DNS 为自定义解析的方式来完成存根域查询。然而这就使得这个自定义域名解析器成为 DNS 解析过程中的一个高风险因素。本功能让用户能够无需对整个 DNS 路径进行改造就完成自定义解析过程。
从 Kubernetes 1.6 开始,集群管理员能够利用 ConfigMap 指定自定义的存根域以及上级 NameServer。下文的配置包含一个存根域和两个上级域名服务器。对域名后缀为
1.2.3.4 的 DNS 服务。另外会把 Google 公共 DNS 作为上级服务器。注意本节末尾对 ConfigMap 中的数据格式进行的解释。
下图显示了配置中所指示的 DNS 查询过程。当
查询首先被发送到 kube-dns 的 DNS 缓存层。从这里开始检查域名后缀,然后发送到指定的 DNS。在本例中,集群后缀的域名(
kube-dns,最后不符合上面后缀的其他查询被转发到上级 DNS 去进行解析。
下文表格用来说明域名解析的过程:
格式:一个 JSON 编码的 Map 格式,其 Key 为 DNS 后缀(也就是
JSON 数组,代表一组 DNS IP。
注意:目标域名服务器也可以是 Kuernetes 服务。例如可以用 dnsmasq 把自定义 DNS 导出到 ClusterDNS 的命名空间中。
格式:一个 DNS IP 组成的 JSON 数组。
注意:如果指定了这个值,那么从节点的
限制:最多可以指定三个。
这个例子中,用户希望把 Consul DNS 服务集成到 kube-dns。Consul 服务位于
管理员简单的创建一个
这个例子中,集群管理员希望所有的集群外 DNS 查询由
Kubernetes 管理的服务发现系统(例如 Consul)。我们在 Kubernetes 1.6 中推出了新功能,可配置私有 DNS 区域(通常称为存根域)以及外部的上级域名服务,本文将会讲解如何使用这一功能。
Kubernetes 目前在 Pod 定义中支持两个 DNS 策略:
Default和
ClusterFirst,
dnsPolicy缺省为
ClusterFirst:
如果
dnsPolicy设置为
Default,那么域名解析配置会从
Pod 所在节点继承而来。注意,本文所述功能在
dnsPolicy设置为
Default时无效。
如果
dnsPolicy设置为
ClusterFirst,DNS
查询会被发送到 kube-dns 服务。kube-dns 服务负责相应以集群域名为后缀(例如
.cluster.local)的查询。其他的域名查询(例如 www.kubernetes.io
)会被转发给来自节点定义的上级域名服务器。
在这一功能推出之前,通常需要利用替换上级 DNS 为自定义解析的方式来完成存根域查询。然而这就使得这个自定义域名解析器成为 DNS 解析过程中的一个高风险因素。本功能让用户能够无需对整个 DNS 路径进行改造就完成自定义解析过程。
自定义 DNS 流程
从 Kubernetes 1.6 开始,集群管理员能够利用 ConfigMap 指定自定义的存根域以及上级 NameServer。下文的配置包含一个存根域和两个上级域名服务器。对域名后缀为.aceme.local的查询会被发送到地址为
1.2.3.4 的 DNS 服务。另外会把 Google 公共 DNS 作为上级服务器。注意本节末尾对 ConfigMap 中的数据格式进行的解释。
apiVersion: v1 kind: ConfigMap metadata: name: kube-dns namespace: kube-system data: stubDomains: | {"acme.local": ["1.2.3.4"]} upstreamNameservers: | ["8.8.8.8", "8.8.4.4"]
下图显示了配置中所指示的 DNS 查询过程。当
dnsPolicy设置为
ClusterFirst时,DNS
查询首先被发送到 kube-dns 的 DNS 缓存层。从这里开始检查域名后缀,然后发送到指定的 DNS。在本例中,集群后缀的域名(
.cluster.local),被发送到
kube-dns,最后不符合上面后缀的其他查询被转发到上级 DNS 去进行解析。
下文表格用来说明域名解析的过程:
域名 | 解析服务 |
---|---|
kubernetes.default.svc.cluster.local | kube-dns |
foo.acme.local | 自定义 DNS(1.2.3.4) |
widget.com | 上级 DNS(8.8.8.8 和 8.8.4.4)中的一个 |
ConfigMap 配置说明
stubDomains(可选)
格式:一个 JSON 编码的 Map 格式,其 Key 为 DNS 后缀(也就是
acme.local),值是一个
JSON 数组,代表一组 DNS IP。
注意:目标域名服务器也可以是 Kuernetes 服务。例如可以用 dnsmasq 把自定义 DNS 导出到 ClusterDNS 的命名空间中。
upstreamNameservers
格式:一个 DNS IP 组成的 JSON 数组。
注意:如果指定了这个值,那么从节点的
/etc/resolv.conf继承过来的值就会被覆盖。
限制:最多可以指定三个。
例 1:添加一个 Consul DNS 存根域
这个例子中,用户希望把 Consul DNS 服务集成到 kube-dns。Consul 服务位于10.150.0.1,所有的 consul 命名后缀都是
.consul.local。Kubernetes
管理员简单的创建一个
ConfigMap对象就可以完成。注意:本例中管理员不想覆盖节点的上级 DNS 定义,所以不需要指定
upstreamNameservers:
apiVersion: v1 kind: ConfigMap metadata: name: kube-dns namespace: kube-system data: stubDomains: | {"consul.local": "10.150.0.1"}
例 2:替换上级 Nameserver
这个例子中,集群管理员希望所有的集群外 DNS 查询由172.16.0.1的服务来完成,同样的用一个 ConfigMap 完成:
apiVersion: v1 kind: ConfigMap metadata: name: kube-dns namespace: kube-system data: upstreamNameservers: | ["172.16.0.1"]
相关文章推荐
- 在 Kubernetes(1.6)中配置私有 DNS 区域以及上级域名服务
- Kubernetes 1.6新特性系列|在Kubernetes里配置私有DNS区域和上游服务器
- DNS(域名系统)提供的服务以及工作机制
- DNS服务原理及区域解析库文件配置
- DNS高速缓存以及DDNS动态域名服务配置
- 简单ip配置以及dns服务
- 使用RHEL5.5配置DNS服务,实现主辅DNS服务器同步以及DNS转发服务器的配置
- RHEL6上配置DNS服务以及主从复制
- Windows server 2003 关于DNS的配置以及区域复制测试
- windows上 nginx 配置代理服务,配置多域名,以及最简单实现跨域配置
- 脚本自动实现DNS服务各区域配置文件
- Linux基础服务_DNS原理以及正反向DNS配置
- Lincx下配置IP地址,网卡,DNS服务 以及IP地址的基础知识
- Windows server 2003 关于DNS的配置以及区域复制测试..
- DNS高速缓存以及DDNS动态域名服务的配置
- linux平台搭建DNS域名服务与常用配置
- DNS服务器:主要介绍DNS的服务原理以及安装及其主从配置
- DNS域名服务 BIND (中)——BIND配置文件
- 脚本自动实现DNS服务各区域配置文件
- linux 系统之DNS高速缓存以及DDNS动态域名服务的配置