From 216e20c0dc6f29aef0756e3de760fcd624da780c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=BB=BA=E6=98=8E?= <1831033662@qq.com> Date: Wed, 8 Mar 2023 16:47:34 +0800 Subject: [PATCH 1/2] Update service.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 文档修订以及将issue补充进文档 --- docs/service.md | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/docs/service.md b/docs/service.md index c2aafb29eb15b..0e9617046451d 100644 --- a/docs/service.md +++ b/docs/service.md @@ -6,7 +6,7 @@ * 前面访问服务的方式是通过 `port-forword` 将 pod 的端口暴露到本地,不仅需要写对 pod 的名字,一旦 deployment 重新创建新的 pod,pod 名字和 IP 地址也会随之变化,如何保证稳定的访问地址呢?。 * 如果使用 deployment 部署了多个 Pod 副本,如何做负载均衡呢? -`kubernetes` 提供了一种名叫 `Service` 的资源帮助解决这些问题,它为 pod 提供一个稳定的 Endpoint。Servie 位于 pod 的前面,负责接收请求并将它们传递给它后面的所有pod。一旦服务中的 Pod 集合发生更改,Endpoints 就会被更新,请求的重定向自然也会导向最新的 pod。 +`kubernetes` 提供了一种名叫 `Service` 的资源帮助解决这些问题,它为 pod 提供一个稳定的 Endpoint。Service 位于 pod 的前面,负责接收请求并将它们传递给它后面的所有pod。一旦服务中的 Pod 集合发生更改,Endpoints 就会被更新,请求的重定向自然也会导向最新的 pod。 ### ClusterIP @@ -63,7 +63,7 @@ spec: name: hellok8s-container ``` -接下来是 `Service` 资源的定义,我们使用 `ClusterIP` 的方式定义 Service,通过 `kubernetes` 集群的内部 IP 暴露服务,当我们只需要让集群中运行的其他应用程序访问我们的 pod 时,就可以使用这种类型的Service。首先创建一个 service-hellok8s-clusterip.yaml` 文件。 +接下来是 `Service` 资源的定义,我们使用 `ClusterIP` 的方式定义 Service,通过 `kubernetes` 集群的内部 IP 暴露服务,当我们只需要让集群中运行的其他应用程序访问我们的 pod 时,就可以使用这种类型的Service。首先创建一个 service-hellok8s-clusterip.yaml 文件。 ``` yaml apiVersion: v1 @@ -197,7 +197,17 @@ curl http://192.168.59.100:30000 curl http://192.168.59.100:30000 # [v3] Hello, Kubernetes!, From host: hellok8s-deployment-5d5545b69c-24lw5 ``` +如果是在dockers上构建,那你大概率无法通过`minikube ip`获取到的ip地址来请求,因为在Darwin、Windows、WSL上使用Docker驱动,网络受限,无法直接访问Node IP。你可以通过`minikube service service-hellok8s-nodeport --url`来公开服务,然后通过`curl`或者浏览器访问。(关闭终端或者ctrl+c退出后,服务会自动关闭) +```shell +minikube service service-hellok8s-nodeport --url +# http://127.0.0.1:50896 +# Because you are using a Docker driver on windows, the terminal needs to be open to run it. +curl http://127.0.0.1:50896 +# [v3] Hello, Kubernetes!, From host: hellok8s-deployment-559cfdd58c-zp2pc +curl http://127.0.0.1:50896 +# [v3] Hello, Kubernetes!, From host: hellok8s-deployment-559cfdd58c-2j2x2 +``` ### LoadBalancer [`LoadBalancer`](https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer) 是使用云提供商的负载均衡器向外部暴露服务。 外部负载均衡器可以将流量路由到自动创建的 `NodePort` 服务和 `ClusterIP` 服务上,假如你在 [AWS](https://aws.amazon.com) 的 [EKS](https://aws.amazon.com/eks/) 集群上创建一个 Type 为 `LoadBalancer` 的 Service。它会自动创建一个 ELB ([Elastic Load Balancer](https://aws.amazon.com/elasticloadbalancing)) ,并可以根据配置的 IP 池中自动分配一个独立的 IP 地址,可以供外部访问。 From 3b9fdf0aedec2f0bb01e6552f230963dc6ad9d6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=BB=BA=E6=98=8E?= <1831033662@qq.com> Date: Wed, 8 Mar 2023 18:22:24 +0800 Subject: [PATCH 2/2] Update service.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 已更改 --- docs/service.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/service.md b/docs/service.md index 0e9617046451d..b0e7152f2acb6 100644 --- a/docs/service.md +++ b/docs/service.md @@ -197,7 +197,7 @@ curl http://192.168.59.100:30000 curl http://192.168.59.100:30000 # [v3] Hello, Kubernetes!, From host: hellok8s-deployment-5d5545b69c-24lw5 ``` -如果是在dockers上构建,那你大概率无法通过`minikube ip`获取到的ip地址来请求,因为在Darwin、Windows、WSL上使用Docker驱动,网络受限,无法直接访问Node IP。你可以通过`minikube service service-hellok8s-nodeport --url`来公开服务,然后通过`curl`或者浏览器访问。(关闭终端或者ctrl+c退出后,服务会自动关闭) +如果本地使用 Docker Desktop(minikube start --driver=docker)的话,那你大概率无法通过`minikube ip`获取到的ip地址来请求,因为 docker 部分网络限制导致无法通过 ip 直连 docker container,这代表 NodePort 类型的 Service、Ingress 组件都无法通过 minikube ip 提供的 ip 地址来访问。无法直接访问Node IP。你可以通过`minikube service service-hellok8s-nodeport --url`来公开服务,然后通过`curl`或者浏览器访问。 ```shell minikube service service-hellok8s-nodeport --url