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 本身。

相关推荐
江湖有缘3 小时前
【Docker管理工具】部署Docker管理面板DweebUI
运维·docker·容器
慌ZHANG5 小时前
云原生微服务架构演进之路:理念、挑战与实践
微服务·云原生·架构
炎码工坊5 小时前
云原生安全基石:Kubernetes 核心概念与安全实践指南
云原生·kubernetes
黄雪超5 小时前
JVM——云原生时代JVM的演进之路
java·jvm·云原生
小钱c76 小时前
MacOS安装Docker Desktop并汉化
macos·docker·容器
笨小蛙6 小时前
服务器Docker容器创建与VScode远程连接SSH使用
服务器·vscode·docker·容器·ssh
蓝色的猴子7 小时前
Linux.docker.k8s基础概念
linux·docker·kubernetes
斯普信云原生组7 小时前
K8S集群主机网络端口不通问题排查
网络·容器·kubernetes
matrixlzp7 小时前
K8S StatefulSet 快速开始
云原生·容器·kubernetes
AKAMAI8 小时前
使用Akamai分布式云与CDN保障视频供稿传输安全
后端·云原生·云计算