kubernetes - 将入口流量路由到某些路径的特定 pod
kubernetes - route ingress traffic to specific pod for some paths
我有多个 pods,可以自动放大和缩小。
我正在使用入口作为入口点。我需要根据某些条件(比如说路径)将外部流量路由到特定的 pod。在发出请求时,我确定特定的 pod 已启动。
例如,假设我有域 someTest.com,它通常将流量路由到 pod 1、2 和 3(假设我通过内部 ips 识别它们 - 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 正常完成他的史诗般的工作。
如果 pods 放大并出现 192.168.1.14,我需要能够调用 someTest。com/specialRequest/14 并被路由到提到的 pod。
有什么办法可以实现吗?
是的,您可以使用 Kubernetes Ingress 轻松实现这一目标。这是一个可能有帮助的示例代码:
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
请注意入口规则有 serviceNames 而不是 pod 名称,因此您必须为您的 pods 创建服务。以下是将 nginx 公开为 Kubernetes 中的服务的示例:
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 构建自己的 operator 来实现这一点。您的运营商可能会提供一个 Pod+Ingress 组合,这将完全满足您的需求 - 将您的流量转发到单个 pod,或者您可以提供 2 pods 和 1 个入口以实现 HA 设置。
根据您使用的入口,也可以将多个入口资源分组在同一个负载均衡器下。
这里有一张简图,展示了它的样子。
创建另一个应用程序是否可行
可以获取路径并直接通过
命名约定中的模式?例如
${podnamePrefix+param}.${服务名称}.${命名空间}.svc.cluster.local
我有多个 pods,可以自动放大和缩小。
我正在使用入口作为入口点。我需要根据某些条件(比如说路径)将外部流量路由到特定的 pod。在发出请求时,我确定特定的 pod 已启动。
例如,假设我有域 someTest.com,它通常将流量路由到 pod 1、2 和 3(假设我通过内部 ips 识别它们 - 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 正常完成他的史诗般的工作。
如果 pods 放大并出现 192.168.1.14,我需要能够调用 someTest。com/specialRequest/14 并被路由到提到的 pod。
有什么办法可以实现吗?
是的,您可以使用 Kubernetes Ingress 轻松实现这一目标。这是一个可能有帮助的示例代码:
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
请注意入口规则有 serviceNames 而不是 pod 名称,因此您必须为您的 pods 创建服务。以下是将 nginx 公开为 Kubernetes 中的服务的示例:
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 构建自己的 operator 来实现这一点。您的运营商可能会提供一个 Pod+Ingress 组合,这将完全满足您的需求 - 将您的流量转发到单个 pod,或者您可以提供 2 pods 和 1 个入口以实现 HA 设置。
根据您使用的入口,也可以将多个入口资源分组在同一个负载均衡器下。
这里有一张简图,展示了它的样子。
创建另一个应用程序是否可行 可以获取路径并直接通过 命名约定中的模式?例如
${podnamePrefix+param}.${服务名称}.${命名空间}.svc.cluster.local