[英]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.