kubernetes - k8s中不同命名空间中服务的DNS名称是什么?
问题描述
在命名空间 A 中,我有一个服务nginx
正在运行。在命名空间 B 中,我可以使用nginx.A
或nginx.A.svc.cluster.local
访问nginx
命名空间 A 中的。
那么这两者有什么区别呢?哪个更推荐?为什么?
解决方案
这两种形式都被认为是正确的(与本文相比)并且在大多数情况下都可以正常工作,但是当人们遇到一些仅与短名称解析相关的问题时,我可以在github上找到一些问题,例如:
https://github.com/kubernetes/dns/issues/109
https://github.com/kubernetes/kubernetes/issues/10014
正如您在Kubernetes官方文档(ref1、ref2)中所读到的,它建议使用长格式以防跨命名空间访问服务:
创建服务时,它会创建相应的 DNS 条目。此条目的形式为
<service-name>.<namespace-name>.svc.cluster.local
,这意味着如果容器仅使用<service-name>
,它将解析为名称空间本地的服务。这对于跨多个命名空间(例如 Development、Staging 和 Production)使用相同的配置很有用。如果要跨命名空间进行访问,则需要使用完全限定域名 (FQDN)。
在我看来,坚持FQDN(完全合格的域名)标准要好得多,而且通常明确被认为是比隐含更好的做法。
推荐阅读
- javascript - 循环进度条 - 箭头类型
- selenium - selenium 测试自动化,IE11 无法使用富文本元素访问
- apache - http2和http1请求的cpu使用比较
- python - 矩阵矩阵乘法的 CPU 时间
- python - 使用 axhline 时删除了 Matplotlib y 轴刻度
- c++ - 在头文件中声明和定义且仅在其 cpp 文件中使用的变量的多重定义错误
- authentication - 在 OWIN 中共享旧的 FormsAuthentication cookie
- vhdl - 使用 QuestaSim 编译 VHDL 时警告“范围选择方向不能确定聚合索引范围方向”
- node.js - nodejs 将对象导出到特定程序
- powershell - powershell 调用命令不处理 try-cache 块