Skip to content

Commit 6bdecb4

Browse files
authored
[pt-br] Add docs/tasks/access-application-cluster/connecting-frontend-backend.md (#40549)
* localizing operator.md * small changes * fixing a design pattern and formatting * Create access-cluster-services.md * Create port-forward-access-application-cluster.md * Create connecting-frontend-backend.md * Create limit-storage-consumption.md * Create kubelet-credential-provider.md * Delete access-cluster-services.md * Delete port-forward-access-application-cluster.md * Delete connecting-frontend-backend.md * Delete limit-storage-consumption.md * Delete kubelet-credential-provider.md * Create connecting-frontend-backend.md * Delete operator.md * Create backend-deployment.yaml * Create backend-service.yaml * Create frontend-deployment.yaml * Create frontend-nginx.conf * Create frontend-service.yaml * Create backend-deployment.yaml * Delete backend-deployment.yaml * Create backend-service.yaml * Delete backend-service.yaml * Create frontend-deployment.yaml * Delete frontend-deployment.yaml * Create frontend-nginx.conf * Create frontend-service.yaml * Update backend-deployment.yaml * Update backend-service.yaml * Update frontend-nginx.conf * Update frontend-service.yaml * Update frontend-deployment.yaml * Delete frontend-nginx.conf * Delete frontend-service.yaml * Create backend-deployment.yaml * Create backend-service.yaml * Create frontend-deployment.yaml * Create frontend-nginx.conf * Create frontend-service.yaml * Delete backend-service.yaml * Delete backend-deployment.yaml * Delete frontend-deployment.yaml * Delete frontend-nginx.conf * Delete frontend-service.yaml * removing trash
1 parent ba68197 commit 6bdecb4

File tree

6 files changed

+284
-0
lines changed

6 files changed

+284
-0
lines changed
Lines changed: 188 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,188 @@
1+
---
2+
title: Conectando um Frontend a um Backend usando Serviços
3+
content_type: tutorial
4+
weight: 70
5+
---
6+
7+
<!-- overview -->
8+
9+
Esta tarefa mostra como criar um microserviço *frontend* e um microserviço *backend*. O microserviço backend é um serviço que envia uma mensagem de saudação. O frontend expõe o backend usando o nginx e um objeto {{< glossary_tooltip term_id="service" >}} do Kubernetes.
10+
11+
## {{% heading "objectives" %}}
12+
13+
* Crie e execute um microserviço de backend de amostra chamado `hello` usando um objeto {{< glossary_tooltip term_id="deployment" >}}.
14+
* Use um objeto de serviço (`Service`) para enviar tráfego para as várias réplicas do microserviço de backend.
15+
* Crie e execute um microserviço de frontend chamado `nginx`, também usando um objeto `Deployment`.
16+
* Configure o microserviço de frontend para enviar tráfego para o microserviço de backend.
17+
* Use um objeto `Service` do tipo `LoadBalancer` para expor o microserviço de frontend fora do cluster.
18+
19+
## {{% heading "prerequisites" %}}
20+
21+
{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
22+
23+
Esta tarefa utiliza [Serviços com balanceadores de carga externos](/docs/tasks/access-application-cluster/create-external-load-balancer/), que necessitam de um ambiente suportado. Se o seu ambiente não suportar isso, você pode substituir por um serviço do tipo [`NodePort`](/docs/concepts/services-networking/service/#type-nodeport).
24+
25+
<!-- lessoncontent -->
26+
27+
## Criando o backend usando um Deployment.
28+
29+
O backend é um microserviço simples de saudação. Aqui está o arquivo de configuração para o Deployment do backend:
30+
{{< codenew file="service/access/backend-deployment.yaml" >}}
31+
32+
Crie o `Deployment` do backend:
33+
34+
```shell
35+
kubectl apply -f https://k8s.io/examples/service/access/backend-deployment.yaml
36+
```
37+
38+
Veja informações sobre o `Deployment` do backend:
39+
40+
```shell
41+
kubectl describe deployment backend
42+
```
43+
44+
A saída é semelhante a esta:
45+
46+
```
47+
Name: backend
48+
Namespace: default
49+
CreationTimestamp: Mon, 24 Oct 2016 14:21:02 -0700
50+
Labels: app=hello
51+
tier=backend
52+
track=stable
53+
Annotations: deployment.kubernetes.io/revision=1
54+
Selector: app=hello,tier=backend,track=stable
55+
Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable
56+
StrategyType: RollingUpdate
57+
MinReadySeconds: 0
58+
RollingUpdateStrategy: 1 max unavailable, 1 max surge
59+
Pod Template:
60+
Labels: app=hello
61+
tier=backend
62+
track=stable
63+
Containers:
64+
hello:
65+
Image: "gcr.io/google-samples/hello-go-gke:1.0"
66+
Port: 80/TCP
67+
Environment: <none>
68+
Mounts: <none>
69+
Volumes: <none>
70+
Conditions:
71+
Type Status Reason
72+
---- ------ ------
73+
Available True MinimumReplicasAvailable
74+
Progressing True NewReplicaSetAvailable
75+
OldReplicaSets: <none>
76+
NewReplicaSet: hello-3621623197 (3/3 replicas created)
77+
Events:
78+
...
79+
```
80+
81+
## Criando o objeto Service `hello`
82+
83+
A chave para enviar solicitações do frontend para o backend é o `Service` do backend. Um `Service` cria um endereço IP persistente e uma entrada de nome DNS, para que o microserviço do backend possa ser sempre acessado. Um `Service` usa {{< glossary_tooltip text="seletores" term_id="selector" >}} para encontrar os `Pods` para os quais ele roteia o tráfego.
84+
85+
Primeiro, explore o arquivo de configuração do `Service`:
86+
87+
{{< codenew file="service/access/backend-service.yaml" >}}
88+
89+
No arquivo de configuração, você pode ver que o `Service`, chamado de `hello`, roteia o tráfego para Pods que possuem as labels `app: hello` e `tier: backend`.
90+
91+
Crie o `Service` para o backend:
92+
93+
```shell
94+
kubectl apply -f https://k8s.io/examples/service/access/backend-service.yaml
95+
```
96+
97+
Neste ponto, você possui um `Deployment` chamado `backend` executando três réplicas do seu aplicativo `hello` e possui um `Service` que pode rotear o tráfego para eles. No entanto, esse serviço ainda não pode ser acessado ou resolvido fora do cluster.
98+
99+
## Criando o frontend
100+
101+
Agora que o seu backend está em execução, você pode criar um frontend que seja acessível fora do cluster e se conecte ao backend por meio de solicitações de proxy.
102+
103+
O frontend envia solicitações para os worker Pods do backend usando o nome DNS fornecido ao Serviço do backend. O nome DNS é `hello`, que é o valor do campo `name` no arquivo de configuração `examples/service/access/backend-service.yaml`.
104+
105+
Os Pods no Deployment do frontend executam uma imagem nginx que é configurada para fazer proxy de solicitações para o Serviço de backend `hello`. Aqui está o arquivo de configuração nginx:
106+
107+
{{< codenew file="service/access/frontend-nginx.conf" >}}
108+
109+
Similarmente ao backend, o frontend possui um `Deployment` e um `Service`. Uma diferença importante a ser notada entre os serviços de backend e frontend é que a configuração do serviço de frontend tem o parâmetro `type: LoadBalancer`, o que significa que o serviço usa um balanceador de carga fornecido pelo provedor de nuvem e será acessível de fora do cluster.
110+
111+
{{< codenew file="service/access/frontend-service.yaml" >}}
112+
113+
{{< codenew file="service/access/frontend-deployment.yaml" >}}
114+
115+
Crie o `Deployment` e o `Service` para o frontend:
116+
117+
```shell
118+
kubectl apply -f https://k8s.io/examples/service/access/frontend-deployment.yaml
119+
kubectl apply -f https://k8s.io/examples/service/access/frontend-service.yaml
120+
```
121+
122+
A saída mostra que ambos os recursos foram criados:
123+
124+
```
125+
deployment.apps/frontend created
126+
service/frontend created
127+
```
128+
129+
{{< note >}}
130+
A configuração do nginx está incorporada à [imagem do contêiner](/examples/service/access/Dockerfile). Uma maneira melhor de fazer isso seria usar um [ConfigMap](/docs/tasks/configure-pod-container/configure-pod-configmap/), para que seja possível alterar a configuração com mais facilidade.
131+
{{< /note >}}
132+
133+
## Interagindo com o `Service` frontend
134+
135+
Depois de criar um `Service` do tipo `LoadBalancer`, você pode usar este comando para encontrar o IP externo:
136+
137+
```shell
138+
kubectl get service frontend --watch
139+
```
140+
141+
Isso exibe a configuração do `Service` frontend e fica monitorando por mudanças. Inicialmente, o IP externo é exibido como `<pending>`:
142+
143+
```
144+
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
145+
frontend LoadBalancer 10.51.252.116 <pending> 80/TCP 10s
146+
```
147+
148+
Assim que um IP externo é provisionado, a configuração é atualizada para incluir o novo IP na seção `EXTERNAL-IP`:
149+
150+
```
151+
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
152+
frontend LoadBalancer 10.51.252.116 XXX.XXX.XXX.XXX 80/TCP 1m
153+
```
154+
155+
Esse IP agora pode ser usado para interagir com o serviço `frontend` de fora do cluster.
156+
157+
## Enviando tráfego por meio do frontend
158+
159+
Agora que o frontend e o backend estão conectados, você pode acessar o `endpoint` usando o comando `curl` no IP externo do seu serviço frontend:
160+
161+
```shell
162+
curl http://${EXTERNAL_IP} # substitua isto pelo `EXTERNAL-IP` que você viu antes
163+
```
164+
A saída mostra a mensagem gerada pelo backend:
165+
166+
```json
167+
{"message":"Hello"}
168+
```
169+
170+
## {{% heading "cleanup" %}}
171+
172+
Para excluir os `Services`, digite este comando:
173+
174+
```shell
175+
kubectl delete services frontend backend
176+
```
177+
178+
Para excluir os `Deployments`, `ReplicaSets` e `Pods que estão executando as aplicações frontend e backend, digite este comando:
179+
180+
```shell
181+
kubectl delete deployment frontend backend
182+
```
183+
184+
## {{% heading "whatsnext" %}}
185+
186+
* Saiba mais sobre [`Services`](/docs/concepts/services-networking/service/)
187+
* Saiba mais sobre [`ConfigMaps`](/docs/tasks/configure-pod-container/configure-pod-configmap/)
188+
* Saiba mais sobre [DNS para `Services` e `Pods`](/docs/concepts/services-networking/dns-pod-service/)
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
---
2+
apiVersion: apps/v1
3+
kind: Deployment
4+
metadata:
5+
name: backend
6+
spec:
7+
selector:
8+
matchLabels:
9+
app: hello
10+
tier: backend
11+
track: stable
12+
replicas: 3
13+
template:
14+
metadata:
15+
labels:
16+
app: hello
17+
tier: backend
18+
track: stable
19+
spec:
20+
containers:
21+
- name: hello
22+
image: "gcr.io/google-samples/hello-go-gke:1.0"
23+
ports:
24+
- name: http
25+
containerPort: 80
26+
...
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
---
2+
apiVersion: v1
3+
kind: Service
4+
metadata:
5+
name: hello
6+
spec:
7+
selector:
8+
app: hello
9+
tier: backend
10+
ports:
11+
- protocol: TCP
12+
port: 80
13+
targetPort: http
14+
...
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
---
2+
apiVersion: apps/v1
3+
kind: Deployment
4+
metadata:
5+
name: frontend
6+
spec:
7+
selector:
8+
matchLabels:
9+
app: hello
10+
tier: frontend
11+
track: stable
12+
replicas: 1
13+
template:
14+
metadata:
15+
labels:
16+
app: hello
17+
tier: frontend
18+
track: stable
19+
spec:
20+
containers:
21+
- name: nginx
22+
image: "gcr.io/google-samples/hello-frontend:1.0"
23+
lifecycle:
24+
preStop:
25+
exec:
26+
command: ["/usr/sbin/nginx","-s","quit"]
27+
...
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# The identifier Backend is internal to nginx, and used to name this specific upstream
2+
upstream Backend {
3+
# hello is the internal DNS name used by the backend Service inside Kubernetes
4+
server hello;
5+
}
6+
7+
server {
8+
listen 80;
9+
10+
location / {
11+
# The following statement will proxy traffic to the upstream named Backend
12+
proxy_pass http://Backend;
13+
}
14+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
---
2+
apiVersion: v1
3+
kind: Service
4+
metadata:
5+
name: frontend
6+
spec:
7+
selector:
8+
app: hello
9+
tier: frontend
10+
ports:
11+
- protocol: "TCP"
12+
port: 80
13+
targetPort: 80
14+
type: LoadBalancer
15+
...

0 commit comments

Comments
 (0)