W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
本任務會描述如何創(chuàng)建前端(Frontend)微服務和后端(Backend)微服務。后端微服務是一個 hello 歡迎程序。 前端通過 nginx 和一個 Kubernetes 服務 暴露后端所提供的服務。
hello
?后端微服務
nginx
?前端微服務
type=LoadBalancer
? 的 Service 對象將全段微服務暴露到集群外部你必須擁有一個 Kubernetes 的集群,同時你的 Kubernetes 集群必須帶有 kubectl 命令行工具。 建議在至少有兩個節(jié)點的集群上運行本教程,且這些節(jié)點不作為控制平面主機。 如果你還沒有集群,你可以通過 Minikube 構建一個你自己的集群,或者你可以使用下面任意一個 Kubernetes 工具構建:
要獲知版本信息,請輸入 ?kubectl version
?。
本任務使用外部負載均衡服務, 所以需要對應的可支持此功能的環(huán)境。如果你的環(huán)境不能支持,你可以使用 ?NodePort
?類型的服務代替。
后端是一個簡單的 hello 歡迎微服務應用。這是后端應用的 Deployment 配置文件:
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend
spec:
selector:
matchLabels:
app: hello
tier: backend
track: stable
replicas: 3
template:
metadata:
labels:
app: hello
tier: backend
track: stable
spec:
containers:
- name: hello
image: "gcr.io/google-samples/hello-go-gke:1.0"
ports:
- name: http
containerPort: 80
...
創(chuàng)建后端 Deployment:
kubectl apply -f https://k8s.io/examples/service/access/backend-deployment.yaml
查看后端的 Deployment 信息:
kubectl describe deployment backend
輸出類似于:
Name: backend
Namespace: default
CreationTimestamp: Mon, 24 Oct 2016 14:21:02 -0700
Labels: app=hello
tier=backend
track=stable
Annotations: deployment.kubernetes.io/revision=1
Selector: app=hello,tier=backend,track=stable
Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 1 max unavailable, 1 max surge
Pod Template:
Labels: app=hello
tier=backend
track=stable
Containers:
hello:
Image: "gcr.io/google-samples/hello-go-gke:1.0"
Port: 80/TCP
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
OldReplicaSets: <none>
NewReplicaSet: hello-3621623197 (3/3 replicas created)
Events:
...
將請求從前端發(fā)送到到后端的關鍵是后端 Service。Service 創(chuàng)建一個固定 IP 和 DNS 解析名入口, 使得后端微服務總是可達。Service 使用 選擇算符 來尋找目標 Pod。
首先,瀏覽 Service 的配置文件:
---
apiVersion: v1
kind: Service
metadata:
name: hello
spec:
selector:
app: hello
tier: backend
ports:
- protocol: TCP
port: 80
targetPort: http
...
配置文件中,你可以看到名為 ?hello
?的 Service 將流量路由到包含 ?app: hello
? 和 ?tier: backend
? 標簽的 Pod。
創(chuàng)建后端 Service:
kubectl apply -f https://k8s.io/examples/service/access/backend-service.yaml
此時,你已經有了一個運行著 ?hello
?應用的三個副本的 ?backend
?Deployment,你也有了 一個 Service 用于路由網絡流量。不過,這個服務在集群外部無法訪問也無法解析。
現(xiàn)在你已經有了運行中的后端應用,你可以創(chuàng)建一個可在集群外部訪問的前端,并通過代理 前端的請求連接到后端。
前端使用被賦予后端 Service 的 DNS 名稱將請求發(fā)送到后端工作 Pods。這一 DNS 名稱為 ?hello
?,也就是 ?examples/service/access/backend-service.yaml
? 配置 文件中 ?name
?字段的取值。
前端 Deployment 中的 Pods 運行一個 nginx 鏡像,這個已經配置好的鏡像會將請求轉發(fā) 給后端的 hello Service。下面是 nginx 的配置文件:
# The identifier Backend is internal to nginx, and used to name this specific upstream
upstream Backend {
# hello is the internal DNS name used by the backend Service inside Kubernetes
server hello;
}
server {
listen 80;
location / {
# The following statement will proxy traffic to the upstream named Backend
proxy_pass http://Backend;
}
}
與后端類似,前端用包含一個 Deployment 和一個 Service。后端與前端服務之間的一個 重要區(qū)別是前端 Service 的配置文件包含了 ?type: LoadBalancer
?,也就是說,Service 會使用你的云服務商的默認負載均衡設備,從而實現(xiàn)從集群外訪問的目的。
---
apiVersion: v1
kind: Service
metadata:
name: frontend
spec:
selector:
app: hello
tier: frontend
ports:
- protocol: "TCP"
port: 80
targetPort: 80
type: LoadBalancer
...
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend
spec:
selector:
matchLabels:
app: hello
tier: frontend
track: stable
replicas: 1
template:
metadata:
labels:
app: hello
tier: frontend
track: stable
spec:
containers:
- name: nginx
image: "gcr.io/google-samples/hello-frontend:1.0"
lifecycle:
preStop:
exec:
command: ["/usr/sbin/nginx","-s","quit"]
...
創(chuàng)建前端 Deployment 和 Service:
kubectl apply -f https://k8s.io/examples/service/access/frontend-deployment.yaml
kubectl apply -f https://k8s.io/examples/service/access/frontend-service.yaml
通過輸出確認兩個資源都已經被創(chuàng)建:
deployment.apps/frontend created
service/frontend created
說明: 這個 nginx 配置文件是被打包在 容器鏡像 里的。 更好的方法是使用 ?
ConfigMap
?, 這樣的話你可以更輕易地更改配置。
一旦你創(chuàng)建了 LoadBalancer 類型的 Service,你可以使用這條命令查看外部 IP:
kubectl get service frontend
外部 IP 字段的生成可能需要一些時間。如果是這種情況,外部 IP 會顯示為 ?<pending>
?。
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
frontend 10.51.252.116 <pending> 80/TCP 10s
當外部 IP 地址被分配可用時,配置會更新,在 ?EXTERNAL-IP
? 頭部下顯示新的 IP:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
frontend 10.51.252.116 XXX.XXX.XXX.XXX 80/TCP 1m
這一新的 IP 地址就可以用來從集群外與 ?frontend
?服務交互了。
前端和后端已經完成連接了。你可以使用 curl 命令通過你的前端 Service 的外部 IP 訪問服務端點。
curl http://${EXTERNAL_IP} # 將 EXTERNAL_P 替換為你之前看到的外部 IP
輸出顯示后端生成的消息:
{"message":"Hello"}
要刪除服務,輸入下面的命令:
kubectl delete services frontend backend
要刪除在前端和后端應用中運行的 Deployment、ReplicaSet 和 Pod,輸入下面的命令:
kubectl delete deployment frontend backend
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: