一、将外部服务定义为Service
普通的Service通过Label Selector对后端Endpoint列表进行一次抽象,如果后端Endpoint不是Pod副本提供的,则Service还可以抽象定义任意其它服务,将一个Kubernetes集群外部的已知服务定义为Kubernetes内的一个Service,提供集群内的其他应用访问,常见的应用常见包括:
- 已部署的集群外服务,例如数据库服务、缓存服务等
- 其他Kubernetes集群的某个服务
- 迁移过程中对某个服务进行Kubernetes内的服务名访问机制的验证
对与这种场景,用户创建Service资源对象时不设置Label Selector(后端Pod也不存在),同时再定义一个Service关联的Endpoint资源对象,在Endpoint中设置外部服务的IP地址和端口号
############
apiVersion: v1
kind: Service
metadata:
name: myservice
sepc:
ports:
- protocol: TCP
port: 80
targetPort: 80
################
apiVersion: v1
kind: Endpoints
metadata:
name: myservice
subsets:
- addresses:
- IP: 1.2.3.4
ports:
- port: 80
如图:访问没有标签选择器的Service和带有标签选择器的Service一样,请求将被路由到用户自定义的后端Endpoint上