无法访问使用AKS公开的特定neo4j数据库

问题描述 投票:0回答:1

我有一个 aks 集群,其中有两个 neo4j 数据库映像(db-1 和 db-2),为它们提供服务。使用 nginx 入口控制器,我想根据用户请求的 url 将用户路由到特定数据库,例如,如果用户想要访问 db-1,我的 neo4j url 将是

http://<external-ip>/db1

我想使用内部 IP,并将我的 aks 集群链接到它。

我使用以下步骤创建数据库和 nginx 控制器。但我的数据库尚未连接。 Neo4j 说

Service Unavailable

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx

helm repo update

helm install ingress-nginx ingress-nginx/ingress-nginx --create-namespace  --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" --tcp-services-configmap=ingress-test/tcp-services

应用以下 yaml

kubectl apply -f ingress.yaml 

kind: Deployment
metadata:
  name: aks-neo4j-one  
spec:
  replicas: 1
  selector:
    matchLabels:
      app: aks-neo4j-one
  template:
    metadata:
      labels:
        app: aks-neo4j-one
    spec:
      containers:  
      - name: neo4j  
        image: neo4j:latest 
        env:      
           - name: NEO4J_AUTH       
             value: neo4j/<mypassword>      
        ports:  
        - containerPort: 7474  
          name: http
        - containerPort: 7687  
          name: tcp
        
---
apiVersion: v1
kind: Service
metadata:
  name: aks-neo4j-one  
spec:
  type: ClusterIP
  ports:  
    - protocol: TCP  
      port: 80  
      targetPort: 7687 
  selector:
    app: aks-neo4j-one
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: neo4j-ingress  
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:
      - path: /neo4jone
        pathType: Prefix
        backend:
          service:
            name: aks-neo4j-one
            port:
              number: 80
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: tcp-services
  namespace: ingress-test
data:
  7687: "ingress-test/aks-neo4j-one:80"
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ingress-nginx-controller
  namespace: ingress-test
spec:
  template:
    spec:
      containers:
      - name: controller
        args:
          - /nginx-ingress-controller
          - --tcp-services-configmap=ingress-test/tcp-services

尝试过使用和不使用配置图以及neo4j需要7687螺栓端口

将服务端口更改为7474,然后浏览外部IP会弹出用户名和密码,并且不会继续进行任何输入。

kubernetes nginx neo4j kubernetes-ingress azure-aks
1个回答
0
投票

要在 AKS 集群中配置两个单独的 Neo4j 实例并使用基于 URL 路径的 Nginx Ingress 将流量定向到它们,请按照以下说明操作:

第1步:安装Nginx入口控制器

首先,添加 Nginx Ingress 的 Helm 存储库并安装:

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install ingress-nginx ingress-nginx/ingress-nginx --create-namespace --namespace ingress-nginx

enter image description here

第 2 步:部署 Neo4j 实例

为每个 Neo4j 实例创建 Kubernetes 部署文件。对于第一个数据库(

db-1
):

#File: db1-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: neo4j-db1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: neo4j-db1
  template:
    metadata:
      labels:
        app: neo4j-db1
    spec:
      containers:
        - name: neo4j
          image: neo4j:latest
          env:
            - name: NEO4J_AUTH
              value: "neo4j/your_password_here"
          ports:
            - containerPort: 7474
              name: http
            - containerPort: 7687
              name: bolt

对于第二个数据库(

db-2
):

#File: db2-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: neo4j-db2
spec:
  replicas: 1
  selector:
    matchLabels:
      app: neo4j-db2
  template:
    metadata:
      labels:
        app: neo4j-db2
    spec:
      containers:
        - name: neo4j
          image: neo4j:latest
          env:
            - name: NEO4J_AUTH
              value: "neo4j/your_password_here"
          ports:
            - containerPort: 7474
              name: http
            - containerPort: 7687
              name: bolt

使用以下方式部署这些配置:

kubectl apply -f db1-deployment.yaml 
kubectl apply -f db2-deployment.yaml

enter image description here

第 3 步:公开 Neo4j 服务

现在,为每个 Neo4j 部署定义服务。 对于

db-1

# db1-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: neo4j-db1-service
spec:
  type: ClusterIP
  ports:
    - name: http
      protocol: TCP
      port: 7474
      targetPort: 7474
    - name: bolt
      protocol: TCP
      port: 7687
      targetPort: 7687
  selector:
    app: neo4j-db1

对于

db-2

# db2-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: neo4j-db2-service
spec:
  type: ClusterIP
  ports:
    - name: http
      protocol: TCP
      port: 7474
      targetPort: 7474
    - name: bolt
      protocol: TCP
      port: 7687
      targetPort: 7687
  selector:
    app: neo4j-db1

应用它们:

kubectl apply -f db1-service.yaml
kubectl apply -f db2-service.yaml

enter image description here

第 4 步:配置 Ingress 进行路由

设置 Ingress 资源来路由外部请求:

# File: neo4j-ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: neo4j-ingress
spec:
  ingressClassName: nginx
  rules:
    - http:
        paths:
          - path: /db1
            pathType: Prefix
            backend:
              service:
                name: neo4j-db1-service
                port:
                  number: 7474
          - path: /db2
            pathType: Prefix
            backend:
              service:
                name: neo4j-db2-service
                port:
                  number: 7474

使用

kubectl apply -f neo4j-ingress.yaml

应用它

enter image description here

应用上述配置后,为 TCP 路由创建 ConfigMap:

apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-ingress-tcp
  namespace: ingress-nginx
data:
  "7687": "default/neo4j-db1-service:7687"

应用ConfigMap:

kubectl apply -f tcp-routing-configmap.yaml
enter image description here

然后,更新 Nginx Ingress Controller 部署以将此 ConfigMap 用于 TCP 服务:

kubectl edit deployment ingress-nginx-controller -n ingress-nginx

--tcp-services-configmap=default/nginx-ingress-tcp
下添加
spec.template.spec.containers[0].args
参数。

enter image description here

应用上述配置后,您应该能够通过

http://<external-ip>/db1
(对于 HTTP)和
<external-ip>:7687
(对于 Bolt)访问 Neo4j 实例。使用以下命令查找 Nginx 入口控制器的外部 IP:

kubectl get svc -n ingress-nginx

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.