Início
MySQL Externo
SaaS Externo
Início
Muitas aplicações do OpenShift usam recursos externos, como databases, ou um endpoint SaaS. Estes recursos externos podem ser ativados como serviços nativos do OpenShift, assim essas aplicações podem trabalhar com esses serviços como fariam com qualquer outro serviço interno.
MySQL Externo
Um dos tipos de serviços externos mais comum é um banco externo. Para suportar um banco externo, a aplicação precisa:
1. Um endpoint para se comunicar.
2. Algumas informações, como:
a. Um usuário
b. Uma senha
c. O nome do banco
A solução para integrar com um banco externo inclui:
- Um objeto do tipo Service para representar o SaaS como um serviço do OpenShift.
- Um ou mais endpoints para o serviço.
- Variáveis de ambiente nos pods contendo as credênciais.
A seguir os passos de como integrar com uma base MySQL externa:
1. Criar um serviço do OpenShift para representar sua base externa. O processo é o mesmo de criar um serviço interno; a diferença está no campo Selector.
Serviços internos do OpenShift utilizam o campo Selector para associar pods com serviços usando labels. O componente do sistema EndpointsController sincroniza os endpoints dos serviços que especificam selectors que combinem com selectors dos pods. O serviço proxy e OpenShift router faz o load-balance de requisições aos endpoints dos serviços.
Serviços que representam um recurso externo não precisam de um pod. Em vez disso, não configure o campo Selector. Isso representa o serviço externo, fazendo com que o EndpointsController ingnore o serviço e permite a você especificar o endpoint manualmente.
kind: "Service" apiVersion: "v1" metadata: name: "external-mysql-service" spec: ports: - name: "mysql" protocol: "TCP" port: 3306 targetPort: 3306 nodePort: 0 selector: {}![]()
O campo selector que deve ser deixado em branco.
2. Depois, crie o endpoint para o serviço. Isso fornece ao proxy e router para onde enviar o trafego direcionado ao serviço.
kind: "Endpoints"
apiVersion: "v1"
metadata:
name: "external-mysql-service"
subsets:
-
addresses:
-
IP: "10.0.0.0"
ports:
-
port: 3306
name: "mysql"
O nome do Service da instancia, como definido no passo anterior.
O trafego para o serviço vai ser balanceado entre os Endpoints, caso mais de um seja fornecido.
Endpoints IP não podem ser loopback(127.0.0.0/8), link-local(169.254.0.0/16) ou link-local multicast(224.0.0.0/24).
A definição port e name devem ser idênticos com o valor de port e name do serviço definido no passo anterior.
3. Agora que o serviço e endpoint foram definidos, você pode definir as credenciais para os pods usarem o serviço através das variáveis de ambinete nos containers apropriados:
kind: "DeploymentConfig"
apiVersion: "v1"
metadata:
name: "my-app-deployment"
spec:
strategy:
type: "Rolling"
rollingParams:
updatePeriodSeconds: 1
intervalSeconds: 1
timeoutSeconds: 120
replicas: 2
selector:
name: "frontend"
template:
metadata:
labels:
name: "frontend"
spec:
containers:
-
name: "helloworld"
image: "origin-ruby-sample"
ports:
-
containerPort: 3306
protocol: "TCP"
env:
-
name: "MYSQL_USER"
value: "${MYSQL_USER}"
-
name: "MYSQL_PASSWORD"
value: "${MYSQL_PASSWORD}"
-
name: "MYSQL_DATABASE"
value: "${MYSQL_DATABASE}" 
Outros campos no DeploymentConfig foram omitidos.
O usuário a ser utilizado com o serviço.
A senha a ser utilizada com o serviço.
O name da base.
Database - Variáveis de ambiente externas
Usando um serviço externo na sua aplicação é semelhante a utilizar um serviço interno. Variáveis de ambiente serão atribuídas a sua aplicação para o serviço e variáveis com as credenciais descritas no passo anterior. Exemplo, um container MySQL vai ter as seguintes variáveis:
-
EXTERNAL_MYSQL_SERVICE_SERVICE_HOST=<ip_address>
-
EXTERNAL_MYSQL_SERVICE_SERVICE_PORT=<port_number>
-
MYSQL_USERNAME=<mysql_username>
-
MYSQL_PASSPHRASE=<mysql_passphrase>
-
MYSQL_DATABASE_NAME=<mysql_database>
A aplicação é responsável por ler as credenciais para o serviço através das variáveis de ambiente e estabelecer uma conexão com banco de dados com o serviço.
SaaS Externo
Um tipo comum de serviço externo é um SaaS endpoint. Para suportar um provedor SaaS externo, a aplicação precisa de:
1. Um endpoint para se comunicar
2. As credenciais, como:
a. Uma Key da API
b. Um usuário
c. Uma senha
Os passos a seguir, exibem um cenário para integrar com um provedor SaaS externo:
1. Criar um serviço OpenShift para representar o serviço externo. O processo é similar ao de se criar um serviço interno; A diferença está no campo do serviço Selector.
Serviços internos do OpenShift usam o campo Selector para associar pods com serviços usando labels. Um componente do sistema chamado EndpointsController sincroniza o endpoint para o serviço que especifica o selector com os pods que combinem com o selector. O serviço proxy e OpenShift router fazem o load-balance das requisições para o endpoint dos serviços.
Serviços que representam um recurso externo não precisam de pods associados com eles. Em vez disso, deixe o campo Selector sem configuração. Isso faz com que o EndpointsController ignore o serviço e permita que você especifique o endpoint manualmente:
kind: "Service" apiVersion: "v1" metadata: name: "example-external-service" spec: ports: - name: "mysql" protocol: "TCP" port: 3306 targetPort: 3306 nodePort: 0 selector: {}
O campo selector que deve estar em branco.
2. Agora, crie o endpoint para o serviço contendo as informações sobre onde enviar o trafego direcionado ao serviço de proxy e router:
kind: "Endpoints" apiVersion: "v1" metadata: name: "example-external-service"subsets:
- addresses: - ip: "10.10.1.1" ports: - name: "mysql" port: 3306
O nome do Service da instancia.
O trafego para o serviço é balanceado entre os subsets informados aqui.
Variáveis de ambiente de um provedor SaaS externo
Igual, quando se está utilizando um serviço interno, sua aplicação recebe variáveis de ambiente para o serviço e variáveis de ambiente com as credenciais descritas no passo anterior. No exemplo anterior, o container recebe as seguintes variáveis de ambiente:
-
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>
A aplicação recebe as credenciais para o serviço através das variáveis de ambiente e estabilece a conexão com o serviço.
Comentários
0 comentário
Por favor, entre para comentar.