kubernetes-将进入流量路由到某些路径的特定pod

kubernetes-将进入流量路由到某些路径的特定pod,kubernetes,routes,kubernetes-ingress,nginx-ingress,Kubernetes,Routes,Kubernetes Ingress,Nginx Ingress,我有多个吊舱,可以自动上下伸缩 我使用入口作为入口点。我需要根据某些条件(比如路径)将外部流量路由到特定的pod基地。在发出请求时,我确信特定的pod已启动 例如,假设我有一个域someTest.com,它通常将流量路由到pod 1、2和3(假设我通过内部IP识别它们-192.168.1.10、192.168.1.11和192.168.1.13) 当我调用someTest.com/specialRequest/12时,我需要将流量路由到192.168.1.12;当我调用someTest.com/

我有多个吊舱,可以自动上下伸缩

我使用入口作为入口点。我需要根据某些条件(比如路径)将外部流量路由到特定的pod基地。在发出请求时,我确信特定的pod已启动

例如,假设我有一个域someTest.com,它通常将流量路由到pod 1、2和3(假设我通过内部IP识别它们-192.168.1.10、192.168.1.11和192.168.1.13)

当我调用someTest.com/specialRequest/12时,我需要将流量路由到192.168.1.12;当我调用someTest.com/specialRequest/13时,我想要将流量路由到192.168.1.13。对于正常情况(someTest.com/normalRequest),我只想让lb正常地完成他的史诗般的工作

如果pod向上扩展并且出现192.168.1.14,我需要能够调用someTest.com/specialRequest/14并被路由到提到的pod


有什么方法可以实现这一点吗?

是的,您可以使用Kubernetes入口轻松实现这一点。以下是可能有帮助的示例代码:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: app-ingress
  spec:
    rules:
    - host: YourHostName.com
      http:
        paths:
        - path: /
          backend:
            serviceName: Service1
            servicePort: 8000
        - path: /api
          backend:
            serviceName: Service2
            servicePort: 8080
        - path: /admin
          backend:
            serviceName: Service3
            servicePort: 80
请注意,入口规则中没有服务名称,也没有pod名称,因此您必须为您的pod创建服务。下面是一个在Kubernetes中将nginx公开为服务的服务示例:

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  labels:
    io.kompose.service: nginx
spec:
  ports:
  - name: "80"
    port: 80
    targetPort: 80
  selector:
    io.kompose.service: nginx

我不知道实现这一点的内置功能(如果这是您真正想要的)。您可以通过为Kubernetes构建自己的。您的运营商可以提供一个Pod+Ingress组合,这将完全满足您的需求-将您的流量转发到一个Pod,或者您可以提供2个Pod和1个入口以实现HA设置

根据您正在使用的入口,还可以将多个入口资源分组到同一负载平衡器下

下面是一个简单的图表,说明了这可能是什么样子。
创建另一个应用程序是否可行 它可以直接通过 命名约定中的模式?比如说


${podnamePrefix+param}.${service name}.${namespace}.svc.cluster.local

+1以获取帮助,欢迎使用SO:)。但这正是我的问题。POD自动扩展,服务手动创建。我需要的是动态的(pod)而不是静态的(服务)。哈哈,谢谢@zozo。即使吊舱可以扩展,该服务也可以作为负载平衡器工作。服务是公开在一组pod上运行的应用程序的抽象方式。所以,如果你所有的豆荚都做相同的事情,那么这应该是好的。你可以分享你的豆荚yaml或服务yaml。这不是一个“正常”的网页设置,这些都是相当琐碎的定义。这些是多用户通信工具的套接字。我需要连接到一个精确的吊舱,因为他的对手在那里发送数据。在正常设置中,连接到哪里并不重要。想象一下,比如聊天室。每个房间“居住”在一个吊舱上。当所有人都退出时,pod将被删除。但是,当有人仍然连接到房间时,其他人必须能够连接到同一个吊舱,特别是。POD做同样的事情,但存储的内部动态数据不完全相同。因此,从外部客户端(我保留聊天室示例,因为它是我的问题的一个过于简化的版本,但逻辑上非常接近)的角度来看,用户创建了一个类似myEpicChat.com/room的聊天室,用户连接到myEpicChat.com/room(1个服务)。但在它的背后,一个新的吊舱是专门为该房间创建的,所有用户都会打开特定吊舱的插座。在这种情况下,您没有对流量进行负载平衡,而是对流量进行路由。客户不知道,也不应该知道。他连接到该服务。但是服务必须知道确切的目的地。你试过或吗?或者这在您的用例中不起作用?这将解决诸如回退到轮询或重新创建连接之类的问题,但不,不适用于我的情况,因为第二个用户正在使用完全不同的会话。您能看看这个吗?我想这也许能回答你的问题。至于nginx,我认为没有简单的方法可以做到这一点。@Jakub乍一看,我也认为这可以解决我的问题。。。但这是一个具有多条路径的服务。因此,除非有办法将特定路径发送到特定的pod是没有帮助的,回到最初的问题,如何将流量路由到特定的pod,对于特定的路径:)。实际上,我找到了一种在nginx入口中添加位置块的方法,并在那里设置了一个代理传递。设法使它在本地工作,但由于某种原因在生产中失败了。如果我能成功的话,我会把它作为一个答案添加进来:)。它可能需要一个用于ingress nginx的。端点数据在中作为“后端”可用。或者一个新的选择后端。我认为这是正确的答案。我再给它一天,然后我接受它,除非有更好的东西出现。