kubernetes - Kubernetes 不会从没有 FQDN 的不同命名空间解析 Pod
问题描述
假设我们有两个命名空间namespace-a
和namespace-b
.
Podpod-name
在 a 中运行Deployment
并在内部作为Service
service-name
via ClusterIP
on暴露namespace-a
。Kubernetes 1.17 集群有一个集群域名cluster-domain
。cluster-domain
不是默认cluster.local
值。
另一个 Pod尝试解析batman
.namespace-b
pod-name
- 以下作品来自
batman
:ping/telnet pod-name.service-name.namespace-a.svc.cluster-domain
- 以下不适用于
batman
:ping/telnet pod-name.service-name.namespace-a.svc
但是,如果batman
正在运行namespace-a
: 3. 以下确实适用于batman
:ping/telnet pod-name.service-name.namespace-a.svc
这与DNS配置有关吗?这是它应该如何工作的吗?我找不到任何关于这个问题的具体材料。
解决方案
据我所知,这是它应该如何工作的。
我可以推荐阅读Debugging DNS Resolution,您可以在其中找到是否正在接收/处理 DNS 查询
log
您可以通过将插件添加到 CoreDNS 配置(又名 Corefile)来验证 CoreDNS 是否正在接收查询 。CoreDNS 核心文件保存在名为coredns
. 要编辑它,请使用命令...</p>
kubectl -n kube-system edit configmap coredns
然后
log
按照下面的示例添加 Corefile 部分。
apiVersion: v1
kind: ConfigMap
metadata:
name: coredns
namespace: kube-system
data:
Corefile: |
.: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
}
保存更改后,Kubernetes 可能需要一两分钟才能将这些更改传播到 CoreDNS pod。
接下来,根据本文档的上述部分进行一些查询并查看日志。如果 CoreDNS pod 正在接收查询,您应该在日志中看到它们。
您还可以检查服务和 Pod 的DNS和自定义 DNS 服务。
推荐阅读
- css - 未找到这些依赖项
- javascript - 为 React 测试添加酶后,所有测试均失败
- html - 在创建响应式网站时,我应该尽量避免使用像素作为文本大小和 div 吗?
- c++ - 条件语句简化 - C++
- javascript - 如何在 Angular 中使用 Jasmine 和 Karma 检查段落的 innerHTML 内容
- java - 如何在 Windows 10 中运行 java 类文件
- powershell - 访问嵌套属性
- google-cloud-platform - 合并 DML 扫描的 BigQuery 限制行数
- python - 为什么我们在下面使用 shape=((None,)+image_shape) 是什么意思?
- php - 数组唯一使项目消失