Kubernetes 主动/被动路由具有多个后端的无头服务

Kubernetes 主动/被动路由具有多个后端的无头服务,kubernetes,tcp,kubernetes-ingress,Kubernetes,Tcp,Kubernetes Ingress,我正在kube为一个应用程序设置主动/被动路由,这超出了典型的K8S用例。我试图在具有多个后端的无头服务中找到与路由或负载平衡相关的配置。到目前为止,我已经设法将流量路由到后端,但我需要确保流量路由正确。应用程序需要TCP连接,主/次实例具有不同的配置(需要不同的部署对象)。如果发生故障转移,则在主路由恢复后,它将返回主路由 路由始终按照所需的方式运行,但没有任何文档或配置会表明这一点。我发现有文档说明,由于dns条目的顺序,它应该是循环的或随机的。问题的关键是:我能依靠这种行为吗?由于这是没有

我正在kube为一个应用程序设置主动/被动路由,这超出了典型的K8S用例。我试图在具有多个后端的无头服务中找到与路由或负载平衡相关的配置。到目前为止,我已经设法将流量路由到后端,但我需要确保流量路由正确。应用程序需要TCP连接,主/次实例具有不同的配置(需要不同的部署对象)。如果发生故障转移,则在主路由恢复后,它将返回主路由

路由始终按照所需的方式运行,但没有任何文档或配置会表明这一点。我发现有文档说明,由于dns条目的顺序,它应该是循环的或随机的。问题的关键是:我能依靠这种行为吗?由于这是没有文档记录的,也没有明确配置,我担心它会在未来的版本或部署中发生变化

我正在使用Rancher和canal网络层。 我读过印花布和法兰绒的文件。 端点/端点切片和dns条目都不表示任何路由顺序

当前,安装程序有两个由无头服务选择的部署。部署的POD在部署1中的主机名为input primary,在部署2中的主机名为input secondary。我可以通过dns以input-primary.myservice或input-secondary.myservice的形式访问它们中的任何一个

入口控制器tcp服务配置映射中有一个“我的服务”条目:

25252:default/myservice:9999

以及k8s配置的简化版本:

ApiVersion: v1
kind: Service
metadata:
  name:myservice
spec:
  clusterIP: None
  ports:
  - name: input
    port: 9999
selector:
  app: myapp
  type: ClusterIP
----
apiVersion: apps/v1beta2
kind: Deployment
metadata:
  labels:
    app: myapp
  name: input-primary
spec:
  hostname: input-primary
  containers:
  - ports:
    - containerport: 9999
      name: input
      protocol: TCP
----
apiVersion: apps/v1beta2
kind: Deployment
metadata:
  labels:
    app: myapp
  name: input-secondary
spec:
  hostname: input-secondary
  containers:
  - ports:
    - containerport: 9999
      name: input
      protocol: TCP```


你能更详细地解释一下你的故障转移场景吗?为什么主设备和辅助设备有不同的配置?为什么您不能拥有多个主副本,并使用Liveity和readiness Probe来确保用户始终访问一个健康的实例?不同配置的原因是应用程序内部的。这是一个传统应用程序,它已签约成为云本地应用程序,而没有时间更改应用程序本身。我一直在推动主动/主动或至少均匀化配置,但目前主/辅组件是应用程序中一个不灵活的组件。我不能只使用就绪探测,因为主服务器需要与次服务器同步,但就绪探测失败会阻止DNS条目的生成。是通过特定端点识别的,因此K8s DNS发现机制为它们存储相应的A记录,而无需群集IP分配(通过
kube代理进行网络流量管理)。由于DNS条目强烈依赖于在DNS缓存中保存记录的值,因此记录顺序可能不一致,因此我不希望使用循环算法,而是使用随机算法。