kubernetes - 具有选择器和显式端点的服务?
问题描述
作为从遗留服务发现框架迁移到 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 作为服务发现的最合理方法是吗?
解决方案
仅使用 Kubernetes 服务无法完成,但我在这里看到了一种解决方法。
我相信,您可以使用由 Nginx Pod(或部署)支持的附加服务,手动配置(通过 config-map)作为两个后端的反向代理:Kubernetes 服务名称(带有选择器,用于新后端)和手动端点(fqdn或 IP,用于遗留后端)。
ingress -> Service1 -> Nginx--> Service2 -> Deployments/Pods
|
---> Endpoint -> Legacy Servers
如何平衡它们之间的流量取决于您。
推荐阅读
- xcode - Cordova ios 6 (6.1.1) 和多个目标
- python - Python:使用 re 将字符串传递给函数
- cobol - 在 cobol 中添加两个整数会产生不需要的结果
- linux - 如何获取 KDE 代理设置
- flutter - 运行 5 分钟后停止的颤振 pub 升级时出错
- c# - 语言相关的排序不适用于所有机器
- sql - Hibernate + SQL Server: One Transaction blocks all other transactions
- javascript - 如何在状态 Vuex/Vue/Nuxt 中添加新的属性对象
- setuptools - python 3.7.6 pip setup.py 测试与 ContextualVersionConflict
- elasticsearch - 流利的位:Logstash_Prefix_Key 无法使用“es”输出插件按预期工作