gpt4 book ai didi

spring - 无法通过Kubernetes入口访问websocket

转载 作者:行者123 更新时间:2023-12-02 11:37:45 25 4
gpt4 key购买 nike

我已经在GCP的Kubernetes集群上部署了两项服务:

一个是Spring Cloud Api Gateway实现:

apiVersion: v1
kind: Service
metadata:
name: api-gateway
spec:
ports:
- name: main
port: 80
targetPort: 8080
protocol: TCP
selector:
app: api-gateway
tier: web
type: NodePort

另一个是后端聊天服务实现,该实现在 /ws/路径处公开WebSocket。
apiVersion: v1
kind: Service
metadata:
name: chat-api
spec:
ports:
- name: main
port: 80
targetPort: 8080
protocol: TCP
selector:
app: chat
tier: web
type: NodePort

API网关通过 Contour Ingress Controller公开给互联网:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: api-gateway-ingress
annotations:
kubernetes.io/tls-acme: "true"
certmanager.k8s.io/cluster-issuer: "letsencrypt-prod"
ingress.kubernetes.io/force-ssl-redirect: "true"
spec:
tls:
- secretName: api-gateway-tls
hosts:
- api.mydomain.com.br
rules:
- host: api.mydomain.com.br
http:
paths:
- backend:
serviceName: api-gateway
servicePort: 80

网关将传入 call 路由到 /chat/路径到 /ws/上的聊天服务:
@Bean
public RouteLocator routes(RouteLocatorBuilder builder) {
return builder.routes()
.route(r -> r.path("/chat/**")
.filters(f -> f.rewritePath("/chat/(?<segment>.*)", "/ws/(?<segment>.*)"))
.uri("ws://chat-api"))
.build();
}

当我尝试通过网关连接到WebSocket时,出现403错误:
error: Unexpected server response: 403
我什至尝试使用http,https,ws和wss连接,但错误仍然存​​在。

有人知道吗?

最佳答案

我在Contour 0.5.0中使用Ingress资源时遇到了相同的问题,但是我设法通过
使用IngressRoute将Contour升级到v0.6.0-beta.3(不过请注意,它是beta版)。

您可以像这样添加IngressRoute资源(crd)(删除先前的Ingress资源):

#ingressroute.yaml
apiVersion: contour.heptio.com/v1beta1
kind: IngressRoute
metadata:
name: api-gateway-ingress
namespace: default
spec:
virtualhost:
fqdn: api.mydomain.com.br
tls:
secretName: api-gateway-tls
routes:
- match: /
services:
- name: api-gateway
port: 80
- match: /chat
enableWebsockets: true # Setting this to true enables websocket for all paths that match /chat
services:
- name: api-gateway
port: 80

然后应用

Websocket仅在 /chat路径上被授权。

有关Contour IngressRoute的更多详细信息,请参见 here

关于spring - 无法通过Kubernetes入口访问websocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51795709/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com