配置自定义DNS服务

本文主要介绍如何在UK8S集群中,使用自定义的DNS服务。

从Kubernetes 1.11起,CoreDNS取代kube-dns成为默认的DNS方案,UK8S目前支持的Kubernetes版本>=1.11,因此本文主要介绍如何修改CoreDNS的配置以达到使用自定义DNS服务的目的。

简介

CoreDNS是一个模块化、插件式的DNS服务器,其配置文件信息保存在Corefile内。UK8S集群管理员可通过修改ConfigMap,来配置自定义DNS服务。

在UK8S中,CoreDNS的默认Corefile配置信息如下,

apiVersion: v1
kind: ConfigMap
data:
  Corefile: |
    .:53 {
        errors
        health
        kubernetes cluster.local. REVERSE_CIDRS {
          pods insecure
          upstream 
          fallthrough in-addr.arpa ip6.arpa
        }
        prometheus :9153
        proxy . /etc/resolv.conf
        cache 30
    }
metadata:
  name: coredns
  namespace: kube-system
  resourceVersion: "3082370"

上述yaml文件中,upstream选项用于解析位于集群外部的服务。而proxy则可以配置多个upstream服务器,如果upstream默认不指定,则所有集群外的域解析请求,都将直接指向proxy,此处默认配置是去查看/etc/resolv.conf中定义的域名服务器。

其他选项的意义请查看Kubernetes官方文档,下面我们举例说明下如何修改ConfigMap。

示例

为特殊域配置DNS服务器

假设我们有一个ucloudk8s的服务域,自建的私有DNS Server地址为10.9.10.8,则集群管理员可以执行kubectl edit configmap/coredns -n kube-system中添加如下所示的一段规则。

ucloudk8s.com:53 {
        errors
        cache 30
        proxy . 10.9.10.8
    }

并且,我们不希望使用/etc/resolv.conf里配置的DNS服务器作为上游服务器,而是指向自建的DNS Server,只需要直接修改之前提到的upstream和proxy选项即可

upstream 10.9.10.8
proxy .  172.16.0.1

修改完毕后的configmap如下:

apiVersion: v1
kind: ConfigMap
data:
  Corefile: |
    .:53 {
        errors
        health
        kubernetes cluster.local. REVERSE_CIDRS {
          pods insecure
          upstream 10.9.10.8
          fallthrough in-addr.arpa ip6.arpa
        }
        prometheus :9153
        proxy . 10.9.10.8
        cache 30
        }
    ucloudk8s.com:53 {
        errors
        cache 30
        proxy . 10.9.10.8
   }
metadata:
  name: coredns
  namespace: kube-system
  resourceVersion: "3082370"
如有疑问请联系 技术支持