这是我第一次尝试将微服务架构部署到Kubernetes中。刚开始,我正在考虑使用大使作为我的API网关。我也有一个身份验证服务,它可以验证用户并生成JWT令牌,但是,每次调用服务时,我都需要验证此令牌。这代表了一个过载问题(因为API网关每次接收到流量后,都会去到该外部身份验证服务以验证JWT令牌),并且大使没有选择权,可以在不使用外部服务的情况下进行此过滤。
在这种情况下,使用Zuul网关似乎是最好的选择,因为它允许我验证网关内部的JWT令牌(而不是通过Ambassador之类的外部服务)。但是,我不确定将Zuul部署到Kubernetes中会如何工作,因为据我了解,Zuul需要具有服务发现的地址(例如Eureka)。
如果我在Kubernetes集群中部署Zuul,那么它将如何找到我的服务?
例如在本地,因为我以前使用过Eureka,所以没有问题,而且我知道它的地址。另外,我认为在Kubernetes中部署Eureka并不是一个好主意,因为这将是多余的。
如果用Zuul无法做到这一点,是否还有另一个API网关或方法可以让我使用网关来验证令牌,而不是像Ambassador那样依赖于外部身份验证服务?
谢谢。
我目前正在 Kubernetes 中运行 Spring Boot Pod。云 SQL 代理的 pod 中有一个侧车。
下面是我的 spring Boot application.properties 配置:
server.port=8081
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=create-drop
spring.datasource.continue-on-error=true
spring.datasource.url=jdbc:mysql://localhost:3306/<database_name>
spring.datasource.username=<user_name>
spring.datasource.password=<password>
Run Code Online (Sandbox Code Playgroud)
下面是我的带有插件和依赖项的 pom.xml 摘录:
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-hateoas</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>ca.performance.common</groupId>
<artifactId>common-http</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>com.google.cloud.sql</groupId>
<artifactId>mysql-socket-factory</artifactId>
<version>1.0.10</version>
</dependency>
<dependency> …
Run Code Online (Sandbox Code Playgroud)