从 kube-dns 迁移至 CoreDNS

Kubernetes 中从 kube-dns 迁移至 CoreDNS 的指南

CoreDNS 当前是 Kubernetes 中的一个 Beta 功能,在升级至 Kubernetes 1.11 的途中有望成为 通用可用性 (GA) 功能。这表示 CoreDNS 将作为标准功能通过安装工具包(例如 kubeadm、kube-up、minikube 和 kops)在 Kubernetes 中提供。

在使用各种工具启动 Kubernetes 集群时,本文档将指导您将 DNS 服务从 CoreDNS 迁移至 kube-dns。

通过 Kubeadm 安装 CoreDNS

有一个扩展指南,说明如何通过 Kubeadm 安装 CoreDNS 而不用 kube-dns,可在此处获得 链接。从 Kubernetes v1.10 开始,CoreDNS 支持将 kube-dns ConfigMap 转换至 CoreDNS ConfigMap。也就是说,如果您已通过 kube-dns ConfigMap 配置了 stubdomainsupstreamnameserversfederation,那么在选择使用 kubeadm upgrade 安装 CoreDNS 时,它将自动转换为相应的 CoreDNS ConfigMap。

kube-dns 中的 Stubdomainupstreamnameserver 转换为 CoreDNS 中 proxy。kube-dns 中的 federation 对应于 CoreDNS 中的 federation

kube-dns 的 ConfigMap 示例。

apiVersion: v1
data:
  federations: |
    {"foo" : "foo.feddomain.com"}
  stubDomains: |
    {"abc.com" : ["1.2.3.4"], "my.cluster.local" : ["2.3.4.5"]}
  upstreamNameservers: |
    ["8.8.8.8", "8.8.4.4"]
kind: ConfigMap
metadata:
  creationTimestamp: 2018-01-22T20:21:56Z
  name: kube-dns
  namespace: kube-system

转换后的 CoreDNS Corefile。

   .:53 {
        errors
        health
        kubernetes cluster.local  in-addr.arpa ip6.arpa {
           upstream  8.8.8.8 8.8.4.4
           pods insecure
           fallthrough in-addr.arpa ip6.arpa
        }
        federation cluster.local {
           foo foo.feddomain.com
        }
        prometheus :9153
        proxy .  8.8.8.8 8.8.4.4
        cache 30
    }
    abc.com:53 {
        errors
        cache 30
        proxy . 1.2.3.4
    }
    my.cluster.local:53 {
        errors
        cache 30
        proxy . 2.3.4.5
    }

通过 Minikube 安装 CoreDNS。

CoreDNS 可在 addon manager 中使用,且默认情况下处于禁用状态。

$ minikube addons list
- kube-dns: enabled
- registry: disabled
- registry-creds: disabled
- freshpod: disabled
- addon-manager: enabled
- dashboard: enabled
- coredns: disabled
- heapster: disabled
- efk: disabled
- ingress: disabled
- default-storageclass: enabled
- storage-provisioner: enabled

要启用 CoreDNS,请运行以下命令

注意:在启用 CoreDNS 之后,务必禁用 kube-dns。否则,如果 CoreDNS 和 kube-dns 同时运行,则查询可能会随机命中 CoreDNS 或 kube-dns。

$ minikube addons enable coredns
coredns was successfully enabled

kube-up 中的 CoreDNS

Kube-up 是启动 Kubernetes 集群的另一种方式,现在主要用于在 GCE 中部署 Kubernetes 以用于端到端 (e2e) 测试。需要环境变量 ENABLE_CLUSTER_DNS(默认值为 true)才能安装 DNS 服务。如果将 CoreDNS 安装为默认 DNS 服务,则需要将环境变量 CLUSTER_DNS_CORE_DNS 设置为 true

Kops 中的 CoreDNS

目前,Kops v1.10 已设置为包括 CoreDNS,作为安装选项,而不使用 kube-dns。为了安装 CoreDNS 而不是 kube-dns,我们需要 在 Kops 的集群 yaml 配置 中将 provider 指定为 CoreDNS

spec:
  kubeDNS:
    provider: CoreDNS

这将安装 CoreDNS 而不是 kube-dns。

通过其他方法安装 CoreDNS

对于渴望安装 CoreDNS 以替代 kube-dns 但不使用 kubeadmminikubekube-upkops 的用户,CoreDNS 部署存储库 提供了说明,其中内容可以帮助您从 kube-dns 迁移到 CoreDNS。在部署 CoreDNS 后,用户应该删除 kube-dns 部署。否则,如果 CoreDNS 和 kube-dns 同时运行,查询可能会随机打到 CoreDNS 或 kube-dns。

Sandeep Rajan
发布:并标记了发现DNS文档Kube-DNSKubernetes迁移服务,使用了 524 个单词。