路由 gRPC 调用和 http 调用的入口

问题描述 投票:0回答:1

我正在尝试为我的 microk8s 杂波上的 nginx 入口控制器编写 2 个入口规则:

  • 用于将所有 gRPC 调用路由到后端(
    api
    服务)。 RPC 路径均遵循以下模式:
    /thing.v1.ThingService/AMethod
    ,例如:
    /pizzas.v1.PizzasService/ListFlavours
  • 将其余流量路由到前端(
    fe
    服务)

这就是我所拥有的:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: fanout-ingress
  annotations:
    nginx.ingress.kubernetes.io/force-ssl-redirect: 'true'
    cert-manager.io/issuer: letsencrypt-prod
spec:
  ingressClassName: nginx
  rules:
  - host: dev.fancy.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: fe
            port:
              number: 80
  tls:
  - hosts:
    - dev.fancy.com
    secretName: letsencrypt-prod-tls
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: fanout-ingress-grpc
  annotations:
    nginx.ingress.kubernetes.io/force-ssl-redirect: 'true'
    nginx.ingress.kubernetes.io/backend-protocol: 'GRPC'
    cert-manager.io/issuer: letsencrypt-prod
spec:
  ingressClassName: nginx
  rules:
  - host: dev.fancy.com
    http:
      paths:
      - path: "/.*Service.*"
        pathType: ImplementationSpecific
        backend:
          service:
            name: api
            port:
              number: 8080
  tls:
  - hosts:
    - dev.fancy.com
    secretName: letsencrypt-prod-tls

在此配置中,调用

/pizzas.v1.PizzasService/ListFlavours
不起作用,它会返回 404。

如果我在

fanout-ingress-grpc
规则中使用这个更具体的配置,一切都会正常:

    http:
      paths:
      - path: /pizzas.v1.PizzasService/ListFlavours"
        pathType: ImplementationSpecific

所以看来是正则表达式不起作用。请给我任何指导吗?

kubernetes nginx grpc kubernetes-ingress nginx-ingress
1个回答
0
投票

根据文档,您可以使用此注释:

nginx.ingress.kubernetes.io/use-regex:“true”

© www.soinside.com 2019 - 2024. All rights reserved.