17.3. 外部 SaaS 供应商


常见类型的外部服务是外部 SaaS 端点。要支持外部 SaaS 供应商,应用程序需要:

  1. 要通信的端点
  2. 一组凭证,例如:

    1. API 密钥
    2. 用户名
    3. 密码短语

下列步骤概述了与外部 SaaS 供应商集成的一个场景:

17.3.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: "example-external-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: "example-external-service" 1
    subsets: 2
    - addresses:
      - ip: "10.10.1.1"
      ports:
      - name: "mysql"
        port: 3306
    1
    Service 实例的名称。
    2
    到服务的流量在此处提供的子集 之间实现负载平衡。
  3. 现在,定义了服务和端点,通过在适当的容器中设置环境变量来为 pod 提供凭证来使用该服务:

      kind: "DeploymentConfig"
      apiVersion: "v1"
      metadata:
        name: "my-app-deployment"
      spec:  1
        strategy:
          type: "Rolling"
          rollingParams:
            timeoutSeconds: 120
        replicas: 1
        selector:
          name: "frontend"
        template:
          metadata:
            labels:
              name: "frontend"
          spec:
            containers:
              -
                name: "helloworld"
                image: "openshift/openshift/origin-ruby-sample"
                ports:
                  -
                    containerPort: 3306
                    protocol: "TCP"
                env:
                  -
                    name: "SAAS_API_KEY" 2
                    value: "<SaaS service API key>"
                  -
                    name: "SAAS_USERNAME" 3
                    value: "<SaaS service user>"
                  -
                    name: "SAAS_PASSPHRASE" 4
                    value: "<SaaS service passphrase>"
    1
    DeploymentConfig 中的其他字段会被忽略。
    2
    SAAS_API_KEY:用于服务的 API 密钥。
    3
    SAAS_USERNAME:用于服务的用户名。
    4
    SAAS_PASSPHRASE:与服务一起使用的密码短语。

    这些变量作为环境变量添加到容器中。使用环境变量允许服务对服务进行通信,并且可能需要其他参数,如 API 密钥、用户名和密码身份验证或证书。

外部 SaaS 供应商环境变量

同样,在使用内部服务时,会为您的服务分配环境变量,并使用前面步骤中描述的凭据提供额外的环境变量。在上例中,容器接收以下环境变量:

  • EXAMPLE_EXTERNAL_SERVICE_SERVICE_HOST=<ip_address>
  • EXAMPLE_EXTERNAL_SERVICE_SERVICE_PORT=<port_number>
  • SAAS_API_KEY=<saas_api_key>
  • SAAS_USERNAME=<saas_username>
  • SAAS_PASSPHRASE=<saas_passphrase>

应用程序从环境中读取服务的协调和凭证,并使用该服务建立连接。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.