普通的 Service 通过 Label Selector 对后端 Endpoint 列表进行了一次抽象,如果后端的 Endpoint 不是由 Pod 提供的则 Service 还可以抽象定义任意其他服务,将一个 Kubernetes 集群外部的已知服务定义为 Kubernetes 内的一个 Service,供集群内的其他应用访问,常见的应用常见包括:
- 已部署的一个集群外服务,例如数据库服务、缓存服务等;
- 其他 Kubernetes 集群的某个服务;
- 迁移过程中对某个服务进行 Kubernetes 内的服务名访问机制的验证。
对于这种应用场景,用户在创建 Service 资源对象时不设置 Label Selector(后端 Pod 也不存在),同时再定义一个与 Service 关联的 Endpoint 资源对象,在 Endpoint 中设置外部服务的 IP 地址和端口号,例如:
- 编辑 yaml 配置
[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
- 创建 Service 和 Endpoints
[root@k8s0 service]# kubectl create -f service_qijing.yaml service/qijing-service created endpoints/qijing-service created
查看服务状态:
管理界面:
应用首页:
OK。