服务的设计与运行
pod部署后还不能对外提供服务,怎样才能访问?
在Kubernetes中,服务定义了一组pod,并提供了一种访问这些pod的方法以供集群内外的其他应用所使用。
运行一个包含3个market-data pod的复制集,market-data pod有标签app:market-data和tier:backend。这很重要,因为服务根据pod标签把它们合成一组的。
![](https://img.haomeiwen.com/i7749898/bea46c8810a1579f.jpeg)
要创建一个服务,还需要另一个YAML文件,称之为market-data-service.yml。
---
apiVersion: v1
kind: Service
metadata:
name: market-data
spec:
type: NodePort
selector: ---定义服务要访问哪些pod
app: market-data
tier: backend
ports:
- protocol: TCP
port: 8000 ---服务会路由到指定pod的这个端口
nodePort: 30623 --- 这个服务会开放集群指定的端口,没有这一行的话,会随机分配一个30000~32767之间的端口
使用$kubectl apply –f命令来应用这一配置。它会创建一个通过集群的30623端口来访问的服务,这个服务会将请求路由到market-data pod的8000端口。
使用curl工具访问服务并将请求发送到pod。服务将返回处理该请求的pod名称:
$ curl http://`minikube ip`:30623/ping --- `minikube ip` 命令返回本地集群的IP地址
Kubernetes中的服务类型有三类:
![](https://img.haomeiwen.com/i7749898/58d1a36cd5c24da3.jpeg)
使用NodePort类型将服务映射到集群的外部可用端口上,但是如果只有其他集群服务会访问这个微服务,那么使用ClusterIP来保持对集群的本地访问通常更合理。
服务监控集群的事件并在pod组发生变化后动态更新。如果开发者终止了一个pod,则它会被从该组中移除,而服务会将请求路由到复制集新创建的pod上。
摘取自 摩根·布鲁斯和保罗·A.佩雷拉的《微服务实战》