【问题标题】:Neo4j - How to access bolt from a secure connection using Docker image?Neo4j - 如何使用 Docker 映像从安全连接中访问 Bolt?
【发布时间】:2017-08-21 05:19:55
【问题描述】:

Docker 新手。因此,我设法将官方 Neo4j EE Docker 映像部署到 Google Container Engine,当从 localhost 运行我的 Angular 应用程序时,一切都很好(因为它不是来自安全连接)。

但是,当我将应用部署到 Firebase 时,应用会从安全连接对 DB/Docker 容器进行所有调用,这会导致以下错误:

Mixed Content: The page at 'https://luminate-testing-24112016.firebaseapp.com/dashboard'
was loaded over HTTPS, but attempted to connect to the insecure WebSocket endpoint
'ws://35.196.251.244:7687/'. This request has been blocked; this endpoint must be available
over WSS.

请注意,无论将 Docker 映像部署到 GKE 还是 AWS,都会发生这种情况。

这是我的 yaml 文件:

apiVersion: v1
kind: Service
metadata:
  name: neo4j
spec:
  type: LoadBalancer
  loadBalancerSourceRanges:
  - 0.0.0.0/0
  ports:
  - name: browser
    port: 7474
    protocol: TCP
  - name: bolt
    port: 7687
    protocol: TCP
  - name: https
    port: 7473
    protocol: TCP
  selector:
    app: neo4j

apiVersion: "apps/v1beta1"
kind: StatefulSet
metadata:
  name: neo4j
spec:
  serviceName: neo4j
  replicas: 1
  template:
    metadata:
      labels:
        app: neo4j
    spec:
      containers:
      - name: neo4j
        image: luminateqr/neo4j-with-apoc:latest
        imagePullPolicy: Always
        ports:
        - name: browser
          containerPort: 7474
        - name: bolt
          containerPort: 7687
        - name: https
          containerPort: 7473
        volumeMounts:
        - name: neo4j-data
          mountPath: /data
  volumeClaimTemplates:
  - metadata:
      name: neo4j-data
      annotations:
        volume.beta.kubernetes.io/storage-class: slow
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 50Gi

kind: StorageClass
apiVersion: storage.k8s.io/v1beta1
metadata:
  name: slow
provisioner: kubernetes.io/gce-pd
parameters:
  type: pd-standard
  zone: us-east1-c

有一些问题和答案似乎很相似,但我不知道哪些适用,哪些不适用。我知道通过 TLS 设置 websocket 与它有关,但对于如何执行此操作没有一致和/或明确的答案(这似乎很奇怪,因为这可能是一种常见情况)

【问题讨论】:

  • 我假设您正在尝试通过您的代码直接访问数据库?
  • 是的。虽然我只是想知道在 GKE 实例上放置 ssl 证书是否可以解决问题

标签: angular docker neo4j google-kubernetes-engine


【解决方案1】:

你应该在你的 neo4j.conf 中设置这个参数

dbms.connector.bolt.tls_level=REQUIRED

如果是 docker,您可以使用此处描述的选项:Config file for Neo4j Docker Image

【讨论】:

  • 在官方的docker容器中是怎么做到的?
  • 我通常执行以下操作:我挂载一个目录,其中有一个 shell 脚本。在 docker-compose.yml 我有这样的东西: environment: NEO4J_AUTH: "none" EXTENSION_SCRIPT: /xx/extra_conf.sh 在我的脚本中我有这样的东西: echo "dbms.connector.bolt.tls_level=REQUIRED" > > conf/neo4j.conf
  • 谢谢。让我明天到达终点站时尝试所有这些。
  • 好吧,我至少想出了如何通过云 shell 进入正在运行的 pod:kubectl exec -it neo4j-0 -- /bin/bash
  • 所以我实际上刚刚进入并更改了 neo4j.conf 中的行,因为我知道它在哪里。仍然遇到同样的错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多