- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Mongo DB austauschen
Hallo zusammen,
unser Kunde mรถchte aus Performance und juristischen Grรผnden nicht die MongoDB des CaaS innerhalb des Clusters nutzen, sondern stattdessen eine eigene dedizierte MongoDB auรerhalb der Cloud anbinden.
Wie groร ist der Aufwand dafรผr? Ist das รผberhaupt vorgesehen?
Vielen Dank schon mal fรผr Eure Antworten
- Labels:
-
CaaS
-
Content as a Service
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo Philipp,
unser Team ist diese Woche krankheitsbedingt leider sehr dezimiert. Ich bitte Dich daher noch um Geduld bis kommende Woche, wo wir das dann mal gemeinsam besprechen.
Vielleicht kannst Du uns zwischenzeitlich die Beweggrรผnde fรผr den Wunsch nรคher erlรคutern? Und wir reden schon รผber Kubernetes, oder?
Viele Grรผรe,
Tanja
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo Philipp,
sorry nochmal fรผr die Verzรถgerung, unsere Kapazitรคten waren die Tanja sagte sehr dezimiert.
Du kannst die MongoDB in den Helm Charts einfach deaktivieren, das ist also absolut vorgesehen. Wenn du dir die values.yaml der Helm Chart anschaust, dann findest du die zum einen die Property um die MongoDB zu deaktivieren:
mongo:
#set to false to remove mongodb from the release altogether
#if you do that, you need to adjust "credentials.caasRepoServer" and "credentials.caasRepoAdditions" above
enabled: true
Und zum anderen die Properties, um die Verbindungseinstellungen zu deiner eigenen MongoDB anzugeben:
credentials:
[...]
#uncomment and enter your mongodb nodes in case you disable mongodb below with 'mongo.enabled=false'
#caasRepoServer: "caas-mongo-0.caas-mongo,caas-mongo-1.caas-mongo,caas-mongo-2.caas-mongo"
caasRepoAdditions: "replicaSet=rs0\\&readPreference=secondaryPreferred\\&serverSelectionTimeoutMS=5000"
Ich hoffe das hilft dir weiter und du kannst dein Setup damit aufbauen.
Beste Grรผรe
Christian
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo Christian,
die Datenbank die wir anbinden wollen ist nur รผber SSL erreichbar.
Wie geben wir der Verbindung diese Informationen mit?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
Ich finde aktuell keine Mรถglichkeit um ein CA-Zertifikat mit in die caas.repo.additions zu geben.
Ist das aktuell so nicht vorgesehen? Dann macht aber auch die Mรถglichkeit SSL zu aktivieren wenig Sinn oder?
Grรผรe,
Marcel
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo Marcel,
wir haben bisher nicht vorgesehen, die interne Verbindung zu verschlรผsseln, und ich habe das noch nicht ausprobiert. Aber es mรผsste eigentlich gehen - vorausgesetzt, ihr verwendet keine selbstsignierten Zertifikate.
Etwas mehr Kontext:
Wir bauen den Connection-String zur MongoDB zu zusammen:
mongo-uri: mongodb://%CAAS_REPO_USER%:%CAAS_REPO_PASSWORD%@%CAAS_REPO_SERVER%/?authSource=admin&%CAAS_REPO_ADDITIONS%
In den caasRepoAdditions im helm-Chart kann man also alles hinzufรผgen, was man in einen solchen Connection-String schreiben kann. Laut Connection String URI Format โ MongoDB Manual kann man zur Verwendung von ssl einfach ssl=true setzen.
Es ist aber aktuell nicht vorgesehen, (selbstsignierte) Zertifikate oder CAs in der Rest-API zu importieren, und es ist - bisher - auch nicht geplant das zu รคndern. Vorhanden sind standardmรครig alle CAs, die in einer JRE mitgeliefert werden.
Solange es im Produkt keinen direkten Support fรผr selbstsignierte Zertifikate und eigene CAs gibt, mรถchte ich aber zumindest aufzeigen wie man das Problem selbst lรถsen kann, denn ich mรถchte euch nicht bremsen. Eine รnderung am Container kann euch genau das erlauben, was ihr erreichen wollt. Am Ende ist das ja "nur" ein OpenJDK-Alpine-Container (plus die Anwendung natรผrlich), der zur Zertifikatsvalidierung auf die cacerts schaut. Diese Datei kรถnnt ihr ersetzen. Das grobe Vorgehen wรคre wie folgt:
* Erstellt ein Dockerfile, das in etwa so aussieht
FROM e-spirit/caas-rest-api:2.4.16
COPY cacerts /etc/ssl/certs/java/cacerts
* erstellt die cacerts so, dass euer Zertifikat mit enthalten ist.
* legt diese Datei mit dort hin wo das Dockerfile liegt
mit docker build . -t changed/caas-rest-api:2.4.16 kรถnnt ihr den Build anstoรen. Das geht davon aus, dass die e-spirit-Images auf der Maschine im Docker-Repo liegen. Dann wird ein neues Image erstellt. Dieses mรผsst ihr dann statt dem originalen Image verwenden. Achtung, es ist aktuell nicht mรถglich ohne รnderung an den helm-Charts den Namen eines einzigen Images zu รคndern (das ist normalerweise auch nicht sinnvoll), es ist also am einfachsten den gleichen Namen / das gleiche Tag zu verwenden. Wenn ihr das verwendet und ssl=true in den caasRepoAdditions setzt, mรผsste es gehen. Aber: Ich habe den Prozess bisher nicht ausprobiert, sehe aber auch erst einmal keinen Grund warum es nicht gehen sollte.
Sollte es spรคter direkten Support im Produkt geben, kรถnnt ihr euch diesen Schritt einfach sparen und das Zertifikat dort dann angeben.
Hilft das erst einmal?
Viele Grรผรe,
Lena
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Lena,
vielen Dank fรผr die schnelle und sehr umfangreiche Antwort.
Allerdings bauen wir aktuell das REST-Api Image nicht selbst, wie modifizieren wir das dann?
Der Parameter CAAS_REPO_ADDITIONS nimmt auch nicht alle in der MongoDB Doku erwรคhnten Parameter, bekomme hier fรผr einige undefined oder รคhnliche Fehler.
Grรผรe,
Marcel
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Marcel,
besteht denn fรผr euch die Mรถglichkeit es selbst zu bauen? Das wรผrde euer Problem ziemlich einfach lรถsen. Wir haben da keinen anderen Workaround fรผr das Problem - einfaches reinmounten in den Container reicht hier leider nicht.
Der CAAS_REPO_ADDITIONS-Parameter ist nur ein Teil des resultierenden Connection-Strings fรผr die Datenbank, wie Lena oben beschreibt. Kannst du uns konkreter sagen, welche Parameter nicht funktionieren? Dann kรถnnten wir uns das nochmal genauer anschauen.
Grรผรe,
Hannes
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo Lena,
wir haben es versucht wie du sagtest.
Wir haben das bestehende Image als Base-Image benutzt und den CACERTS โ KeyStore von Java mitsamt den benutzten Zertifikaten hineinkopiert und dieses Image deployed.
Wir erhalten beim Start des Pods nun folgenden Fehler:
04:00:32.139 [cluster-ClusterId{value=โ5cab3e8997d8aa0001ad376dโ, description=โnullโ}-5b4cbd6e-0ac1-41fb-903a-c8e5af8ffeec-0.659dc287bad647f9b4fe17c4e4c38dcc.databases.appdomain.cloud:30494 / ] INFO org.mongodb.driver.cluster โ Exception in monitor thread while connecting to server 5b4cbd6e-0ac1-41fb-903a-c8e5af8ffeec-0.659dc287bad647f9b4fe17c4e4c38dcc.databases.appdomain.cloud:30494 Com.mongodb.MongoSocketWriteException: Exception sending message
At com.mongodb.connection.InternalStreamConnection.translateWriteException(InternalStreamConnection.java:445)
At com.mongodb.connection.InternalStreamConnection.sendMessage(InternalStreamConnection.java:194)
At com.mongodb.connection.CommandHelper.sendMessage(CommandHelper.java:89)
At com.mongodb.connection.CommandHelper.executeCommand(CommandHelper.java:32)
At com.mongodb.connection.InternalStreamConnectionInitializer.initializeConnectionDescription(InternalStreamConnectionInitializer.java:85)
At com.mongodb.connection.InternalStreamConnectionInitializer.initialize(InternalStreamConnectionInitializer.java:45)
At com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:108)
At com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:111)
At java.lang.Thread.run(Thread.java:748)
Caused by: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
At sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1002)
At sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1385)
At sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:757)
At sun.security.ssl.AppOutputStream.write(AppOutputStream.java:123)
At com.mongodb.connection.SocketStream.write(SocketStream.java:74)
At com.mongodb.connection.InternalStreamConnection.sendMessage(InternalStreamConnection.java:191)
โฆ 7 common frames omitted
Caused by: java.io.EOFException: SSL peer shut down incorrectly
At sun.security.ssl.InputRecord.read(InputRecord.java:505)
At sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:983)
โฆ 12 common frames omitted
Wir wissen hier nicht weiter.
Benutzt eure Verbindung tatsรคchlich den Java-Keystore? Wenn ich nรคmlich, aus einer Test-Applikation heraus, versuche auf die DB zu kommen, geht das.
Hast du noch Ideen dazu?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo Marcel,
so eine richtige Idee haben wir auch aktuell nicht. Im Prinzip sind ja diese Schritte zu erledigen:
https://restheart.org/learn/setup/#connect-restheart-to-mongodb-over-tlsssl
Daher prรผf doch zunรคchst noch mal den Inhalt des Keystores (keytool -list ...). Wie ist die mongo-uri gesetzt?
Kรถnntest Du uns auรerdem noch einen grรถรeren Auszug des Logs zukommen lassen, also vor allem den Start des Pods bis zu dem o.g. Fehler? Kommt der dann nur einmal oder wiederholt?

