Здравствуйте, у меня возникают трудности, аналогичные описанной в #813, когда я пытаюсь запустить Kubernetes, открывая WS через 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
Я использую файлы манифеста kubernetes в дистрибутиве/kubernetes. Я только меняю хост для каждой службы.
Я предполагаю, что информация в #813 вам не помогла? Это похоже на ту же проблему. Может быть , @0x218 мог бы рассказать об изменениях, которые сработали для их установки? Или, возможно, у @t-rap есть какие-то мысли? Мой опыт работы с kubernetes крайне ограничен.
Да, я пытался применить заголовки Version, Upgrade и Connection в предложенном Nginx Ingress @0x218 . Тем не менее, я не смог подключиться к веб-сокету.
Любые журналы, которые я могу предоставить, чтобы лучше понять проблему?
Если вы можете предоставить «полный» вывод консоли браузера и журналы сервера из модуля -ws, это может помочь.
журнал браузера:
[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
полный журнал ws pod:
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
Тогда я понятия не имею, что может пойти не так. Я собирался попросить вас убедиться, что модули -ws и -api подключены к одной и той же базе данных. В противном случае вы получите сообщение об ошибке при подключении, но в этом случае журнал pod -ws покажет ошибку, и вы не получите 404, я не думаю.
Похоже, это какая-то проблема с Ingress, и я недостаточно знаю о k8s, чтобы помочь! :(
Я также пытался напрямую открыть модуль ws через NodePort. Но я все еще не имел успеха.
Я собираюсь попробовать еще раз. Поможет ли увеличение уровня журнала?
Это не могло повредить. В журнале -ws было что-то об аутентификации, чего я не совсем понял, поскольку для компонента -ws не включена аутентификация. Возможно, увеличение уровня журнала прояснило бы это больше.
Как вы думаете, до какого уровня мне следует увеличить уровень журнала?
Вероятно, начните с DEBUG и посмотрите, что произойдет. :)
Я увеличил уровни журнала для отладки. Тем не менее, нет никакого полезного журнала.
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
Однако я заметил журнал браузера, который может объяснить проблему.
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
Сезон веб-сокетов закрывается с кодом ошибки 1006
Журнал сервера, который вы включили, на самом деле является журналом модуля -ui
, а не журналом модуля -ws
.
Код ошибки 1006 означает, что браузер ненормально закрыл веб-сокет. :( И, к сожалению, браузер, скорее всего, не даст вам причину. Немного информации здесь:
Возможно, вы могли бы попробовать найти какой-нибудь инструмент для тестирования веб-сокетов и попытаться его использовать. Это может дать вам некоторую диагностическую информацию, которую мы можем использовать.
Журналы были получены с помощью следующей команды
kubectl logs apicurio-studio-ws-7c458cf8d8-cgscc
есть ли конкретный журнал, который я могу найти?
Есть ли у вас какие-либо рекомендации по тестированию веб-сокета?
Я нашел способ проверить веб-сокет через https://websocket.org/echo.html
.
Я скопировал код подключения ws на свой компьютер. Какое сообщение я должен отправить?
Это действительно странно, потому что вывод, который вы разместили выше, ясно показывает перенаправление аутентификации keycloak и другой вывод, связанный с keycloak, а также запросы на config.js
и version.js
— это все, что делает пользовательский интерфейс. Компонент websocket вообще не включает Keycloak. Не могли бы вы получить вывод журнала из всех трех модулей? Это было бы интересно. Возможно, действительно проблема с подом!
Что касается тестирования веб-сокета. Просто попробуйте подключиться и посмотреть, что произойдет. Если он работает, вы должны получить что-то вроде этого:
Если ваш не работает на этапе «подключения», то это начальное подключение, вероятно, не удастся.
Я протестировал веб-сокет, скопировав код, представленный на веб-сайте websocket.org, и сохранил его как websocket.html на своем жестком диске, чтобы протестировать модуль ws в своей локальной сети. К сожалению, мне не удалось подключиться к ws в моей локальной сети. Однако мне удалось подключить общедоступный веб-сокет
wss://studio-ws.apicur.io/designs
. Поэтому я предполагаю, что тест веб-сокета жизнеспособен.
Я предоставил все логи во вложении
Журналы kubectl apicurio-studio-ui-5c6f5df485-lcdxp > apicurio-studio-ui.log
журналы kubectl apicurio-studio-ws-77dc7f7b87-57dcs > apicurio-studio-ws.log
журналы kubectl apicurio-studio-api-79d9d799cb-mgsmx > apicurio-studio-api.log
apicurio-studio-api.log
apicurio-studio-ui.log
apicurio-studio-ws.log
Наконец-то я заработал! Я напрямую выставил под ws
через NodePort. Теперь я уверен, что проблема связана с входными конфигурациями.
Потрясающий!! Спасибо, что выдержали это (не сдались). И извините, я не мог больше помочь. Мой уровень знаний kubernetes низкий. Можете ли вы опубликовать любую конфигурацию YAML, которую вам нужно было добавить, чтобы она заработала? Со временем мы создадим оператора для Apicurio Studio, но я точно не знаю, когда это может произойти.
Ну, если честно, я не делал конкретной конфигурации yaml.
Я создаю службу NodePort, что означает, что порт ws pods 8080 отображается на IP-адресе машины на случайном порту.
Вот как я создал NodePort
kubectl expose deployment apicurio-studio-ws --type NodePort --name test
который дал мне случайный порт 32204, к которому можно получить доступ через IP-адрес машины: 32204.
kubectl получить svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
test NodePort 10.152.183.2 <none> 8080:32204/TCP 10h
Я по-прежнему считаю, что входной nginx должен быть предпочтительным способом предоставления веб-сокета, потому что порт NodePort является случайным и не может быть предварительно настроен в apicurio-configmap.yaml
.
Что в моем случае
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
ОК очень интересно. Не знаю, почему у вас не работает подход nginx. :( Но рад, что у тебя что-то получилось!
Я нашел способ разоблачить модуль ws через вход. Это решение гораздо более настраиваемое.
В этом решении я создал отдельный URL-адрес для модуля WS через вход.
Я предоставлю PR для оценки.
эй, извини, что опоздал на вечеринку.
@cemnura какой вход вы используете и в какой версии?
В nginx-ingress-controller было внесено множество исправлений и изменений, если вы его используете.
одна вещь, которая кажется странной, - это поведение веб-сокета, особенно когда вы пытаетесь переключиться между http/https.
@EricWittmann я могу проверить, работает ли исправленная версия (nginx-ingress-версия обновлена до последней версии), если хотите
Любая помощь, которую вы можете оказать, будет оценена по достоинству, @t-rap
Здравствуйте, @t-rap Я использую Kubernetes microk8s, который, насколько я понимаю, использует nginx-ingress-controller-amd64
.
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>
большое спасибо @cemnura
не могли бы вы проверить вилку, которую я сделал (см. ниже)? Спасибо (еще раз) заранее :)
я протестировал конфигурацию на https://github.com/t-rap/apicurio-studio-981/ с ingress-nginx-controller версии 0.24.1 и apicurio-studio 0.2.44.Final.
я добавил подпуть «/designs» для входа в apicurio-studio-ws, так как это подпуть, который должен обрабатываться ws.
Я проведу несколько тестов на ingress-controller 0.25.1 и apicurio-studio 0.2.46. Final, вероятно, на выходных.
Поскольку ingress-controller поддерживается kubernetes, необходимо распознать множество изменений.
я также удалил фрагмент конфигурации, так как он больше не нужен (мой плохой, да)
Я дам обновление, когда я закончу.
Я попробую @t-rap 👍
Мне удалось открыть модуль ws
по тому же URL-адресу, что и модуль ui
, используя предоставленный @t-rap манифест Kubernetes.
Однако с небольшими изменениями.
Я изменил входное имя ws pod на apicurio-studio-ws
удалил суффикс $# /ws
$#$ в ключе apicurio-configmap.yaml
для apicurio-ui-editing-url
удалил путь /ws
в конфигурации входа в apicurio-studio-ingresses.yaml
Вот мои конфигурации
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
Отличные новости! Я полагаю, нам нужен отдельный PR для этих изменений? Что вы думаете о @t-rap и @jsenko ?
Самый полезный комментарий
Отличные новости! Я полагаю, нам нужен отдельный PR для этих изменений? Что вы думаете о @t-rap и @jsenko ?