k8s-coredns-CrashLoopBackOff 工作不正常

本文作者: slience_me


问题描述

c 复制代码
# 问题描述
# root@k8s-node1:/home/slienceme# kubectl get pods --all-namespaces
# NAMESPACE      NAME                                READY   STATUS             RESTARTS   AGE
# kube-flannel   kube-flannel-ds-66bcs               1/1     Running            0          12h
# kube-flannel   kube-flannel-ds-ntwwx               1/1     Running            0          12h
# kube-flannel   kube-flannel-ds-vb6n9               1/1     Running            5          12h
# kube-system    coredns-7f9c544f75-67njd            0/1     CrashLoopBackOff   17         12h   // [!code focus:8]
# kube-system    coredns-7f9c544f75-z82nl            0/1     CrashLoopBackOff   17         12h
# kube-system    etcd-k8s-node1                      1/1     Running            4          12h
# kube-system    kube-apiserver-k8s-node1            1/1     Running            4          12h
# kube-system    kube-controller-manager-k8s-node1   1/1     Running            3          12h
# kube-system    kube-proxy-fs2p6                    1/1     Running            0          12h
# kube-system    kube-proxy-x7rkp                    1/1     Running            0          12h
# kube-system    kube-proxy-xpbvt                    1/1     Running            3          12h
# kube-system    kube-scheduler-k8s-node1            1/1     Running            3          12h
# kube-system    tiller-deploy-6ffcfbc8df-mzwd7      1/1     Running            0          39m

原因分析:

在 CoreDNS 的配置文件 (Corefile) 中,forward 插件不应该指向 CoreDNS 本身,否则会导致 DNS 请求循环。如果 forward 指向 CoreDNS,它会不断地将请求转发回自己,造成无限循环。

通过对问题的追踪,在github issue找到 CoreDNS pod goes to CrashLoopBackOff State

解决方案:

你需要修改 Kubernetes 中的 CoreDNS 配置,具体操作步骤如下:

步骤 1: 修改 CoreDNS 配置ConfigMap

bash 复制代码
kubectl edit configmap coredns -n kube-system

步骤 2: 修改 Corefile 配置

修改 Corefile 中的 forward 配置,当前配置为:

yaml 复制代码
forward . /etc/resolv.conf

你需要将其修改为指向外部 DNS 服务器,比如 Google 的公共 DNS 服务器 8.8.8.81.1.1.1(Cloudflare DNS)。例如,你可以修改为:

yaml 复制代码
forward . 8.8.8.8

或者如果你希望使用多个 DNS 服务器,可以配置多个地址:

yaml 复制代码
forward . 8.8.8.8 8.8.4.4

步骤 3: 保存并退出

步骤 4: 验证配置生效

验证 CoreDNS 配置是否生效,可以查看 CoreDNS Pod 是否正常运行,并且配置是否正确生效。

bash 复制代码
kubectl get pods -n kube-system -l k8s-app=kube-dns

如果需要,也可以重启 CoreDNS Pods,以确保新的配置生效:

bash 复制代码
kubectl rollout restart deployment coredns -n kube-system

通过这些步骤,你就能避免 CoreDNS 发生循环请求,确保 DNS 请求被转发到外部的 DNS 服务器,而不是 CoreDNS 本身。

相关推荐
Patrick_Wilson2 小时前
写给前端的 K8s 入门:用一张图和一个例子搞懂 5 个核心概念
云原生·kubernetes·devops
凌睿马3 小时前
离线的银河麒麟系统部署ollama
云原生·eureka
java1234_小锋3 小时前
【吊打面试官系列-ZooKeeper面试题】zookeeper 是如何保证事务的顺序一致性的?
分布式·zookeeper·云原生
my19587021353 小时前
ZooKeeper分布式协调从入门到实战
分布式·zookeeper·云原生
oioihoii3 小时前
ZooKeeper 三节点集群部署:别再单机玩,高可用强一致集群这样搭
分布式·zookeeper·云原生
云游牧者5 小时前
K8S-Helm包管理全解-从入门到Chart开发实战指南
云原生·容器·kubernetes·helm·chart模板
codeejun5 小时前
每日一Go-66、K8s 蓝绿发布 & 金丝雀发布实战:Service 切流量 + Ingress 灰度一次讲透
开发语言·golang·kubernetes
口喜口喜5 小时前
K3s 安装笔记(CentOS 7.9)
kubernetes
Elastic 中国社区官方博客6 小时前
一个查询,无限 Elasticsearch Serverless 项目:跨项目搜索介绍
大数据·elasticsearch·搜索引擎·信息可视化·云原生·serverless·全文检索
思诺学长6 小时前
从0理解Feed流系统:技术原理、架构设计与实战指南
云原生