From 15be3b1c7b458823fa83224657223e7c282519c9 Mon Sep 17 00:00:00 2001 From: Qiming Teng Date: Sat, 30 Jan 2021 12:32:43 +0800 Subject: [PATCH] [zh] Resync connecting-frontend-backend --- .../connecting-frontend-backend.md | 152 +++++++++++------- .../{hello.yaml => backend-deployment.yaml} | 6 +- ...ello-service.yaml => backend-service.yaml} | 2 + .../service/access/frontend-deployment.yaml | 27 ++++ .../service/access/frontend-nginx.conf | 14 ++ .../service/access/frontend-service.yaml | 15 ++ .../zh/examples/service/access/frontend.conf | 11 -- .../zh/examples/service/access/frontend.yaml | 39 ----- 8 files changed, 152 insertions(+), 114 deletions(-) rename content/zh/examples/service/access/{hello.yaml => backend-deployment.yaml} (91%) rename content/zh/examples/service/access/{hello-service.yaml => backend-service.yaml} (95%) create mode 100644 content/zh/examples/service/access/frontend-deployment.yaml create mode 100644 content/zh/examples/service/access/frontend-nginx.conf create mode 100644 content/zh/examples/service/access/frontend-service.yaml delete mode 100644 content/zh/examples/service/access/frontend.conf delete mode 100644 content/zh/examples/service/access/frontend.yaml diff --git a/content/zh/docs/tasks/access-application-cluster/connecting-frontend-backend.md b/content/zh/docs/tasks/access-application-cluster/connecting-frontend-backend.md index 3fa7626c88..a485d9ba3a 100644 --- a/content/zh/docs/tasks/access-application-cluster/connecting-frontend-backend.md +++ b/content/zh/docs/tasks/access-application-cluster/connecting-frontend-backend.md @@ -3,31 +3,40 @@ title: 使用 Service 把前端连接到后端 content_type: tutorial weight: 70 --- + -本任务会描述如何创建前端微服务和后端微服务。后端微服务是一个 hello 欢迎程序。 -前端和后端的连接是通过 Kubernetes {{< glossary_tooltip term_id="service" text="服务" >}} -完成的。 +本任务会描述如何创建前端(Frontend)微服务和后端(Backend)微服务。后端微服务是一个 hello 欢迎程序。 +前端通过 nginx 和一个 Kubernetes {{< glossary_tooltip term_id="service" text="服务" >}} +暴露后端所提供的服务。 ## {{% heading "objectives" %}} -* 使用部署对象(Deployment object)创建并运行一个微服务 -* 从后端将流量路由到前端 -* 使用服务对象把前端应用连接到后端应用 +* 使用部署对象(Deployment object)创建并运行一个 `hello` 后端微服务 +* 使用一个 Service 对象将请求流量发送到后端微服务的多个副本 +* 同样使用一个 Deployment 对象创建并运行一个 `nginx` 前端微服务 +* 配置前端微服务将请求流量发送到后端微服务 +* 使用 `type=LoadBalancer` 的 Service 对象将全段微服务暴露到集群外部 ## {{% heading "prerequisites" %}} @@ -39,8 +48,7 @@ This task uses require a supported environment. If your environment does not support this, you can use a Service of type [NodePort](/docs/concepts/services-networking/service/#nodeport) instead. --> - -本任务使用 [外部负载均衡服务](/zh/docs/tasks/access-application-cluster/create-external-load-balancer/), +本任务使用[外部负载均衡服务](/zh/docs/tasks/access-application-cluster/create-external-load-balancer/), 所以需要对应的可支持此功能的环境。如果你的环境不能支持,你可以使用 [NodePort](/zh/docs/concepts/services-networking/service/#nodeport) 类型的服务代替。 @@ -57,7 +65,7 @@ file for the backend Deployment: 后端是一个简单的 hello 欢迎微服务应用。这是后端应用的 Deployment 配置文件: -{{< codenew file="service/access/hello.yaml" >}} +{{< codenew file="service/access/backend-deployment.yaml" >}} 查看后端的 Deployment 信息: -``` +```shell kubectl describe deployment hello ``` @@ -83,7 +91,7 @@ The output is similar to this: 输出类似于: ``` -Name: hello +Name: backend Namespace: default CreationTimestamp: Mon, 24 Oct 2016 14:21:02 -0700 Labels: app=hello @@ -91,7 +99,7 @@ Labels: app=hello track=stable Annotations: deployment.kubernetes.io/revision=1 Selector: app=hello,tier=backend,track=stable -Replicas: 7 desired | 7 updated | 7 total | 7 available | 0 unavailable +Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 1 max unavailable, 1 max surge @@ -112,15 +120,15 @@ Conditions: Available True MinimumReplicasAvailable Progressing True NewReplicaSetAvailable OldReplicaSets: -NewReplicaSet: hello-3621623197 (7/7 replicas created) +NewReplicaSet: hello-3621623197 (3/3 replicas created) Events: ... ``` -### 创建后端服务对象 +### 创建 `hello` Service 对象 -前端连接到后端的关键是 Service(服务)。Service 创建一个固定 IP 和 DNS 解析名入口, -使得后端微服务可达。Service 使用 +将请求从前端发送到到后端的关键是后端 Service。Service 创建一个固定 IP 和 DNS 解析名入口, +使得后端微服务总是可达。Service 使用 {{< glossary_tooltip text="选择算符" term_id="selector" >}} 来寻找目标 Pod。 首先,浏览 Service 的配置文件: -{{< codenew file="service/access/hello-service.yaml" >}} +{{< codenew file="service/access/backend-service.yaml" >}} -配置文件中,你可以看到 Service 将流量路由到包含 `app: hello` 和 `tier: backend` 标签的 Pod。 +配置文件中,你可以看到名为 `hello` 的 Service 将流量路由到包含 `app: hello` +和 `tier: backend` 标签的 Pod。 -创建 `hello` Service: +创建后端 Service: ```shell -kubectl apply -f https://k8s.io/examples/service/access/hello-service.yaml +kubectl apply -f https://k8s.io/examples/service/access/backend-service.yaml ``` -此时,你已经有了一个在运行的后端 Deployment,你也有了一个 Service 用于路由网络流量。 +此时,你已经有了一个运行着 `hello` 应用的三个副本的 `backend` Deployment,你也有了 +一个 Service 用于路由网络流量。不过,这个服务在集群外部无法访问也无法解析。 ### 创建前端应用 -既然你已经有了后端应用,你可以创建一个前端应用连接到后端。前端应用通过 DNS 名连接到后端的工作 Pods。 -DNS 名是 "hello",也就是 Service 配置文件中 `name` 字段的值。 +现在你已经有了运行中的后端应用,你可以创建一个可在集群外部访问的前端,并通过代理 +前端的请求连接到后端。 -前端 Deployment 中的 Pods 运行一个 nginx 镜像,这个已经配置好镜像去寻找后端的 hello Service。 -只是 nginx 的配置文件: +前端使用被赋予后端 Service 的 DNS 名称将请求发送到后端工作 Pods。这一 DNS +名称为 `hello`,也就是 `examples/service/access/backend-service.yaml` 配置 +文件中 `name` 字段的取值。 -{{< codenew file="service/access/frontend.conf" >}} +前端 Deployment 中的 Pods 运行一个 nginx 镜像,这个已经配置好的镜像会将请求转发 +给后端的 hello Service。下面是 nginx 的配置文件: + +{{< codenew file="service/access/frontend-nginx.conf" >}} -与后端类似,前端用包含一个 Deployment 和一个 Service。Service 的配置文件包含了 `type: LoadBalancer`, -也就是说,Service 会使用你的云服务商的默认负载均衡设备。 +与后端类似,前端用包含一个 Deployment 和一个 Service。后端与前端服务之间的一个 +重要区别是前端 Service 的配置文件包含了 `type: LoadBalancer`,也就是说,Service +会使用你的云服务商的默认负载均衡设备,从而实现从集群外访问的目的。 + +{{< codenew file="service/access/frontend-service.yaml" >}} + +{{< codenew file="service/access/frontend-deployment.yaml" >}} -{{< codenew file="service/access/frontend.yaml" >}} ### 通过前端发送流量 -前端和后端已经完成连接了。你可以使用 curl 命令通过你的前端 Service 的外部 IP 访问服务端点。 +前端和后端已经完成连接了。你可以使用 curl 命令通过你的前端 Service 的外部 +IP 访问服务端点。 ```shell -curl http:// +curl http://${EXTERNAL_IP} # 将 EXTERNAL_P 替换为你之前看到的外部 IP ``` -后端生成的消息输出如下: +输出显示后端生成的消息: ```json {"message":"Hello"} @@ -299,7 +325,7 @@ To delete the Services, enter this command: 要删除服务,输入下面的命令: ```shell -kubectl delete services frontend hello +kubectl delete services frontend backend ``` -* 进一步了解[Service](/zh/docs/concepts/services-networking/service/) -* 进一步了解[ConfigMap](/zh/docs/tasks/configure-pod-container/configure-pod-configmap/) +* 进一步了解 [Service](/zh/docs/concepts/services-networking/service/) +* 进一步了解 [ConfigMap](/zh/docs/tasks/configure-pod-container/configure-pod-configmap/) +* 进一步了解 [Service 和 Pods 的 DNS](/docs/concepts/services-networking/dns-pod-service/) diff --git a/content/zh/examples/service/access/hello.yaml b/content/zh/examples/service/access/backend-deployment.yaml similarity index 91% rename from content/zh/examples/service/access/hello.yaml rename to content/zh/examples/service/access/backend-deployment.yaml index 85dff18ee1..5c95e38a3b 100644 --- a/content/zh/examples/service/access/hello.yaml +++ b/content/zh/examples/service/access/backend-deployment.yaml @@ -1,14 +1,15 @@ +--- apiVersion: apps/v1 kind: Deployment metadata: - name: hello + name: backend spec: selector: matchLabels: app: hello tier: backend track: stable - replicas: 7 + replicas: 3 template: metadata: labels: @@ -22,3 +23,4 @@ spec: ports: - name: http containerPort: 80 +... \ No newline at end of file diff --git a/content/zh/examples/service/access/hello-service.yaml b/content/zh/examples/service/access/backend-service.yaml similarity index 95% rename from content/zh/examples/service/access/hello-service.yaml rename to content/zh/examples/service/access/backend-service.yaml index 71344ecb8b..9262d29bb8 100644 --- a/content/zh/examples/service/access/hello-service.yaml +++ b/content/zh/examples/service/access/backend-service.yaml @@ -1,3 +1,4 @@ +--- apiVersion: v1 kind: Service metadata: @@ -10,3 +11,4 @@ spec: - protocol: TCP port: 80 targetPort: http +... \ No newline at end of file diff --git a/content/zh/examples/service/access/frontend-deployment.yaml b/content/zh/examples/service/access/frontend-deployment.yaml new file mode 100644 index 0000000000..182b0e708e --- /dev/null +++ b/content/zh/examples/service/access/frontend-deployment.yaml @@ -0,0 +1,27 @@ +--- +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"] +... \ No newline at end of file diff --git a/content/zh/examples/service/access/frontend-nginx.conf b/content/zh/examples/service/access/frontend-nginx.conf new file mode 100644 index 0000000000..39a911a09a --- /dev/null +++ b/content/zh/examples/service/access/frontend-nginx.conf @@ -0,0 +1,14 @@ +# 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; + } +} diff --git a/content/zh/examples/service/access/frontend-service.yaml b/content/zh/examples/service/access/frontend-service.yaml new file mode 100644 index 0000000000..898a5ed51b --- /dev/null +++ b/content/zh/examples/service/access/frontend-service.yaml @@ -0,0 +1,15 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: frontend +spec: + selector: + app: hello + tier: frontend + ports: + - protocol: "TCP" + port: 80 + targetPort: 80 + type: LoadBalancer +... \ No newline at end of file diff --git a/content/zh/examples/service/access/frontend.conf b/content/zh/examples/service/access/frontend.conf deleted file mode 100644 index 9a1f5a0ed6..0000000000 --- a/content/zh/examples/service/access/frontend.conf +++ /dev/null @@ -1,11 +0,0 @@ -upstream hello { - server hello; -} - -server { - listen 80; - - location / { - proxy_pass http://hello; - } -} diff --git a/content/zh/examples/service/access/frontend.yaml b/content/zh/examples/service/access/frontend.yaml deleted file mode 100644 index 9f5b6b757f..0000000000 --- a/content/zh/examples/service/access/frontend.yaml +++ /dev/null @@ -1,39 +0,0 @@ -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"]