Kubernetes中的Zuul部署

Car*_*mez 4 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那样依赖于外部身份验证服务?

谢谢。

Ran*_*Guy 10

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

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

zuul:
  routes:
    books-service:
      path: /books/**
      serviceId: books-service
Run Code Online (Sandbox Code Playgroud)

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

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

books-service.ribbon.listOfServers: "http://books:8080"
Run Code Online (Sandbox Code Playgroud)

在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
Run Code Online (Sandbox Code Playgroud)

您可以说它是一个负载均衡器,它从:8080获取流量并将其重定向到带有label的pod app: spring-books-service

接下来要做的就是为吊舱分配标签(例如,通过部署)

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