一个 pod 中的 Spring Boot 应用程序无法通过 Openshift 连接到另一个 pod 上的 mongodb

Springboot application in one pod not able to connect to mongodb on another pod through Openshift

我正在尝试在 OpenShift 中部署 mongodb pods(1 个主要和 2 个辅助),它们已部署但进入 "Error" 状态并出现以下错误,

exception in initAndListen: IllegalOperation: Attempted to create a lock file on a read-only directory: /data/db, terminating

mongo pods 已启动,运行 已成功发布以下 adm 策略,

oc adm policy add-scc-to-group anyuid system:authenticated

现在我正在尝试部署一个连接到 mongodb 的 springboot 应用程序,但是由于以下错误,pod 正在多次重启,

 INFO Exception in monitor thread while connecting to server mongo-node-2.database:27017
com.mongodb.MongoSocketOpenException: Exception opening socket
Caused by: java.net.SocketTimeoutException: connect timed out
                        INFO Exception in monitor thread while connecting to server mongo-node-3.database:27017
com.mongodb.MongoSocketOpenException: Exception opening socket
Caused by: java.net.SocketTimeoutException: connect timed out
                        INFO Exception in monitor thread while connecting to server mongo-node-1.database:27017
com.mongodb.MongoSocketOpenException: Exception opening socket
Caused by: java.net.SocketTimeoutException: connect timed out
                        WARN Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Failed to start bean 'org.springframework.kafka.config.internalKafkaListenerEndpointRegistry'; nested exception is org.apache.kafka.common.errors.TimeoutException: Timeout expired while fetching topic metadata
org.springframework.context.ApplicationContextException: Failed to start bean 'org.springframework.kafka.config.internalKafkaListenerEndpointRegistry'; nested exceptio  is org.apache.kafka.common.errors.TimeoutException: Timeout expired while fetching topic metadata
Caused by: org.apache.kafka.common.errors.TimeoutException: Timeout expired while fetching topic metadata

当通过 openshift 部署时,springboot 应用程序 pod 可以连接到 mongodb pod,所以我使用 k8s 创建了一个虚拟 pod 并尝试连接 mongodb pod 并且连接是成功,

mongo mongo-node-1.database.svc (successful)

我能够通过 NodePort 从 OpenShift 集群外部、使用 dns (mongo-node-1.database.svc) 从集群内部以及从 pod 连接到 mongodb通过 k8s 创建但不是从 OpenShift 部署创建。

我怀疑这个问题可能是因为 OpenShift 阻止 springboot pod 连接到 mongodb pod 的一些策略。

有什么建议吗

问题是由于 pods 和一个项目(命名空间)中的服务无法访问 OpenShift 中的 pods 和另一个项目(命名空间)中的服务。

所有 pods 和服务现在可以使用以下命令访问任何 pods 和服务,反之亦然。

$ oc adm pod-network join-projects --to=<project1> <project2> <project3>

参考 link - https://docs.openshift.com/container-platform/3.11/admin_guide/managing_networking.html