[英]Kubernetes: spring cloud gateway not working
我有一个 spring 云网关,可以在 docker 配置中正常工作,如下所示:(为便于阅读,除评级外的所有路由/服务都已删除)
@Value("${hosts.ratings}")
private String ratingsPath;
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
return builder.routes()
.route(r -> r.host("*").and().path("/api/ratings/**")
.uri(ratingsPath + ":2226/api/ratings/"))
...other routes...
.build();
}
这会从本地的 application.properties 和 docker 中的环境变量获取它的值,就像在 docker-compose 中一样:
apigw:
build: ./Api-Gateway
container_name: apigw
links:
- ratings
...
depends_on:
- ratings
...
ports:
- "80:8080"
environment:
- hosts_ratings=http://ratings
...
这个配置工作得很好。 但是,当将此移植到我们的 kubernetes 集群时,所有路由都会得到 404。我们的 api 网关的部署如下:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: apigw
name: apigw-deployment
spec:
replicas: 1
selector:
matchLabels:
app: apigw
template:
metadata:
labels:
app: apigw
spec:
containers:
- name: apigw
image: redacted
ports:
- containerPort: 8080
env:
- name: hosts_ratings
value: "ratings-service.default.svc.cluster.local"
...
评级服务是我们的评级服务(这绝对有效,因为当直接从其服务中公开它时,它确实有效),定义如下:
apiVersion: v1
kind: Service
metadata:
name: ratings-service
labels:
app: ratings
spec:
selector:
app: ratings
ports:
- port: 2226
targetPort: 2226
我们的 api 网关的服务如下,使用裸机和可以工作的外部 IP:
apiVersion: v1
kind: Service
metadata:
name: apigw-service
labels:
app: apigw
spec:
selector:
app: apigw
ports:
- port: 80
targetPort: 8080
externalIPs:
- A.B.C.D
我认为它应该如何工作,是ratings-service.default.svc.cluster.local
将被转换为正确的 ip,填写到ratingsPath
变量,查询会成功,但事实并非如此。
我们的其他服务能够以相同的方式进行通信,但 api 网关似乎无法做到这一点。 可能是什么问题呢?
根据评论发布社区 wiki 以获得更好的可见性。 随意扩展它。
问题是图像的错误版本:
似乎我直接使用的服务不起作用。 一定是我使用的图像的错误版本。
还要检查:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.