Kubernetes中的Zuul部署

时间:2019-02-08 19:08:55

标签: kubernetes microservices netflix-zuul api-gateway

这是我第一次尝试将微服务架构部署到Kubernetes中。刚开始,我正在考虑使用大使作为我的API网关。我还有一个验证服务,可以验证用户并生成JWT令牌,但是,我需要验证此令牌 每次调用服务时。这代表了一个过载问题(因为API网关每次接收到流量后,都会去到该外部身份验证服务以验证JWT令牌),而大使没有选择权,可以不使用外部服务来进行此过滤。

在这种情况下,使用Zuul网关似乎是最好的选择,因为它允许我验证网关内的JWT令牌(而不是通过诸如Ambassador之类的外部服务)。但是,我不确定将Zuul部署到Kubernetes中会如何工作,因为据我了解,Zuul需要提供服务发现的地址(例如Eureka)。

如果我在Kubernetes集群中部署Zuul,那么它将如何找到我的服务?

例如,在本地就没有问题,因为我以前使用过Eureka,而且我知道它的地址。另外,我认为在Kubernetes中部署Eureka并不是一个好主意,因为它将是多余的。

如果用Zuul无法做到这一点,是否还有另一种API网关或方法可以让我使用网关来验证令牌,而不是像Ambassador那样依赖于外部身份验证服务?

谢谢。

1 个答案:

答案 0 :(得分:7)

在kubernetes中,您已经具有“发现”服务,即kubernetes-service。它可以定位吊舱并充当它们的负载平衡器。

假设您具有这样的Zuul配置:

zuul:
  routes:
    books-service:
      path: /books/**
      serviceId: books-service

将匹配/books/**的请求路由到服务books-service。通常,您有一个尤里卡(Eureka),可以为您提供真实地址books-service,但现在不行。

这是Ribbon可以为您提供帮助的地方-它允许您在Zuul匹配其请求之后手动调整路由。因此,您需要将其添加到配置中:

books-service.ribbon.listOfServers: "http://books:8080"

Zuul找到serviceId(books-service)之后,它将把请求路由到books:8080

books:8080仅仅是一个kubernetes服务:

kind: Service
apiVersion: v1
metadata:
  name: books
spec:
  selector:
    app: spring-books-service
  ports:
  - protocol: TCP
    port: 8080
    targetPort: 9376

您可以说它是一个负载均衡器,它从8080接收流量,并将其重定向到标签为app: spring-books-service的Pod。

接下来要做的就是将标签分配给豆荚(例如通过部署)

顺便说一句,您可以在任何应用程序中像这样配置Ribbon,并且kubernetes会使用其服务来查找所有应用程序(pod),因此您根本不需要任何发现服务!而且由于k8s服务比Eureka更可靠,因此您只需将其删除即可。