|
6 | 6 | * 前面访问服务的方式是通过 `port-forword` 将 pod 的端口暴露到本地,不仅需要写对 pod 的名字,一旦 deployment 重新创建新的 pod,pod 名字和 IP 地址也会随之变化,如何保证稳定的访问地址呢?。 |
7 | 7 | * 如果使用 deployment 部署了多个 Pod 副本,如何做负载均衡呢? |
8 | 8 |
|
9 | | -`kubernetes` 提供了一种名叫 `Service` 的资源帮助解决这些问题,它为 pod 提供一个稳定的 Endpoint。Servie 位于 pod 的前面,负责接收请求并将它们传递给它后面的所有pod。一旦服务中的 Pod 集合发生更改,Endpoints 就会被更新,请求的重定向自然也会导向最新的 pod。 |
| 9 | +`kubernetes` 提供了一种名叫 `Service` 的资源帮助解决这些问题,它为 pod 提供一个稳定的 Endpoint。Service 位于 pod 的前面,负责接收请求并将它们传递给它后面的所有pod。一旦服务中的 Pod 集合发生更改,Endpoints 就会被更新,请求的重定向自然也会导向最新的 pod。 |
10 | 10 |
|
11 | 11 | ### ClusterIP |
12 | 12 |
|
|
63 | 63 | name: hellok8s-container |
64 | 64 | ``` |
65 | 65 |
|
66 | | -接下来是 `Service` 资源的定义,我们使用 `ClusterIP` 的方式定义 Service,通过 `kubernetes` 集群的内部 IP 暴露服务,当我们只需要让集群中运行的其他应用程序访问我们的 pod 时,就可以使用这种类型的Service。首先创建一个 service-hellok8s-clusterip.yaml` 文件。 |
| 66 | +接下来是 `Service` 资源的定义,我们使用 `ClusterIP` 的方式定义 Service,通过 `kubernetes` 集群的内部 IP 暴露服务,当我们只需要让集群中运行的其他应用程序访问我们的 pod 时,就可以使用这种类型的Service。首先创建一个 service-hellok8s-clusterip.yaml 文件。 |
67 | 67 |
|
68 | 68 | ``` yaml |
69 | 69 | apiVersion: v1 |
@@ -197,7 +197,17 @@ curl http://192.168.59.100:30000 |
197 | 197 | curl http://192.168.59.100:30000 |
198 | 198 | # [v3] Hello, Kubernetes!, From host: hellok8s-deployment-5d5545b69c-24lw5 |
199 | 199 | ``` |
| 200 | +如果本地使用 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`或者浏览器访问。 |
200 | 201 |
|
| 202 | +```shell |
| 203 | +minikube service service-hellok8s-nodeport --url |
| 204 | +# http://127.0.0.1:50896 |
| 205 | +# Because you are using a Docker driver on windows, the terminal needs to be open to run it. |
| 206 | +curl http://127.0.0.1:50896 |
| 207 | +# [v3] Hello, Kubernetes!, From host: hellok8s-deployment-559cfdd58c-zp2pc |
| 208 | +curl http://127.0.0.1:50896 |
| 209 | +# [v3] Hello, Kubernetes!, From host: hellok8s-deployment-559cfdd58c-2j2x2 |
| 210 | +``` |
201 | 211 | ### LoadBalancer |
202 | 212 |
|
203 | 213 | [`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 地址,可以供外部访问。 |
|
0 commit comments