通过 Service 访问 Pod
2018-03-02 14:27
369 查看
我们不应该期望 Kubernetes Pod 是健壮的,而是要假设 Pod 中的容器很可能因为各种原因发生故障而死掉。Deployment 等 controller 会通过动态创建和销毁 Pod 来保证应用整体的健壮性。换句话说,Pod 是脆弱的,但应用是健壮的。
每个 Pod 都有自己的 IP 地址。当 controller 用新 Pod 替代发生故障的 Pod 时,新 Pod 会分配到新的 IP 地址。这样就产生了一个问题:
如果一组 Pod 对外提供服务(比如 HTTP),它们的 IP 很有可能发生变化,那么客户端如何找到并访问这个服务呢?
Kubernetes 给出的解决方案是 Service。
来看个例子,创建下面的这个 Deployment:
我们启动了三个 Pod,运行 httpd 镜像,label 是
Pod 分配了各自的 IP,这些 IP 只能被 Kubernetes Cluster 中的容器和节点访问。
接下来创建 Service,其配置文件如下:
①
② 指明当前资源的类型为
③ Service 的名字为
④
⑤ 将 Service 的 8080 端口映射到 Pod 的 80 端口,使用 TCP 协议。
执行
根据前面的端口映射,这里要使用 8080 端口。另外,除了我们创建的
通过
每个 Pod 都有自己的 IP 地址。当 controller 用新 Pod 替代发生故障的 Pod 时,新 Pod 会分配到新的 IP 地址。这样就产生了一个问题:
如果一组 Pod 对外提供服务(比如 HTTP),它们的 IP 很有可能发生变化,那么客户端如何找到并访问这个服务呢?
Kubernetes 给出的解决方案是 Service。
创建 Service
Kubernetes Service 从逻辑上代表了一组 Pod,具体是哪些 Pod 则是由 label 来挑选。Service 有自己 IP,而且这个 IP 是不变的。客户端只需要访问 Service 的 IP,Kubernetes 则负责建立和维护 Service 与 Pod 的映射关系。无论后端 Pod 如何变化,对客户端不会有任何影响,因为 Service 没有变。来看个例子,创建下面的这个 Deployment:
我们启动了三个 Pod,运行 httpd 镜像,label 是
run: httpd,Service 将会用这个 label 来挑选 Pod。
Pod 分配了各自的 IP,这些 IP 只能被 Kubernetes Cluster 中的容器和节点访问。
接下来创建 Service,其配置文件如下:
①
v1是 Service 的
apiVersion。
② 指明当前资源的类型为
Service。
③ Service 的名字为
httpd-svc。
④
selector指明挑选那些 label 为
run: httpd的 Pod 作为 Service 的后端。
⑤ 将 Service 的 8080 端口映射到 Pod 的 80 端口,使用 TCP 协议。
执行
kubectl apply创建 Service
httpd-svc。
httpd-svc分配到一个 CLUSTER-IP
10.99.229.179。可以通过该 IP 访问后端的 httpd Pod。
根据前面的端口映射,这里要使用 8080 端口。另外,除了我们创建的
httpd-svc,还有一个 Service
kubernetes,Cluster 内部通过这个 Service 访问 kubernetes API Server。
通过
kubectl describe可以查看
httpd-svc与 Pod 的对应关系。
Endpoints罗列了三个 Pod 的 IP 和端口。
相关文章推荐
- 通过 Service 访问 Pod - 每天5分钟玩转 Docker 容器技术(136)
- 通过 Service 访问 Pod - 每天5分钟玩转 Docker 容器技术(136)
- 通过 Service 访问 Pod - 每天5分钟玩转 Docker 容器技术(136)
- 通过 Service 访问 Pod - 每天5分钟玩转 Docker 容器技术(136)
- Windows Azure Cloud Service (21) 通过远程桌面功能访问Windows Azure 计算节点
- ACTIVEFORM+WebService+ACCESS,Web客户端通过WebService访问Access数据库
- 通过HTTP访问SQL Server Analysis Service 2005
- [k8s]通过svc来访问集群podhttp://api:8080/api/v1/namespaces/default/services/mynginx/proxy/
- Silverlight通过Wcf Data Service访问数据库之ADO.NET Entity Framework篇
- 通过aAlarmmanger、Service、BroadcastReceiver实现定时访问任务
- 通过ExecutorService实现单例的同步访问控制
- kubernetes学习记录(3)——集群外部访问Pod或Service
- android中getSystemService通过系统提供的Manager接口来访问及设置服务数据
- Httpclient通过FutureRequestExecutionService异步访问
- 通过url访问Reporting Service中的报表
- 通过SMP访问REST Service的几种方法
- java webservice 总结(学会读别人的webservice并且通过代理模式访问)
- 通过ksoap2访问donet webservice
- C#发布WebService提供使用时候,通过服务器解决前端js跨域访问问题
- sharepoint2010不能通过ip地址或localhost访问组件和自定义内容的解决方法