Bonjour, j'ai des difficultés similaires au problème expliqué dans # 813 lorsque j'essaie de fonctionner sur Kubernetes en exposant le WS via Ingress.
WebSocket connection to 'ws://apicurio-ws.192.168.1.5.nip.io/ws/designs/2?uuid=68064b1e-f839-4973-b65e-89660d4a07d9&user=admin&secret=eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJxRV9
COWQ4NFZS' failed: Error during WebSocket handshake: Unexpected response code: 404
J'utilise les fichiers manifestes kubernetes dans le distro/kubernetes. Je change seulement l'hôte pour chaque service.
Je suppose que les informations du #813 ne vous ont pas aidé ? Cela ressemble au même problème. Peut-être que @0x218 pourrait élaborer sur les changements qui ont fonctionné pour leur installation ? Ou peut-être que @t-rap a des idées ? Mon expertise kubernetes est extrêmement limitée.
Oui, j'ai essayé d'appliquer les en-têtes Version, Upgrade et Connection dans le Nginx Ingress @ 0x218 suggéré. Pourtant, je n'ai pas pu me connecter à la prise web.
Des journaux que je peux fournir pour mieux comprendre le problème ?
Si vous pouvez fournir une sortie "complète" de la console du navigateur et des journaux de serveur à partir du pod -ws, cela pourrait aider.
journal du navigateur :
[ApiEditorPageComponent] Attempting to reconnect to the server.
main.a117148be57ecc117ff5.js:1 [ApisService] Getting an API Design: http://apicurio.192.168.1.5.nip.io/studio-api/designs/2
main.a117148be57ecc117ff5.js:1 [ApisService] Editing API Design: http://apicurio.192.168.1.5.nip.io/studio-api/designs/2/session
main.a117148be57ecc117ff5.js:1 [ApisService] Editing Session UUID: 0d50ffc8-1f69-41b0-b1f0-6c80a1771e00
main.a117148be57ecc117ff5.js:1 [ApisService] Content Version: 3
main.a117148be57ecc117ff5.js:1 [ApiEditorPageComponent] Definition loaded. Opening editing session.
main.a117148be57ecc117ff5.js:1 [ApisService] Opening editing session on URL: ws://apicurio-ws.192.168.1.5.nip.io/ws/designs/2?uuid=0d50ffc8-1f69-41b0-b1f0-6c80a1771e00&user=admin&secret=eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJCNlRDTFAxdkIz
main.a117148be57ecc117ff5.js:1 WebSocket connection to 'ws://apicurio-ws.192.168.1.5.nip.io/ws/designs/2?uuid=0d50ffc8-1f69-41b0-b1f0-6c80a1771e00&user=admin&secret=eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJCNlRDTFAxdkIz' failed: Error during WebSocket handshake: Unexpected response code: 404
t.openEditingSession @ main.a117148be57ecc117ff5.js:1
(anonymous) @ main.a117148be57ecc117ff5.js:1
e.invoke @ polyfills.9c67d1be23abf75fea1a.js:1
onInvoke @ main.a117148be57ecc117ff5.js:1
e.invoke @ polyfills.9c67d1be23abf75fea1a.js:1
t.run @ polyfills.9c67d1be23abf75fea1a.js:1
(anonymous) @ polyfills.9c67d1be23abf75fea1a.js:1
e.invokeTask @ polyfills.9c67d1be23abf75fea1a.js:1
onInvokeTask @ main.a117148be57ecc117ff5.js:1
e.invokeTask @ polyfills.9c67d1be23abf75fea1a.js:1
t.runTask @ polyfills.9c67d1be23abf75fea1a.js:1
y @ polyfills.9c67d1be23abf75fea1a.js:1
t.invokeTask @ polyfills.9c67d1be23abf75fea1a.js:1
_ @ polyfills.9c67d1be23abf75fea1a.js:1
m @ polyfills.9c67d1be23abf75fea1a.js:1
main.a117148be57ecc117ff5.js:1 [ApiEditingSession] WS connection to server CLOSED: CloseEvent {isTrusted: true, wasClean: false, code: 1006, reason: "", type: "close", …}
main.a117148be57ecc117ff5.js:1 [ApiEditorPageComponent] **Notice** editing session DROPPED! Reason code: 1006
main.a117148be57ecc117ff5.js:1 [ApiEditorPageComponent] Attempting to reconnect to the server.
main.a117148be57ecc117ff5.js:1 [ApisService] Getting an API Design: http://apicurio.192.168.1.5.nip.io/studio-api/designs/2
main.a117148be57ecc117ff5.js:1 [ApisService] Editing API Design: http://apicurio.192.168.1.5.nip.io/studio-api/designs/2/session
main.a117148be57ecc117ff5.js:1 [ApisService] Editing Session UUID: 5eecf1e6-2a83-4940-bdb0-110240374093
main.a117148be57ecc117ff5.js:1 [ApisService] Content Version: 3
main.a117148be57ecc117ff5.js:1 [ApiEditorPageComponent] Definition loaded. Opening editing session.
main.a117148be57ecc117ff5.js:1 [ApisService] Opening editing session on URL: ws://apicurio-ws.192.168.1.5.nip.io/ws/designs/2?uuid=5eecf1e6-2a83-4940-bdb0-110240374093&user=admin&secret=eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJCNlRDTFAxdkIz
main.a117148be57ecc117ff5.js:1 WebSocket connection to 'ws://apicurio-ws.192.168.1.5.nip.io/ws/designs/2?uuid=5eecf1e6-2a83-4940-bdb0-110240374093&user=admin&secret=eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJCNlRDTFAxdkIz' failed: Error during WebSocket handshake: Unexpected response code: 404
t.openEditingSession @ main.a117148be57ecc117ff5.js:1
(anonymous) @ main.a117148be57ecc117ff5.js:1
e.invoke @ polyfills.9c67d1be23abf75fea1a.js:1
onInvoke @ main.a117148be57ecc117ff5.js:1
e.invoke @ polyfills.9c67d1be23abf75fea1a.js:1
t.run @ polyfills.9c67d1be23abf75fea1a.js:1
(anonymous) @ polyfills.9c67d1be23abf75fea1a.js:1
e.invokeTask @ polyfills.9c67d1be23abf75fea1a.js:1
onInvokeTask @ main.a117148be57ecc117ff5.js:1
e.invokeTask @ polyfills.9c67d1be23abf75fea1a.js:1
t.runTask @ polyfills.9c67d1be23abf75fea1a.js:1
y @ polyfills.9c67d1be23abf75fea1a.js:1
t.invokeTask @ polyfills.9c67d1be23abf75fea1a.js:1
_ @ polyfills.9c67d1be23abf75fea1a.js:1
m @ polyfills.9c67d1be23abf75fea1a.js:1
main.a117148be57ecc117ff5.js:1 [ApiEditingSession] WS connection to server CLOSED: CloseEvent {isTrusted: true, wasClean: false, code: 1006, reason: "", type: "close", …}
main.a117148be57ecc117ff5.js:1 [ApiEditorPageComponent] **Notice** editing session DROPPED! Reason code: 1006
Journal complet du pod ws :
06-10 14:46:08,780 DEBUG [io.undertow.request.security] (default task-1) Authentication result was ATTEMPTED for /ws/designs/2
2020-06-10 14:46:08,781 DEBUG [io.undertow.request] (default task-1) Matched default handler path /ws/designs/2
2020-06-10 14:46:11,291 DEBUG [com.arjuna.ats.arjuna] (Periodic Recovery) PeriodicRecovery: background thread Status <== SCANNING
2020-06-10 14:46:11,291 DEBUG [com.arjuna.ats.arjuna] (Periodic Recovery) PeriodicRecovery: background thread scanning
2020-06-10 14:46:11,291 DEBUG [com.arjuna.ats.arjuna] (Periodic Recovery) Periodic recovery first pass at Wed, 10 Jun 2020 14:46:11
2020-06-10 14:46:11,291 DEBUG [com.arjuna.ats.arjuna] (Periodic Recovery) processing /StateManager/BasicAction/TwoPhaseCoordinator/AtomicAction transactions
2020-06-10 14:46:11,291 DEBUG [com.arjuna.ats.arjuna] (Periodic Recovery) Recovery module 'com.arjuna.ats.internal.jta.recovery.arjunacore.CommitMarkableResourceRecordRecoveryModule<strong i="6">@7e04aa62</strong>' first pass processed
2020-06-10 14:46:11,291 DEBUG [com.arjuna.ats.arjuna] (Periodic Recovery) AtomicActionRecoveryModule first pass
2020-06-10 14:46:11,291 DEBUG [com.arjuna.ats.arjuna] (Periodic Recovery) processing /StateManager/BasicAction/TwoPhaseCoordinator/AtomicAction transactions
2020-06-10 14:46:11,291 DEBUG [com.arjuna.ats.arjuna] (Periodic Recovery) Recovery module 'com.arjuna.ats.internal.arjuna.recovery.AtomicActionRecoveryModule<strong i="7">@3b062bc6</strong>' first pass processed
2020-06-10 14:46:11,291 DEBUG [com.arjuna.ats.txoj] (Periodic Recovery) TORecoveryModule - first pass
2020-06-10 14:46:11,291 DEBUG [com.arjuna.ats.arjuna] (Periodic Recovery) Recovery module 'com.arjuna.ats.internal.txoj.recovery.TORecoveryModule<strong i="8">@29e089e5</strong>' first pass processed
2020-06-10 14:46:11,291 DEBUG [com.arjuna.ats.arjuna] (Periodic Recovery) Recovery module 'com.arjuna.ats.internal.jta.recovery.arjunacore.SubordinateAtomicActionRecoveryModule<strong i="9">@5f676b11</strong>' first pass processed
2020-06-10 14:46:11,291 DEBUG [com.arjuna.ats.jta] (Periodic Recovery) XARecoveryModule state change IDLE->FIRST_PASS
2020-06-10 14:46:11,291 DEBUG [com.arjuna.ats.jta] (Periodic Recovery) Local XARecoveryModule - first pass
2020-06-10 14:46:11,291 DEBUG [com.arjuna.ats.jta] (Periodic Recovery) XARecoveryModule state change FIRST_PASS->BETWEEN_PASSES
2020-06-10 14:46:11,291 DEBUG [com.arjuna.ats.arjuna] (Periodic Recovery) Recovery module 'com.arjuna.ats.internal.jta.recovery.arjunacore.XARecoveryModule<strong i="10">@5ad9faef</strong>' first pass processed
2020-06-10 14:46:20,674 DEBUG [io.undertow.request] (default I/O-2) Matched default handler path /ws/designs/2
2020-06-10 14:46:20,675 DEBUG [io.undertow.request.security] (default task-1) Attempting to authenticate /ws/designs/2, authentication required: false
2020-06-10 14:46:20,675 DEBUG [io.undertow.request.security] (default task-1) Authentication outcome was NOT_ATTEMPTED with method io.undertow.security.impl.CachedAuthenticatedSessionMechanism<strong i="11">@59a16760</strong> for /ws/designs/2
2020-06-10 14:46:20,675 DEBUG [io.undertow.request.security] (default task-1) Authentication result was ATTEMPTED for /ws/designs/2
2020-06-10 14:46:20,675 DEBUG [io.undertow.request] (default task-1) Matched default handler path /ws/designs/2
2020-06-10 14:46:21,291 DEBUG [com.arjuna.ats.arjuna] (Periodic Recovery) Periodic recovery second pass at Wed, 10 Jun 2020 14:46:21
2020-06-10 14:46:21,291 DEBUG [com.arjuna.ats.arjuna] (Periodic Recovery) Recovery module 'com.arjuna.ats.internal.jta.recovery.arjunacore.CommitMarkableResourceRecordRecoveryModule<strong i="12">@7e04aa62</strong>' second pass processed
2020-06-10 14:46:21,291 DEBUG [com.arjuna.ats.arjuna] (Periodic Recovery) AtomicActionRecoveryModule second pass
2020-06-10 14:46:21,291 DEBUG [com.arjuna.ats.arjuna] (Periodic Recovery) Recovery module 'com.arjuna.ats.internal.arjuna.recovery.AtomicActionRecoveryModule<strong i="13">@3b062bc6</strong>' second pass processed
2020-06-10 14:46:21,291 DEBUG [com.arjuna.ats.txoj] (Periodic Recovery) TORecoveryModule - second pass
2020-06-10 14:46:21,291 DEBUG [com.arjuna.ats.arjuna] (Periodic Recovery) Recovery module 'com.arjuna.ats.internal.txoj.recovery.TORecoveryModule<strong i="14">@29e089e5</strong>' second pass processed
2020-06-10 14:46:21,292 DEBUG [com.arjuna.ats.arjuna] (Periodic Recovery) Recovery module 'com.arjuna.ats.internal.jta.recovery.arjunacore.SubordinateAtomicActionRecoveryModule<strong i="15">@5f676b11</strong>' second pass processed
2020-06-10 14:46:21,292 DEBUG [com.arjuna.ats.jta] (Periodic Recovery) XARecoveryModule state change BETWEEN_PASSES->SECOND_PASS
2020-06-10 14:46:21,292 DEBUG [com.arjuna.ats.jta] (Periodic Recovery) Local XARecoveryModule - second pass
2020-06-10 14:46:21,292 DEBUG [com.arjuna.ats.jta] (Periodic Recovery) Local XARecoveryModule.transactionInitiatedRecovery completed
2020-06-10 14:46:21,292 DEBUG [com.arjuna.ats.jta] (Periodic Recovery) Local XARecoveryModule.resourceInitiatedRecovery completed
2020-06-10 14:46:21,292 DEBUG [com.arjuna.ats.jta] (Periodic Recovery) XARecoveryModule state change SECOND_PASS->IDLE
2020-06-10 14:46:21,292 DEBUG [com.arjuna.ats.arjuna] (Periodic Recovery) Recovery module 'com.arjuna.ats.internal.jta.recovery.arjunacore.XARecoveryModule<strong i="16">@5ad9faef</strong>' second pass processed
2020-06-10 14:46:21,292 DEBUG [com.arjuna.ats.arjuna] (Periodic Recovery) PeriodicRecovery: background thread Status <== INACTIVE
2020-06-10 14:46:21,292 DEBUG [com.arjuna.ats.arjuna] (Periodic Recovery) PeriodicRecovery: background thread backing off
Mec, je n'ai aucune idée de ce qui pourrait mal se passer, alors. J'allais vous demander de vous assurer que les pods -ws et -api sont connectés à la même base de données. Sinon, vous obtiendrez une erreur de connexion, mais dans ce cas, le journal du pod -ws affichera l'erreur et vous n'obtiendrez pas de 404, je ne pense pas.
Il semble que ce soit une sorte de problème d'entrée, et je n'en sais pas assez sur les k8 pour vous aider ! :(
J'ai également essayé d'exposer directement le pod ws directement via un NodePort. Pourtant, je n'ai toujours pas réussi.
Je vais réessayer. Est-ce que l'augmentation du niveau de journalisation aiderait ?
Ça ne pouvait pas faire de mal. Il y avait quelque chose dans le journal -ws à propos de l'authentification que je n'ai pas bien compris, car le composant -ws n'a aucune authentification activée. Peut-être que l'augmentation du niveau de journalisation éclairerait davantage cela.
À quel niveau pensez-vous que je devrais augmenter le niveau de journalisation ?
Commencez probablement par DEBUG et voyez ce qui se passe. :)
J'ai augmenté les niveaux de journalisation pour déboguer. Pourtant, il n'y a pas de journal bénéfique.
ws
cloak.adapters.OAuthRequestAuthenticator] (default task-2) there was no code
2020-06-13 22:20:10,628 DEBUG [org.keycloak.adapters.OAuthRequestAuthenticator] (default task-2) redirecting to auth server
2020-06-13 22:20:10,628 DEBUG [org.keycloak.adapters.undertow.ServletSessionTokenStore] (default task-3) session was null, returning null
2020-06-13 22:20:10,628 DEBUG [org.keycloak.adapters.OAuthRequestAuthenticator] (default task-3) there was no code
2020-06-13 22:20:10,628 DEBUG [org.keycloak.adapters.OAuthRequestAuthenticator] (default task-3) redirecting to auth server
2020-06-13 22:20:10,628 DEBUG [org.keycloak.adapters.OAuthRequestAuthenticator] (default task-2) callback uri: http://apicurio-studio-ui.192.168.1.5.nip.io/version.js
2020-06-13 22:20:10,628 DEBUG [org.keycloak.adapters.OAuthRequestAuthenticator] (default task-3) callback uri: http://apicurio-studio-ui.192.168.1.5.nip.io/config.js
2020-06-13 22:20:10,628 DEBUG [io.undertow.request.security] (default task-2) Authentication outcome was NOT_ATTEMPTED with method org.keycloak.adapters.wildfly.WildflyAuthenticationMechanism<strong i="7">@26c8577b</strong> for /version.js
2020-06-13 22:20:10,628 DEBUG [io.undertow.request.security] (default task-2) Authentication result was ATTEMPTED for /version.js
2020-06-13 22:20:10,628 DEBUG [io.undertow.request.security] (default task-3) Authentication outcome was NOT_ATTEMPTED with method org.keycloak.adapters.wildfly.WildflyAuthenticationMechanism<strong i="8">@26c8577b</strong> for /config.js
2020-06-13 22:20:10,628 DEBUG [io.undertow.request.security] (default task-3) Sending authentication challenge for HttpServerExchange{ GET /config.js}
2020-06-13 22:20:10,628 DEBUG [io.undertow.request] (default task-2) Matched default handler path /version.js
2020-06-13 22:20:10,628 DEBUG [org.keycloak.adapters.AuthenticatedActionsHandler] (default task-2) AuthenticatedActionsValve.invoke http://apicurio-studio-ui.192.168.1.5.nip.io/version.js
2020-06-13 22:20:10,629 DEBUG [org.keycloak.adapters.AuthenticatedActionsHandler] (default task-2) Policy enforcement is disabled.
2020-06-13 22:20:10,629 DEBUG [io.undertow.session] (default task-3) Created session with id oIOfXf1RPvC2PBpI4dTuVZKYk7f8BDg0XUAFHWrC for exchange HttpServerExchange{ GET /config.js}
2020-06-13 22:20:10,629 DEBUG [org.keycloak.adapters.OAuthRequestAuthenticator] (default task-3) Sending redirect to login page: http://keycloak-microcks.192.168.1.5.nip.io/auth/realms/Apicurio/protocol/openid-connect/auth?response_type=code&client_id=apicurio-studio&redirect_uri=http%3A%2F%2Fapicurio-studio-ui.192.168.1.5.nip.io%2Fconfig.js&state=3e4e092e-bc54-4802-a517-d3462de6f343&login=true&scope=openid
2020-06-13 22:20:10,629 DEBUG [io.undertow.request.security] (default task-3) Authentication result was CHALLENGE_SENT for /config.js
2020-06-13 22:21:00,918 DEBUG [io.undertow.request] (default I/O-2) Timing out idle connection from /10.1.94.1:41180
2020-06-13 22:21:00,918 DEBUG [io.undertow.request] (default I/O-2) Timing out idle connection from /10.1.94.1:41178
2020-06-13 22:21:48,749 DEBUG [com.arjuna.ats.arjuna] (Periodic Recovery) PeriodicRecovery: background thread Status <== SCANNING
2020-06-13 22:21:48,749 DEBUG [com.arjuna.ats.arjuna] (Periodic Recovery) PeriodicRecovery: background thread scanning
2020-06-13 22:21:48,749 DEBUG [com.arjuna.ats.arjuna] (Periodic Recovery) Periodic recovery first pass at Sat, 13 Jun 2020 22:21:48
2020-06-13 22:21:48,750 DEBUG [com.arjuna.ats.arjuna] (Periodic Recovery) processing /StateManager/BasicAction/TwoPhaseCoordinator/AtomicAction transactions
2020-06-13 22:21:48,750 DEBUG [com.arjuna.ats.arjuna] (Periodic Recovery) Recovery module 'com.arjuna.ats.internal.jta.recovery.arjunacore.CommitMarkableResourceRecordRecoveryModule<strong i="9">@3bc2db45</strong>' first pass processed
2020-06-13 22:21:48,750 DEBUG [com.arjuna.ats.arjuna] (Periodic Recovery) AtomicActionRecoveryModule first pass
2020-06-13 22:21:48,750 DEBUG [com.arjuna.ats.arjuna] (Periodic Recovery) processing /StateManager/BasicAction/TwoPhaseCoordinator/AtomicAction transactions
2020-06-13 22:21:48,750 DEBUG [com.arjuna.ats.arjuna] (Periodic Recovery) Recovery module 'com.arjuna.ats.internal.arjuna.recovery.AtomicActionRecoveryModule<strong i="10">@7ec04259</strong>' first pass processed
2020-06-13 22:21:48,750 DEBUG [com.arjuna.ats.txoj] (Periodic Recovery) TORecoveryModule - first pass
2020-06-13 22:21:48,750 DEBUG [com.arjuna.ats.arjuna] (Periodic Recovery) Recovery module 'com.arjuna.ats.internal.txoj.recovery.TORecoveryModule<strong i="11">@1a9ffeac</strong>' first pass processed
2020-06-13 22:21:48,751 DEBUG [com.arjuna.ats.arjuna] (Periodic Recovery) Recovery module 'com.arjuna.ats.internal.jta.recovery.arjunacore.SubordinateAtomicActionRecoveryModule<strong i="12">@1aa1c748</strong>' first pass processed
2020-06-13 22:21:48,751 DEBUG [com.arjuna.ats.jta] (Periodic Recovery) XARecoveryModule state change IDLE->FIRST_PASS
2020-06-13 22:21:48,751 DEBUG [com.arjuna.ats.jta] (Periodic Recovery) Local XARecoveryModule - first pass
2020-06-13 22:21:48,751 DEBUG [com.arjuna.ats.jta] (Periodic Recovery) XARecoveryModule state change FIRST_PASS->BETWEEN_PASSES
2020-06-13 22:21:48,751 DEBUG [com.arjuna.ats.arjuna] (Periodic Recovery) Recovery module 'com.arjuna.ats.internal.jta.recovery.arjunacore.XARecoveryModule<strong i="13">@5b07f3c7</strong>' first pass processed
J'ai cependant remarqué un journal du navigateur qui peut expliquer le problème.
main.a117148….js:1 [ApiEditingSession] WS connection to server CLOSED:
CloseEvent {isTrusted: true, wasClean: false, code: 1006, reason: "", type: "close", …}
bubbles: false
cancelBubble: false
cancelable: false
code: 1006
composed: false
currentTarget: WebSocket {__zone_symbol__openfalse: Array(1), __zone_symbol__messagefalse: Array(1), __zone_symbol__ON_PROPERTYopen: ƒ, __zone_symbol__ON_PROPERTYmessage: ƒ, __zone_symbol__ON_PROPERTYclose: ƒ, …}
defaultPrevented: false
eventPhase: 0
isTrusted: true
path: []
reason: ""
returnValue: true
srcElement: WebSocket {__zone_symbol__openfalse: Array(1), __zone_symbol__messagefalse: Array(1), __zone_symbol__ON_PROPERTYopen: ƒ, __zone_symbol__ON_PROPERTYmessage: ƒ, __zone_symbol__ON_PROPERTYclose: ƒ, …}
target: WebSocket {__zone_symbol__openfalse: Array(1), __zone_symbol__messagefalse: Array(1), __zone_symbol__ON_PROPERTYopen: ƒ, __zone_symbol__ON_PROPERTYmessage: ƒ, __zone_symbol__ON_PROPERTYclose: ƒ, …}
timeStamp: 1177278.1400000094
type: "close"
wasClean: false
__proto__: CloseEvent
La saison des sockets Web est fermée avec le code d'erreur 1006
Le journal du serveur que vous avez inclus est en fait le journal du pod -ui
- et non le journal du pod -ws
.
Le code d'erreur 1006 signifie que le socket Web s'est fermé anormalement par le navigateur. :( Et malheureusement, le navigateur ne vous donnera probablement pas de raison. Quelques informations ici :
Ce que vous pourriez peut-être essayer, c'est de trouver un outil de test WebSocket quelconque et d'essayer de l'utiliser. Cela pourrait vous donner des informations de diagnostic que nous pouvons utiliser.
Les journaux ont été récupérés avec la commande suivante
kubectl logs apicurio-studio-ws-7c458cf8d8-cgscc
y a-t-il un journal spécifique que je peux rechercher ?
Avez-vous des recommandations pour tester le socket Web ?
J'ai trouvé un moyen de tester le socket Web via https://websocket.org/echo.html
.
J'ai copié le code de connexion ws sur mon ordinateur. Quel message dois-je envoyer ?
C'est vraiment étrange car la sortie que vous avez publiée ci-dessus montre clairement une redirection d'authentification keycloak et d'autres sorties liées à keycloak, ainsi que des demandes de config.js
et version.js
- ce sont toutes des choses que fait l'interface utilisateur. Le composant websocket n'a pas du tout Keycloak inclus. Pourriez-vous peut-être récupérer la sortie du journal des trois pods ? Ce serait intéressant. Peut-être y a-t-il en fait un problème avec le pod !
Comme pour tester le socket web. Essayez simplement de vous connecter et voyez ce qui se passe. Si cela fonctionne, vous devriez obtenir quelque chose comme ceci :
Si le vôtre est cassé à l'étape de "connexion", cette connexion initiale échouera probablement.
J'ai testé le websocket en copiant le code fourni sur websocket.org et je l'ai enregistré sous websocket.html sur mon disque dur pour tester le pod ws sur mon réseau local. Malheureusement, je n'ai pas pu me connecter au ws de mon réseau local. J'ai cependant pu connecter le websocket public
wss://studio-ws.apicur.io/designs
. Par conséquent, je suppose que le test WebSocket est viable.
J'ai fourni tous les journaux dans la pièce jointe
journaux kubectl apicurio-studio-ui-5c6f5df485-lcdxp > apicurio-studio-ui.log
journaux kubectl apicurio-studio-ws-77dc7f7b87-57dcs > apicurio-studio-ws.log
journaux kubectl apicurio-studio-api-79d9d799cb-mgsmx > apicurio-studio-api.log
apicurio-studio-api.log
apicurio-studio-ui.log
apicurio-studio-ws.log
J'ai finalement réussi à le faire fonctionner! J'ai directement exposé le pod ws
via NodePort. Je suis maintenant certain que le problème vient des configurations d'entrée.
Impressionnant!! Merci d'avoir insisté sur ce point (sans abandonner). Et désolé de ne pouvoir être plus utile. Mon niveau de connaissance de kubernetes est faible. Pouvez-vous publier la configuration YAML que vous deviez ajouter pour la faire fonctionner ? Nous allons éventuellement créer un opérateur pour Apicurio Studio, mais je ne sais pas exactement quand cela pourrait arriver.
Eh bien, pour être honnête, je n'ai pas fait de configuration yaml spécifique.
Je crée un service NodePort ce qui signifie que le port ws pods 8080 est exposé sur l'IP de la machine sur un port aléatoire.
Voici comment j'ai créé un NodePort
kubectl expose deployment apicurio-studio-ws --type NodePort --name test
ce qui m'a donné un port aléatoire de 32204 accessible via la machine IP: 32204.
kubectl obtenir svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
test NodePort 10.152.183.2 <none> 8080:32204/TCP 10h
Je pense toujours que le nginx d'entrée devrait être le moyen préféré d'exposer le websocket car le port NodePort est aléatoire et ne peut pas être préconfiguré dans le apicurio-configmap.yaml
.
Ce qui dans mon cas est
apicurio-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: apicurio-configmap
data:
apicurio-db-connection-url: jdbc:mysql://apicuriodb:3306/apicuriodb
apicurio-kc-client-id: apicurio-studio
apicurio-kc-realm: Apicurio
apicurio-microcks-api-url: http://microcks-microcks.192.168.1.5.nip.io/api
apicurio-microcks-client-id: microcks-serviceaccount
apicurio-ui-editing-url: ws://192.168.1.5:32204/
apicurio-ui-feature-microcks: "true"
apicurio-ui-feature-share-with-everyone: "true"
apicurio-ui-hub-api-url: http://apicurio.192.168.1.5.nip.io/studio-api
apicurio-ui-logout-redirect-uri: /
keycloak-url: http://keycloak-microcks.192.168.1.5.nip.io/auth
D'accord très intéressant. Aucune idée pourquoi l'approche nginx ne fonctionnait pas pour vous. :( Mais content que quelque chose fonctionne !
J'ai trouvé un moyen d'exposer le pod ws via ingress. Cette solution est beaucoup plus paramétrable.
Dans cette solution, j'ai créé une URL distincte pour le pod WS via ingress.
Je fournirai un PR pour évaluation.
Hé, désolé d'être en retard à la fête.
@cemnura quelle entrée utilisez-vous et dans quelle version ?
De nombreux correctifs et modifications ont été apportés au nginx-ingress-controller, si vous l'utilisez.
une chose qui est bizarre à ce sujet, c'est le comportement du websocket, en particulier lorsque vous essayez de basculer entre http/https.
@EricWittmann je peux tester si une version corrigée fonctionne (nginx-ingress-version mise à jour vers la dernière) si vous le souhaitez
Toute aide que vous pouvez fournir serait appréciée, @t-rap
Helllo @t-rap J'utilise un Kubernetes microk8s qui utilise le nginx-ingress-controller-amd64
pour autant que je sache.
Name: nginx-ingress-microk8s-controller-nd8vb
Namespace: ingress
Priority: 0
Node: mccloud/192.168.1.5
Start Time: Tue, 02 Jun 2020 23:12:28 +0300
Labels: controller-revision-hash=59cb5dd586
name=nginx-ingress-microk8s
pod-template-generation=1
Annotations: <none>
Status: Running
IP: 192.168.1.5
IPs:
IP: 192.168.1.5
Controlled By: DaemonSet/nginx-ingress-microk8s-controller
Containers:
nginx-ingress-microk8s:
Container ID: containerd://3219d168e8fbb190acd214ab651f781f6adf51adcc2302891636a5ff250ef15f
Image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller-amd64:0.25.1
Image ID: sha256:2b8ed1f2046d4b37c18cca2ecc4f435b6618d2d198c0c8bf617954e863cc5832
Ports: 80/TCP, 443/TCP
Host Ports: 80/TCP, 443/TCP
Args:
/nginx-ingress-controller
--configmap=$(POD_NAMESPACE)/nginx-load-balancer-microk8s-conf
--publish-status-address=127.0.0.1
State: Running
Started: Fri, 12 Jun 2020 15:08:07 +0300
Last State: Terminated
Reason: Completed
Exit Code: 0
Started: Wed, 10 Jun 2020 23:37:02 +0300
Finished: Fri, 12 Jun 2020 15:08:03 +0300
Ready: True
Restart Count: 187
Liveness: http-get http://:10254/healthz delay=30s timeout=5s period=10s #success=1 #failure=3
Environment:
POD_NAME: nginx-ingress-microk8s-controller-nd8vb (v1:metadata.name)
POD_NAMESPACE: ingress (v1:metadata.namespace)
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from nginx-ingress-microk8s-serviceaccount-token-r6md6 (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
nginx-ingress-microk8s-serviceaccount-token-r6md6:
Type: Secret (a volume populated by a Secret)
SecretName: nginx-ingress-microk8s-serviceaccount-token-r6md6
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/disk-pressure:NoSchedule
node.kubernetes.io/memory-pressure:NoSchedule
node.kubernetes.io/network-unavailable:NoSchedule
node.kubernetes.io/not-ready:NoExecute
node.kubernetes.io/pid-pressure:NoSchedule
node.kubernetes.io/unreachable:NoExecute
node.kubernetes.io/unschedulable:NoSchedule
Events: <none>
merci beaucoup @cemnura
pourriez-vous tester la fourchette que j'ai faite (voir ci-dessous) ? Merci (encore) d'avance :)
j'ai testé la configuration sur https://github.com/t-rap/apicurio-studio-981/ avec un ingress-nginx-controller version 0.24.1 et apicurio-studio 0.2.44.Final
J'ai ajouté le sous-chemin "/designs" à ingress apicurio-studio-ws car il s'agit d'un sous-chemin qui doit être géré par ws.
Je ferai quelques tests sur ingress-controller 0.25.1 et apicurio-studio 0.2.46.Final probablement le week-end.
Comme le contrôleur d'entrée est maintenu par kubernetes, il y a une charge de changements à reconnaître.
j'ai également supprimé l'extrait de configuration car il n'est plus nécessaire (mon mauvais, duh)
Je donnerai une mise à jour quand j'aurai fini.
Je vais essayer @t-rap 👍
J'ai pu exposer le pod ws
sur la même URL avec le pod ui
en utilisant le manifeste Kubernetes @t-rap fourni.
Cependant, avec quelques modifications mineures.
J'ai changé le nom d'entrée du pod ws en apicurio-studio-ws
supprimé le suffixe /ws
dans la clé apicurio-configmap.yaml
pour apicurio-ui-editing-url
supprimé le chemin /ws
dans la configuration d'entrée dans le apicurio-studio-ingresses.yaml
Voici ma configuration
apicurio-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: apicurio-configmap
data:
apicurio-db-connection-url: jdbc:mysql://apicuriodb:3306/apicuriodb
apicurio-kc-client-id: apicurio-studio
apicurio-kc-realm: Apicurio
apicurio-microcks-api-url: http://microcks-microcks.192.168.1.5.nip.io/api
apicurio-microcks-client-id: microcks-serviceaccount
apicurio-ui-editing-url: ws://apicurio.192.168.1.5.nip.io
apicurio-ui-feature-microcks: "true"
apicurio-ui-feature-share-with-everyone: "true"
apicurio-ui-hub-api-url: http://apicurio.192.168.1.5.nip.io/studio-api
apicurio-ui-logout-redirect-uri: /
keycloak-url: http://keycloak-microcks.192.168.1.5.nip.io/auth
apicurio-studio-ingresses.yaml
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
name: apicurio-studio-api
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
labels:
module: apicurio-studio-api
spec:
rules:
- host: apicurio.192.168.1.5.nip.io
http:
paths:
- backend:
serviceName: "apicurio-studio-api"
servicePort: 8091
path: /studio-api/?(.*)
---
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
name: apicurio-studio-ui
labels:
module: apicurio-studio-ui
spec:
rules:
- host: apicurio.192.168.1.5.nip.io
http:
paths:
- backend:
serviceName: "apicurio-studio-ui"
servicePort: 8093
path: /
---
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
name: apicurio-studio-ws
annotations:
labels:
module: apicurio-studio-ws
spec:
rules:
- host: apicurio.192.168.1.5.nip.io
http:
paths:
- backend:
serviceName: "apicurio-studio-ws"
servicePort: 8092
path: /designs
Bonne nouvelle! Je suppose que nous avons besoin d'un PR séparé pour ces changements ? Qu'en pensez-vous @t-rap et @jsenko ?
Commentaire le plus utile
Bonne nouvelle! Je suppose que nous avons besoin d'un PR séparé pour ces changements ? Qu'en pensez-vous @t-rap et @jsenko ?