使用副本数>1的Artemis Operator时暴露WebConsole的问题
解决Artemis Broker实例WebConsole带前缀Ingress重写问题
你遇到的问题本质是Artemis WebConsole的前端资源默认使用根路径引用,单纯通过Ingress的rewrite-target只能重写请求路径,但页面里的静态资源(比如CSS、JS)还是会请求根路径下的资源,导致404,所以直接前缀重写不生效。
给你两个可行的解决办法:
方法一:用Nginx配置注入Base标签修正路径
针对每个Broker实例的Ingress,添加configuration-snippet注解,在返回的HTML中插入<base>标签,让所有相对路径资源自动带上前缀。
实例0的Ingress配置示例:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: artemis-instance0-ingress annotations: nginx.ingress.kubernetes.io/use-regex: "true" nginx.ingress.kubernetes.io/rewrite-target: /$1 nginx.ingress.kubernetes.io/configuration-snippet: | sub_filter '<head>' '<head><base href="/instance0/">'; sub_filter_once on; spec: rules: - host: your-domain.com http: paths: - path: /instance0/(.*) pathType: ImplementationSpecific backend: service: name: broker-webconsole-svc-0 port: number: 8080
对instance1的Ingress做同样配置,把/instance0/换成/instance1/,对应到broker-webconsole-svc-1即可。
方法二:使用子域名映射(更简单)
不需要前缀,给每个实例分配独立子域名,直接映射到对应Service,避免路径重写的问题。
实例0的Ingress配置:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: artemis-instance0-ingress spec: rules: - host: instance0.your-domain.com http: paths: - path: /(.*) pathType: ImplementationSpecific backend: service: name: broker-webconsole-svc-0 port: number: 8080
同理配置instance1的子域名instance1.your-domain.com对应到它的Service。
这两种方法都能解决你现在的问题,子域名方案更省心,不需要处理路径重写的兼容性问题。
内容的提问来源于stack exchange,提问作者AndreaG
相关产品推荐
相关产品推荐

