Kubernetes 服务 ping 不时不工作“名称解析暂时失败”

问题描述

我在同一个命名空间中有两个独立的集群(应用程序和数据库)。数据库集群的 Statefulset 和应用程序集群的部署。对于内部通信,我配置了 Headless Service。当我从应用程序集群中的一个 pod ping 到它工作的服务时(反过来工作 - DB pod to service 工作)。但有时,例如,如果我连续执行 ping 命令 3 次,第三次它会出现错误 - “ping:: 名称解析临时失败”。为什么会发生这种情况?

解决方法

据我所知,这通常是名称解析错误,表明您的 DNS 服务器无法将域名解析为各自的 IP 地址。这可能是一个严峻的挑战,因为您将无法在 Linux 系统上更新、升级甚至安装任何软件包。这里我列举了几个原因

1.忘记配置或错误配置resolv.conf文件

/etc/resolv.conf 文件是 Linux 系统中的解析器配置文件。它包含帮助您的 Linux 系统将域名解析为 IP 地址的 DNS 条目。

如果此文件不存在或存在但您仍然遇到名称解析错误,请创建一个并将 Google 公共 DNS 服务器附加为 nameserver 8.8.8.8

保存更改并重新启动 systemd-resolved 服务,如图所示。

$ sudo systemctl restart systemd-resolved.service

检查解析器的状态并确保它处于活动状态并按预期运行也是明智的:

$ sudo systemctl status systemd-resolved.service

2.由于防火墙限制

如果第一个解决方案对您不起作用,防火墙限制可能会阻止您成功执行 DNS 查询。检查您的防火墙并确认端口 53(用于 DNS – 域名解析)和端口 43 是否已打开。如果端口被阻止,请按如下方式打开它们:

对于 UFW 防火墙(Ubuntu / Debian 和 Mint) 要在 UFW 防火墙上打开端口 53 和 43,请运行以下命令:

$ sudo ufw allow 43/tcp
$ sudo ufw reload```
For firewalld (RHEL / CentOS / Fedora)
For Redhat based systems such as CentOS,invoke the commands below:

```$ sudo firewall-cmd --add-port=53/tcp --permanent
$ sudo firewall-cmd --add-port=43/tcp --permanent
$ sudo firewall-cmd --reload

我希望您现在对“名称解析暂时失败”错误有所了解。我还发现了一个类似的 git 问题,希望对您有所帮助

https://github.com/kubernetes/kubernetes/issues/6667

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...