具有url参数的Kubernetes入口路由

时间:2018-12-19 19:51:12

标签: spring-boot kubernetes

由于我明天将没有wifi,这更多是某种理论上的尝试。我需要在“离线模式”下准备入口文件。

我想从ApplicationA路由到ApplicationB。这些路由有望能够携带url参数。两个应用程序都使用spring bootREST。集群(当前)由minikube设置。

例如我在ServiceAhttp://url.com/customerapi/getCustomerById?id=5中得到了这个URL。该网址应符合ApplicationB中定义的方法。使用ApplicationB和端口31001可以访问customerservice

它和下面的入口一样简单吗?多数民众赞成在直接。最好的问候。

我会这样定义kubernetes ingress

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: serviceA
spec:
  rules:
  - http:
      paths:
      - path: /customerapi
        backend:
          serviceName: customerservice
          servicePort: 31001

1 个答案:

答案 0 :(得分:1)

如果我对您的理解正确,那么您希望根据URL将来自网络的流量路由到两个后端。

您可以通过以下方式设置Ingress:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: cafe-ingress-nginx
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: url.com
    http:
      paths:
      - path: /test1
        backend:
          serviceName: test1-svc
          servicePort: 80
      - path: /test2
        backend:
          serviceName: test2-svc
          servicePort: 80

这将从url.com/test1到后端test1-svc的所有路由,从url.com/test2到后端test2-svc的所有路由。

如果您需要在Url内使用参数,我认为以下方法会起作用:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test
  annotations:
    ingress.kubernetes.io/query-routing: default/query-routing
spec:
  backend:
    serviceName: default-backend
    servicePort: 80
  rules:
  - host: url.com

---

kind:ConfigMap
apiVersion: v1
metadata:
  name: query-routing
data:
  mapping: |-
    [{
      "field": "getCustomerById",
      "value": "1",
      "path": "customerapi/",
      "service": "customerservice",
      "port": "31001"
    }]

但是请在您的示例中对其进行测试,因为您的问题中没有足够的细节。

有一种使用Header注释从nginx.ingress.kubernetes.io/server-snippet捕获参数的方法。 Shopify正在使用这一特定功能,用法here进行了说明。有关更多注释,请检查Kubernetes NGINX Ingress Controller