Search the FirstSpirit Knowledge Base
Hallo zusammen,
wir versuchen aktuell das CaaS Modul mit unserer Rest-Api im Kubernetes Cluster zu verbinden.
Wenn wir dabei im Servermanager die URL und den API Key eintragen und die Konfiguration überprüfen erhalten wir immer den Fehler:
(com.espirit.caas.adapter.processors.AsyncRequestToolkit): Connecting to REST api caused an exception
java.net.ConnectException: connection timed out: api-dev1.{KUNDE}.com/{IP}:443
woran könnte das liegen?
Wir verwenden FirstSpirit 5.2.1608.76631 und die CaaS Version 2.0.21
Vielen Dank
Philipp
Stacktrace:
FSVersion=5.2.1608.76631#6192;JDK=1.8.0_144 64bit Oracle Corporation;OS=Linux 4.4.120-92.70-default amd64;Date=14.01.2019 14:24:47
java.util.concurrent.ExecutionException: java.net.ConnectException: connection timed out: api-dev1.{KUNDE}.com/{IP}:80
at java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:357)
at java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1895)
at com.espirit.caas.adapter.processors.AsyncRequestToolkit.checkConfigurationSynchronized(AsyncRequestToolkit.java:274)
at com.espirit.caas.adapter.RestHeartAdapterImpl.checkConnection(RestHeartAdapterImpl.java:117)
at com.espirit.caas.service.CaaSConnectionImpl.check(CaaSConnectionImpl.java:234)
at com.espirit.caas.service.CaaSServiceImpl.checkConfiguration(CaaSServiceImpl.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at de.espirit.firstspirit.server.module.ServiceWrapperImpl.invoke(ServiceWrapperImpl.java:109)
at com.sun.proxy.$Proxy7.checkConfiguration(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at de.espirit.firstspirit.io.DefaultServerHandler.callManager(DefaultServerHandler.java:67)
at de.espirit.firstspirit.server.io.handler.ManagerCall.doCall(ManagerCall.java:139)
at de.espirit.firstspirit.server.io.handler.CompactCall.handle(CompactCall.java:73)
at de.espirit.firstspirit.server.io.MessageWorker.run(MessageWorker.java:49)
at de.espirit.firstspirit.server.ExecutionManagerImpl$RunnableWrapper.call(ExecutionManagerImpl.java:625)
at de.espirit.firstspirit.server.ExecutionManagerImpl$ExtendedCallable.call(ExecutionManagerImpl.java:590)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at de.espirit.common.util.BoundedExecutorService$RunnableWrapper.run(BoundedExecutorService.java:436)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
at de.espirit.common.util.SuspendableThread.run(SuspendableThread.java:56)
Caused by: java.net.ConnectException: connection timed out: api-dev1.{KUNDE}.com/{IP}:80
at org.asynchttpclient.netty.channel.NettyConnectListener.onFailure(NettyConnectListener.java:179)
at org.asynchttpclient.netty.channel.NettyChannelConnector$1.onFailure(NettyChannelConnector.java:108)
at org.asynchttpclient.netty.SimpleChannelFutureListener.operationComplete(SimpleChannelFutureListener.java:28)
at org.asynchttpclient.netty.SimpleChannelFutureListener.operationComplete(SimpleChannelFutureListener.java:20)
at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:511)
at io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:504)
at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:483)
at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:424)
at io.netty.util.concurrent.DefaultPromise.tryFailure(DefaultPromise.java:121)
at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe$1.run(AbstractNioChannel.java:269)
at io.netty.util.concurrent.PromiseTask$RunnableAdapter.call(PromiseTask.java:38)
at io.netty.util.concurrent.ScheduledFutureTask.run(ScheduledFutureTask.java:127)
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:464)
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:748)
Caused by: io.netty.channel.ConnectTimeoutException: connection timed out: api-dev1.{KUNDE}.com/{IP}:80
at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe$1.run(AbstractNioChannel.java:267)
... 8 more
Wir haben den Fehler gefunden.
Die IT des Kunden hat die Firewallfreischaltung vergessen...
Jetzt funktioniert die Verbindung von CaaS und Firstspirit.
Hallo Philip,
bei der Überprüfung sendet das Modul einfach nur ein GET gegen die konfigurierte URL unter Verwendung des API-Key. Lt. Fehlermeldung tritt ja ein "ConnectionTimeout" auf, d.h. dass der Remote-Host nicht innerhalb von 5 Sekunden erreicht wird.
Zur Fehlereingrenzung würde ich empfehlen, mit einem Tool wie Postman oder curl ein GET abzusetzen. Das kannst Du einmal direkt vom FS-Server aus machen und/oder auch von einem anderen Host. Wie ist dort das Verhalten? Kann man damit mehr Details erkennen?
Wie sieht Euer Network Setup aus- Proxies, usw?
Viele Grüße,
Tanja
Hallo Tanja,
mit Postman von meinem lokalen Rechner erreiche ich die Restschnittstelle und erhalte auch ein JSON zurück.
Wir haben den Fehler aber gerade an einer anderen Stelle lokalisiert.
In unserer Cloud wird Istio zum Routing der einzelnen Services verwendet. Unser CaaS ist unter dem Pfad "/content" erreichbar,
da die Restapi allerdings auf der Root antwortet müssen wir mit Istio einen Uri rewrite auf den Pfad "/" machen.
Dabei wird allerdings der erste / nach unserem Pfad /content nicht ersetzt und unser Pfad beginnt mit "//".
Die Antwort der Restapi beim Aufruf von "/content/test" enthällt dabei folgende Fehlermeldung:
{
"http status code": 400,
"http status description": "Bad Request",
"message": "illegal database name, see https://docs.mongodb.org/v3.2/reference/limits/#naming-restrictions",
"_links": {
"self": {
"href": "//test"
}
}
}
das Verhalten von Istio ist hier nochmal mit einer möglichen Lösung beschrieben:
Can't rewrite to empty string · Issue #8076 · istio/istio · GitHub
Viele Grüße
Philipp
Hallo Tanja,
ist es möglich dass, das CaaS Modul den Pfad aus der URL löscht?
In der Firstspirit Fehlermeldung wird nur die URL ohne den Pfad angezeigt
Viele Grüße
Philipp
Wir haben den Fehler gefunden.
Die IT des Kunden hat die Firewallfreischaltung vergessen...
Jetzt funktioniert die Verbindung von CaaS und Firstspirit.