首页 > 解决方案 > 具有选择器和显式端点的服务?

问题描述

作为从遗留服务发现框架迁移到 kube/CoreDNS 的一部分,我想创建一个知道如何自动发布的服务Endpoints,但有手动创建的端点。

本质上,我认为我想要以下内容:

---
kind: Service
apiVersion: v1
metadata:
  name: my-service
spec:
  selector:
    app: MyApp
  ports:
  - protocol: TCP
    port: 80
---
kind: Endpoints
apiVersion: v1
metadata:
  name: my-service
  annotations:
    transition: legacy
subsets:
- addresses:
  - ip: 1.2.3.4
  ports:
  - port: 9376
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: service-discovery-backend
  labels:
    app: MyApp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: MyApp
  template:
    metadata:
      labels:
        app: MyApp
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

但是,正如文档所暗示的那样,像这样明确设置会导致只有一个 Endpoints 对象与服务相关联——无论是服务的自动创建的对象还是我手动指定的对象似乎都不同。

对于知道如何自我发布的服务和外部服务手动控制端点,直到我们 100% 迁移,然后切换到基于选择器的方法,使用 CoreDNS 作为服务发现的最合理方法是吗?

标签: kubernetesservice-discovery

解决方案


仅使用 Kubernetes 服务无法完成,但我在这里看到了一种解决方法。

我相信,您可以使用由 Nginx Pod(或部署)支持的附加服务,手动配置(通过 config-map)作为两个后端的反向代理:Kubernetes 服务名称(带有选择器,用于新后端)和手动端点(fqdn或 IP,用于遗留后端)。

ingress -> Service1 -> Nginx--> Service2 -> Deployments/Pods
                          | 
                           ---> Endpoint -> Legacy Servers

如何平衡它们之间的流量取决于您。


推荐阅读