无法访问通过AKS部署并经NGINX Ingress暴露的指定Neo4j数据库
问题分析与修复步骤
核心问题梳理
- HTTP路径路由错误:Ingress处理HTTP请求,但当前Service将端口80指向Neo4j的Bolt端口(7687),而非HTTP管理端口(7474)
- 路径重写缺失:Neo4j Web UI依赖根路径资源,直接用前缀路径会导致静态资源加载失败
- TCP转发配置冲突:多个Neo4j Bolt端口不能共用Ingress的同一外部端口
- Helm资源修改方式错误:直接编辑Ingress Controller Deployment会被Helm覆盖,应通过Helm参数配置
分步修复
1. 修正Neo4j Service配置
每个Neo4j需暴露HTTP和Bolt两个端口,以aks-neo4j-one为例:
apiVersion: v1 kind: Service metadata: name: aks-neo4j-one spec: type: ClusterIP ports: # HTTP端口,供Ingress路由Web UI - protocol: TCP port: 7474 targetPort: 7474 name: http # Bolt端口,供TCP转发数据库连接 - protocol: TCP port: 7687 targetPort: 7687 name: bolt selector: app: aks-neo4j-one
同理创建aks-neo4j-two的Service,确保标签匹配对应Deployment。
2. 配置Ingress路径重写
NGINX Ingress需通过注解实现路径重写,将前缀路径转换为Neo4j需要的根路径:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: neo4j-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: /$2 nginx.ingress.kubernetes.io/use-regex: "true" spec: ingressClassName: nginx rules: - http: paths: - path: /neo4jone(/|$)(.*) pathType: ImplementationSpecific backend: service: name: aks-neo4j-one port: number: 7474 - path: /neo4jtwo(/|$)(.*) pathType: ImplementationSpecific backend: service: name: aks-neo4j-two port: number: 7474
3. 修正TCP转发配置
两个Neo4j的Bolt端口需分配不同的外部LB端口,更新tcp-services ConfigMap:
apiVersion: v1 kind: ConfigMap metadata: name: tcp-services namespace: ingress-test data: 7687: "ingress-test/aks-neo4j-one:7687" 7688: "ingress-test/aks-neo4j-two:7687"
4. 通过Helm更新Ingress Controller
避免直接编辑Deployment,用Helm命令同步TCP配置:
helm upgrade ingress-nginx ingress-nginx/ingress-nginx \ --namespace ingress-test \ --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz \ --set-string controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-internal"="true" \ --set controller.tcp.services.7687="ingress-test/aks-neo4j-one:7687" \ --set controller.tcp.services.7688="ingress-test/aks-neo4j-two:7687"
5. 验证连接
- HTTP访问:
http://<内部LB IP>/neo4jone或http://<内部LB IP>/neo4jtwo,输入账号密码即可正常使用Web UI - Bolt连接:用Neo4j客户端连接
bolt://<内部LB IP>:7687(对应db1)或bolt://<内部LB IP>:7688(对应db2)
内容的提问来源于stack exchange,提问作者spd
相关产品推荐
相关产品推荐

