Kubernetes - 如何编辑 CoreDNS 核心文件配置映射?
Kubernetes - How to edit CoreDNS corefile configmap?
我有一个非常标准的 Kubernetes 运行 安装作为 Ubuntu 上的单节点集群。我正在尝试配置 CoreDNS 以解析我的 Kubernetes 集群中的所有内部服务和一些外部域名。到目前为止,我只是在试验。我首先创建了一个 busybox pod,如下所示:https://kubernetes.io/docs/tasks/administer-cluster/dns-debugging-resolution/
在我对核心文件进行更改之前,一切都按照指南中的描述进行。我发现了几个问题:
- 我使用
kubectl -n kube-system edit configmap coredns
编辑了默认核心文件,并将 .:53
替换为 cluster.local:53
。等待之后,事情看起来很有希望。 google.com
解析开始失败,而 kubernetes.default.svc.cluster.local
继续成功。但是,kubernetes.default
解析也开始失败。这是为什么?在 busybody pod 的 /etc/resolv.conf
中仍然有 svc.cluster.local
的 search 条目。所有改变的都是核心文件。
我尝试向核心文件添加一个额外的 stanza/block(同样,通过编辑配置映射)。我添加了一个简单的块:
.:53{
log
}
好像是核心文件编译失败什么的。 pods 看起来很健康,没有向日志报告任何错误,但所有请求都挂起并失败了。
我已尝试添加日志插件,但这不起作用,因为该插件仅适用于与插件匹配的域,并且域名不匹配或核心文件已损坏。
为了透明起见,这是我的新核心文件:
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
}
看起来您的 Corefile 在通过 "kubectl edit ..." 命令进行编辑的过程中以某种方式损坏了。可能是您的默认文本编辑器的问题,但绝对有效。
我建议您使用以下命令替换当前的配置映射:
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
$ kubectl -n kube-system edit configmaps coredns -o yaml
然后使用vi
编辑并保存coredns
configmap。保存后将应用更改。
kubectl get -n kube-system configmaps coredns -o yaml > core_dns.yaml
kubectl replace -n kube-system -f core_dns.yaml
我有一个非常标准的 Kubernetes 运行 安装作为 Ubuntu 上的单节点集群。我正在尝试配置 CoreDNS 以解析我的 Kubernetes 集群中的所有内部服务和一些外部域名。到目前为止,我只是在试验。我首先创建了一个 busybox pod,如下所示:https://kubernetes.io/docs/tasks/administer-cluster/dns-debugging-resolution/
在我对核心文件进行更改之前,一切都按照指南中的描述进行。我发现了几个问题:
- 我使用
kubectl -n kube-system edit configmap coredns
编辑了默认核心文件,并将.:53
替换为cluster.local:53
。等待之后,事情看起来很有希望。google.com
解析开始失败,而kubernetes.default.svc.cluster.local
继续成功。但是,kubernetes.default
解析也开始失败。这是为什么?在 busybody pod 的/etc/resolv.conf
中仍然有svc.cluster.local
的 search 条目。所有改变的都是核心文件。 我尝试向核心文件添加一个额外的 stanza/block(同样,通过编辑配置映射)。我添加了一个简单的块:
.:53{ log }
好像是核心文件编译失败什么的。 pods 看起来很健康,没有向日志报告任何错误,但所有请求都挂起并失败了。
我已尝试添加日志插件,但这不起作用,因为该插件仅适用于与插件匹配的域,并且域名不匹配或核心文件已损坏。
为了透明起见,这是我的新核心文件:
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
}
看起来您的 Corefile 在通过 "kubectl edit ..." 命令进行编辑的过程中以某种方式损坏了。可能是您的默认文本编辑器的问题,但绝对有效。
我建议您使用以下命令替换当前的配置映射:
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
$ kubectl -n kube-system edit configmaps coredns -o yaml
然后使用vi
编辑并保存coredns
configmap。保存后将应用更改。
kubectl get -n kube-system configmaps coredns -o yaml > core_dns.yaml
kubectl replace -n kube-system -f core_dns.yaml