Kubernetes中Confluent Kafka Control Center Ingress路由配置问题求助
解决Confluent Control Center通过Ingress访问时静态资源加载失败的问题
你的问题核心是Control Center默认基于根路径生成静态资源链接,而你的Ingress配置了/confluent-control-center前缀,导致页面里的静态资源请求(比如/dist/css/main.css)会直接发往acme.com/dist/...,而非acme.com/confluent-control-center/dist/...,最终返回404错误。
下面是具体的修复步骤:
1. 修改Ingress配置,正确处理路径转发
更新你的Ingress YAML,调整路径匹配规则和rewrite注解,确保带前缀的请求能正确转发到Control Center服务:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-srv annotations: # 使用捕获组匹配前缀后的路径,转发时保留后续路径 nginx.ingress.kubernetes.io/rewrite-target: /$2 spec: ingressClassName: nginx rules: - host: acme.com http: paths: - path: /confluent-control-center(/|$)(.*) pathType: Prefix backend: service: name: controlcenter-bootstrap-lb port: number: 80
path: /confluent-control-center(/|$)(.*):用正则捕获/confluent-control-center之后的所有路径(比如/dist/js/app.js会被捕获为$2)rewrite-target: /$2:将请求转发到Control Center服务的对应路径(即把/confluent-control-center/dist/js/app.js转发为/dist/js/app.js)
2. 配置Control Center使用自定义路径前缀
需要让Control Center知道它的外部访问前缀是/confluent-control-center,这样它生成的页面里的静态资源链接会自动带上这个前缀。
方法:修改Control Center的Deployment
执行命令编辑Deployment:
kubectl edit deployment <control-center-deployment-name>
在spec.template.spec.containers[0].env下添加以下环境变量:
- name: CONTROL_CENTER_WEB_UI_PATH value: "/confluent-control-center" - name: CONTROL_CENTER_REST_LISTENERS value: "http://0.0.0.0:9021"
注:如果是用Confluent Operator部署的集群,需要修改ControlCenter CRD的
spec.config.web.ui.path字段,而非直接编辑Deployment。
3. 验证修复
- 应用更新后的Ingress配置:
kubectl apply -f <your-ingress-file.yaml>
- 重启Control Center Deployment(如果编辑Deployment时没有自动触发重启):
kubectl rollout restart deployment <control-center-deployment-name>
- 访问
http://acme.com/confluent-control-center,检查静态资源是否正常加载,页面能否正常显示。
内容的提问来源于stack exchange,提问作者Polat Coban
相关产品推荐
相关产品推荐

