搜索

17.2. 为外部数据库定义服务

download PDF

最常见的外部服务类型是外部数据库。要支持外部数据库,应用程序需要:

  1. 一个要与之通信的端点。
  2. 一组凭证和协调,包括:

    • 用户名
    • 密码短语
    • 数据库名称

与外部数据库集成的解决方案包括:

  • 一个 Service 对象,它将 SaaS 供应商表示为 OpenShift Container Platform 服务。
  • 服务的一个或多个端点
  • 含有凭据的适当 pod 中的环境变量。

下列步骤概述了与外部 MySQL 数据库集成的情况:

17.2.1. 第 1 步:定义服务

您可以通过提供 IP 地址和端点来定义服务,或者提供完全限定域名(FQDN)。

17.2.1.1. 使用 IP 地址

  1. 创建一个 OpenShift Container Platform 服务来 代表您的外部数据库。这与创建内部服务类似,差异在服务的 Selector 字段中。

    内部 OpenShift Container Platform 服务使用 Selector 字段,通过 标签 将 pod 与服务关联。EndpointsController 系统组件将指定选择器的服务端点与与选择器匹配的 pod 同步。服务代理和 OpenShift Container Platform 路由器在服务端点之间对服务进行负载均衡。

    代表外部资源的服务不需要关联的 pod。相反,请保留 Selector 字段未设置。这代表了外部服务,使 EndpointsController 忽略该服务并允许手动指定端点:

      kind: "Service"
      apiVersion: "v1"
      metadata:
        name: "external-mysql-service"
      spec:
        ports:
          -
            name: "mysql"
            protocol: "TCP"
            port: 3306
            targetPort: 3306 1
            nodePort: 0
      selector: {} 2
    1
    可选:服务将连接转发到的后备 pod 上的端口。
    2
    selector 字段留为空。
  2. 接下来,为该服务创建所需的端点。这为服务代理和路由器提供发送到服务的流量的位置:

      kind: "Endpoints"
      apiVersion: "v1"
      metadata:
        name: "external-mysql-service" 1
      subsets: 2
        -
          addresses:
            -
              ip: "10.0.0.0" 3
          ports:
            -
              port: 3306 4
              name: "mysql"
    1
    Service 实例的名称,如上一步中所定义。
    2
    如果提供了多个端点,则在提供的端点间对服务的流量进行负载平衡。
    3
    端点 IP 不能是 loopback (127.0.0.0/8), link-local (169.254.0.0/16), 或 link-local multicast (224.0.0.0/24).
    4
    portname 定义必须与上一步中定义的服务中的 portname 的值相匹配。

17.2.1.2. 使用外部域名

使用外部域名可以更轻松地管理外部服务链接,因为您不必担心外部服务的 IP 地址更改。

ExternalName 服务没有选择器,或者任何定义的端口或端点,您可以使用 ExternalName 服务将流量定向到外部服务。

kind: "Service"
apiVersion: "v1"
metadata:
  name: "external-mysql-service"
spec:
  type: ExternalName
  externalName: example.domain.name
selector: {} 1
1
selector 字段留为空。

使用外部域名服务会通知系统在 externalName 字段中(上例中的example.domain.name )中的 DNS 名称是恢复该服务的资源位置。针对 Kubernetes DNS 服务器发出 DNS 请求时,它会在 CNAME 记录中返回 externalName,告知客户端查找返回的名称以获取 IP 地址。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.