Kubernetes-如何编辑CoreDNS corefile configmap?

时间:2019-06-19 21:17:29

标签: kubernetes dns kube-dns coredns

我有一个非常标准的Kubernetes安装,它在Ubuntu上作为单节点集群运行。我正在尝试配置CoreDNS来解析Kubernetes集群和某些外部域名中的所有内部服务。到目前为止,我只是在做实验。我首先创建了一个busybox窗格,如下所示:https://kubernetes.io/docs/tasks/administer-cluster/dns-debugging-resolution/

一切工作都按照指南中的描述进行,直到我对corefile进行更改。我看到了几个问题:

  1. 我使用kubectl -n kube-system edit configmap coredns编辑了默认的核心文件,并用.:53替换了cluster.local:53。等待之后,事情看起来很有希望。 google.com解决方案开始失败,而kubernetes.default.svc.cluster.local继续成功。但是,kubernetes.default解析也开始失败。这是为什么?在忙人窗格的svc.cluster.local中,/etc/resolv.conf仍然有一个搜索条目。更改的只是核心文件。
  2. 我试图向核心文件添加一个额外的节/块(同样,通过编辑配置映射)。我添加了一个简单的块:

    .:53{
        log
    }
    

    似乎corefile编译失败或其他错误。吊舱看起来很健康,不会向日志报告任何错误,但是所有请求都挂起并失败。

我尝试添加日志插件,但是由于该插件仅应用于与该插件匹配的域,并且域名不匹配或核心文件损坏,因此无法正常工作。

为了透明起见,这是我的新核心文件:

cluster.local:53 {
    errors
    log
    health
    kubernetes cluster.local in-addr.arpa ip6.arpa {
       pods insecure
       upstream
       fallthrough in-addr.arpa ip6.arpa
    }
    prometheus :9153
    forward . /etc/resolv.conf
    cache 30
    loop
    reload
    loadbalance
}

3 个答案:

答案 0 :(得分:1)

在通过“ kubectl edit ...”命令进行编辑时,您的Corefile似乎已损坏。可能是您默认的文本编辑器出了故障,但这绝对是有效的。

我建议您使用以下命令替换当前的配置映射:

kubectl get -n kube-system cm/coredns --export -o yaml | kubectl replace -n kube-system -f coredns_cm.yaml

#coredns_cm.yaml
apiVersion: v1
data:
  Corefile: |
    cluster.local:53 {
        log
        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
    }
kind: ConfigMap
metadata:
  creationTimestamp: null
  name: coredns

答案 1 :(得分:0)

$ kubectl -n kube-system edit configmaps coredns -o yaml

然后使用 vi 编辑并保存 coredns 配置映射。保存后,更改将被应用。

答案 2 :(得分:0)

kubectl get -n kube-system configmaps coredns -o yaml > core_dns.yaml
kubectl replace -n kube-system -f core_dns.yaml