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 与后端服务通信。

  1. 创建后端服务。

    1. 部署后端 pod。

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: backend-deployment
        labels:
          app: backend
      spec:
        replicas: 3
        selector:
          matchLabels:
            app: backend
        template:
          metadata:
            labels:
              app: backend
          spec:
            containers:
              - name: backend-container
                image: your-backend-image
                ports:
                  - containerPort: 8080
      Copy to Clipboard Toggle word wrap
    2. 定义服务以公开后端容器集。

      apiVersion: v1
      kind: Service
      metadata:
        name: backend-service
      spec:
        selector:
          app: backend
        ports:
          - protocol: TCP
            port: 80
            targetPort: 8080
      Copy to Clipboard Toggle word wrap
  2. 创建前端 pod。

    1. 定义前端 pod。

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: frontend-deployment
        labels:
          app: frontend
        spec:
          replicas: 3
          selector:
          matchLabels:
            app: frontend
         template:
         metadata:
           labels:
             app: frontend
         spec:
           containers:
             - name: frontend-container
               image: your-frontend-image
               ports:
                 - containerPort: 80
      Copy to Clipboard Toggle word wrap
    2. 将 pod 定义应用到集群。

      $ oc apply -f frontend-deployment.yaml
      Copy to Clipboard Toggle word wrap
  3. 配置前端以与后端通信。

    在您的前端应用程序代码中,使用后端服务的 DNS 名称来发送请求。例如,如果您的前端应用程序需要从后端 pod 获取数据,则您的应用程序可能会包括以下代码:

    fetch('http://backend-service.default.svc.cluster.local/api/data')
      .then(response => response.json())
      .then(data => console.log(data));
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat