17.3. 外部 SaaS 供应商
常见类型的外部服务是外部 SaaS 端点。要支持外部 SaaS 供应商,应用程序需要:
- 要通信的端点
一组凭证,例如:
- API 密钥
- 用户名
- 密码短语
下列步骤概述了与外部 SaaS 供应商集成的一个场景:
17.3.1. 使用 IP 地址和端点
创建一个 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
然后,为该服务创建端点,其中包含有关发送流量发送到服务代理和路由器的信息:
kind: "Endpoints" apiVersion: "v1" metadata: name: "example-external-service" 1 subsets: 2 - addresses: - ip: "10.10.1.1" ports: - name: "mysql" port: 3306
现在,定义了服务和端点,通过在适当的容器中设置环境变量来为 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>"
这些变量作为环境变量添加到容器中。使用环境变量允许服务对服务进行通信,并且可能需要其他参数,如 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>
应用程序从环境中读取服务的协调和凭证,并使用该服务建立连接。