Halo, Saya mengalami kesulitan serupa dengan masalah yang dijelaskan di #813 ketika mencoba menjalankan Kubernetes yang mengekspos WS melalui 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
Saya menggunakan file manifes kubernetes di distro/kubernetes. Saya hanya mengubah Host untuk setiap layanan.
Saya berasumsi informasi di #813 tidak membantu Anda? Ini terlihat seperti masalah yang sama. Mungkin @0x218 dapat menguraikan perubahan yang berhasil untuk pemasangannya? Atau mungkin @t-rap punya pemikiran? Keahlian kubernetes saya sangat terbatas.
Ya, saya mencoba menerapkan header Versi, Peningkatan, dan Koneksi di Nginx Ingress @0x218 yang disarankan. Namun, saya tidak dapat terhubung ke soket web.
Adakah log yang dapat saya berikan untuk lebih memahami masalahnya?
Jika Anda dapat memberikan output konsol browser "penuh" dan log server dari pod -ws, itu bisa membantu.
catatan peramban:
[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 log lengkap:
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
Man, saya tidak tahu apa yang mungkin salah, kalau begitu. Saya akan meminta Anda untuk memastikan bahwa pod -ws dan -api terhubung ke database yang sama. Jika tidak, Anda akan mendapatkan kesalahan saat menghubungkan, tetapi dalam hal ini -ws pod log akan menunjukkan kesalahan, dan Anda tidak akan mendapatkan 404, saya rasa tidak.
Sepertinya itu pasti semacam masalah Ingress, dan saya tidak cukup tahu tentang k8 untuk membantu! :(
Saya juga mencoba mengekspos pod ws secara langsung melalui NodePort. Namun saya masih belum berhasil.
Saya akan mencoba lagi. Apakah meningkatkan level log akan membantu?
Tidak ada salahnya. Ada sesuatu di log -ws tentang autentikasi yang tidak begitu saya pahami, karena komponen -ws tidak mengaktifkan autentikasi. Mungkin meningkatkan level log akan memperjelas hal itu.
Menurut Anda, level apa yang harus saya tingkatkan ke level log?
Mungkin mulai dengan DEBUG dan lihat apa yang terjadi. :)
Saya meningkatkan level log untuk men-debug. Namun, tidak ada log yang bermanfaat.
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
Namun saya melihat log browser yang mungkin menjelaskan masalahnya.
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
Musim soket web sedang ditutup dengan kode kesalahan 1006
Log server yang Anda sertakan sebenarnya adalah log pod -ui
- bukan log pod -ws
.
Kode kesalahan 1006 berarti soket web ditutup secara tidak normal oleh browser. :( Dan sayangnya browser kemungkinan besar tidak akan memberi Anda alasan. Beberapa info di sini:
Apa yang mungkin dapat Anda coba adalah menemukan semacam alat pengujian websocket dan mencoba menggunakannya. Ini mungkin memberi Anda beberapa informasi diagnostik yang dapat kami gunakan.
Log di mana diambil dengan perintah berikut
kubectl logs apicurio-studio-ws-7c458cf8d8-cgscc
apakah ada log khusus yang bisa saya cari?
Apakah Anda memiliki rekomendasi untuk menguji soket web?
Saya menemukan cara untuk menguji soket web melalui https://websocket.org/echo.html
.
Saya menyalin kode koneksi ws ke komputer saya. Pesan apa yang harus saya kirim?
Itu benar-benar aneh karena output yang Anda posting di atas dengan jelas menunjukkan pengalihan auth keycloak dan output terkait keycloak lainnya, serta permintaan untuk config.js
dan version.js
- itu semua hal yang dilakukan UI. Komponen websocket tidak memiliki Keycloak yang disertakan sama sekali. Bisakah Anda mengambil output log dari ketiga pod? Itu akan menarik. Mungkin sebenarnya ada masalah dengan podnya!
Sedangkan untuk pengujian web socket. Coba sambungkan dan lihat apa yang terjadi. Jika berhasil, Anda harus mendapatkan sesuatu seperti ini:
Jika koneksi Anda rusak pada tahap "sambungkan", maka koneksi awal itu mungkin akan gagal.
Saya menguji soket web dengan menyalin kode yang disediakan di websocket.org dan menyimpannya sebagai websocket.html di hard drive saya untuk menguji pod ws di jaringan lokal saya. Sayangnya saya tidak dapat terhubung ke ws di jaringan lokal saya. Namun saya dapat menghubungkan soket web publik
wss://studio-ws.apicur.io/designs
. Oleh karena itu, saya menganggap tes websocket layak.
Saya menyediakan semua log di lampiran
kubectl logs apicurio-studio-ui-5c6f5df485-lcdxp > apicurio-studio-ui.log
kubectl logs apicurio-studio-ws-77dc7f7b87-57dcs > apicurio-studio-ws.log
kubectl logs apicurio-studio-api-79d9d799cb-mgsmx > apicurio-studio-api.log
apicurio-studio-api.log
apicurio-studio-ui.log
apicurio-studio-ws.log
Saya akhirnya berhasil! Saya langsung mengekspos pod ws
melalui NodePort. Saya sekarang yakin bahwa masalahnya ada pada konfigurasi ingress.
Luar biasa!! Terima kasih telah mendorong ini (tidak menyerah). Dan maaf saya tidak bisa membantu lebih banyak. Tingkat pengetahuan kubernetes saya rendah. Bisakah Anda memposting konfigurasi YAML apa pun yang perlu Anda tambahkan agar berfungsi? Kami akhirnya akan membuat operator untuk Apicurio Studio, tetapi saya tidak tahu persis kapan itu mungkin terjadi.
Sejujurnya saya tidak membuat konfigurasi yaml tertentu.
Saya membuat layanan NodePort yang berarti bahwa port ws pods 8080 terbuka pada IP mesin pada port acak.
Beginilah cara saya membuat NodePort
kubectl expose deployment apicurio-studio-ws --type NodePort --name test
yang memberi saya port acak 32204 yang dapat diakses melalui mesin IP: 32204.
kubectl dapatkan svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
test NodePort 10.152.183.2 <none> 8080:32204/TCP 10h
Saya masih berpikir ingress nginx harus menjadi cara yang lebih disukai untuk mengekspos websocket karena port NodePort acak dan tidak dapat dikonfigurasi sebelumnya dalam apicurio-configmap.yaml
.
Yang dalam kasus saya adalah
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
Oke sangat menarik. Tidak tahu mengapa pendekatan nginx tidak berhasil untuk Anda. :( Tapi senang Anda punya sesuatu yang bekerja!
Saya menemukan cara untuk mengekspos pod ws melalui ingress. Solusi ini jauh lebih dapat dikonfigurasi.
Dalam solusi ini saya membuat URL terpisah untuk pod WS melalui ingress.
Saya akan memberikan PR untuk evaluasi.
hei, maaf karena terlambat ke pesta.
@cemnura ingress apa yang Anda gunakan, dan dalam versi apa?
Ada banyak perbaikan dan perubahan pada nginx-ingress-controller, jika Anda menggunakannya.
satu hal yang aneh tentang itu, adalah perilaku websocket, terutama ketika Anda mencoba untuk beralih antara http/https.
@EricWittmann saya dapat menguji apakah versi yang ditambal berfungsi (versi nginx-ingress-diperbarui ke yang terbaru) jika Anda mau
Bantuan apa pun yang dapat Anda berikan akan dihargai, @t-rap
Helllo @t-rap Saya menjalankan microk8s Kubernetes yang menggunakan nginx-ingress-controller-amd64
sejauh yang saya mengerti.
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>
terima kasih banyak @cemnura
bisakah Anda menguji garpu yang saya buat (lihat di bawah)? Terima kasih (sekali lagi) sebelumnya :)
saya menguji konfigurasi pada https://github.com/t-rap/apicurio-studio-981/ dengan ingress-nginx-controller versi 0.24.1 dan apicurio-studio 0.2.44.Final
saya menambahkan subPath "/designs" ke ingress apicurio-studio-ws karena ini adalah subpath yang perlu ditangani oleh ws.
Saya akan menjalankan beberapa tes pada ingress-controller 0.25.1 dan apicurio-studio 0.2.46.Final mungkin pada akhir pekan.
Karena pengontrol ingress dikelola oleh kubernetes, ada banyak perubahan yang harus dikenali.
saya juga menghapus cuplikan konfigurasi karena tidak perlu lagi (buruk saya, ya)
Saya akan memberikan pembaruan ketika saya selesai.
Saya akan mencobanya @t-rap 👍
Saya dapat mengekspos pod ws
pada url yang sama dengan pod ui
menggunakan manifes Kubernetes yang disediakan @t-rap.
Namun, dengan beberapa perubahan kecil.
Saya mengubah nama masuknya pod ws menjadi apicurio-studio-ws
menghapus akhiran /ws
di apicurio-configmap.yaml
untuk kunci apicurio-ui-editing-url
menghapus jalur /ws
dalam konfigurasi ingress di apicurio-studio-ingresses.yaml
Ini konfigurasi saya
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
Kabar baik! Saya berasumsi kita perlu PR terpisah untuk perubahan ini? Bagaimana menurutmu @t-rap dan @jsenko ?
Komentar yang paling membantu
Kabar baik! Saya berasumsi kita perlu PR terpisah untuk perubahan ini? Bagaimana menurutmu @t-rap dan @jsenko ?