https://www.jianshu.com/p/de2eb6ba10d5
普通的 Service 通过 Label Selector 对后端 Endpoint 列表进行了一次抽象,如果后端的 Endpoint 不是由 Pod 提供的则 Service 还可以抽象定义任意其他服务,将一个 Kubernetes 集群外部的已知服务定义为 Kubernetes 内的一个 Service,供集群内的其他应用访问,常见的应用常见包括:
已部署的一个集群外服务,例如数据库服务、缓存服务等;
其他 Kubernetes 集群的某个服务;
迁移过程中对某个服务进行 Kubernetes 内的服务名访问机制的验证。
对于这种应用场景,用户在创建 Service 资源对象时不设置 Label Selector(后端 Pod 也不存在),同时再定义一个与 Service 关联的 Endpoint 资源对象,在 Endpoint 中设置外部服务的 IP 地址和端口号,例如:
[root@k8s0 service]# cat >service_qijing.yaml << EOF
---
apiVersion: v1
kind: Service
metadata:
name: qijing-service
spec:
type: NodePort
ports:
- protocol: TCP
port: 10000
targetPort: 10000
nodePort: 80
---
apiVersion: v1
kind: Endpoints
metadata:
name: qijing-service
subsets:
- addresses:
- ip: <your ip>
ports:
- port: 10000
EOF
[root@k8s0 service]# kubectl create -f service_qijing.yaml
service/qijing-service created
endpoints/qijing-service created
查看服务状态:
管理界面:
应用首页:
OK。