1.6. 域名系统(DNS)
域名系统(DNS)是一个分层命名系统,用于将用户友好的域名(如 www.example.com)转换为标识网络中计算机的 IP 地址。DNS 在服务发现和名称解析方面扮演重要角色。
OpenShift Container Platform 提供了一个内置的 DNS,以确保可通过 DNS 名称访问服务。这有助于维护稳定的通信,即使底层 IP 地址有变化。当您启动 pod 时,会自动创建服务名称、IP 地址和端口的环境变量,以便 pod 与其他服务通信。
1.6.1. 主要 DNS 术语 复制链接链接已复制到粘贴板!
- CoreDNS:CoreDNS 是 DNS 服务器,为服务和 pod 提供名称解析。
-
DNS 名称 :服务根据其命名空间和名称分配 DNS 名称。例如,在
default
命名空间中名为my-service
的服务将具有 DNS 名称my-service.default.svc.cluster.local
。 -
域名:域名是用于访问网站和服务(如
example.com
)的用户友好名称。 -
IP 地址:IP 地址是分配给连接到使用 IP 进行通信的计算机网络的每个设备的数字标签。IPv4 地址的示例是
192.0.2.1
。一个 IPv6 地址的示例为2001:0db8:85a3:0000:0000:8a2e:0370:7334
。 - DNS 服务器:DNS 服务器是存储 DNS 记录的专用服务器。这些记录将域名映射到 IP 地址。当您在浏览器中输入域名时,您的计算机会联系 DNS 服务器来查找对应的 IP 地址。
-
解析过程:将 DNS 查询发送到 DNS 解析器。DNS 解析器随后联系一系列 DNS 服务器,以查找与域名关联的 IP 地址。解析器将尝试使用带有一系列域的名称,如
<namespace>.svc.cluster.local
,svc.cluster.local
, 和cluster.local
。这个过程会在第一个匹配项中停止。IP 地址返回到浏览器,然后使用 IP 地址连接到 Web 服务器。
1.6.2. 示例:DNS 用例 复制链接链接已复制到粘贴板!
在本例中,前端应用在一组 pod 中运行,后端服务在另一组 pod 中运行。前端应用需要与后端服务通信。您可以为后端 pod 创建服务,为其提供稳定的 IP 地址和 DNS 名称。前端 pod 使用此 DNS 名称来访问后端服务,而不考虑各个 pod IP 地址的更改。
通过为后端 pod 创建服务,您可以提供一个稳定的 IP 和 DNS 名称 backend-service.default.svc.cluster.local
,前端 pod 可用于与后端服务通信。此设置可确保即使单个 pod IP 地址有变化,通信仍保持一致且可靠。
以下步骤演示了如何配置前端 pod 以使用 DNS 与后端服务通信。
创建后端服务。
部署后端 pod。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 定义服务以公开后端容器集。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建前端 pod。
定义前端 pod。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 pod 定义应用到集群。
oc apply -f frontend-deployment.yaml
$ oc apply -f frontend-deployment.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
配置前端以与后端通信。
在您的前端应用程序代码中,使用后端服务的 DNS 名称来发送请求。例如,如果您的前端应用程序需要从后端 pod 获取数据,则您的应用程序可能会包括以下代码:
fetch('http://backend-service.default.svc.cluster.local/api/data') .then(response => response.json()) .then(data => console.log(data));
fetch('http://backend-service.default.svc.cluster.local/api/data') .then(response => response.json()) .then(data => console.log(data));
Copy to Clipboard Copied! Toggle word wrap Toggle overflow