Ca fait beaucoup trop d'heures que je galère sur ça.
J'ai un websocket codé en python que je run dans un Docker container sur un EC2.
Le server tourne sur le port 8765 et écoute également le port 8080 pour le health check de l'ALB
J'arrive à me co à mon websocket en passant directement par l'IP de l'EC2 en ws://... donc pas de problème de ce côté là.
Là où ça se complique: pour que mon front (en HTTPS) puisse se connecter au websocket, je dois passer par le wss:// et donc, si j'ai bien compris, passer par un ALB qui pourra gérer le certificat SSL/TLS. Bref j'ai crée mon certificat avec ACM, vérifié que tout était OK côté DNS et paramétré ce qu'il fallait dans Route53 (en mappant mon ALB à mon sous domaine via un ALIAS)
Côté ALB, je route le traffic en HTTPS (port 43) vers mon groupe cible qui écoute le port 8765. Le health check est OK.
J'ai aussi vérifié les groupes de sécurité de l'EC2 et de l'ALB, ainsi que le VPC. Tout à l'air bon.
Mon websocket est codé en python avec websockets
host = "0.0.0.0"
websocket_port = 8765
health_check_port = 8080
server = Server(host, websocket_port, health_check_port)
# Run the server
asyncio.run(server.run())
Et j'ai aussi vérifié que le container exposait bien les bons ports (de toute façon si c'était pas le cas je ne pourrais pas me connecté à partir de l'ip de l'EC2).
Maintenant, malgré tout ça, impossible de me co en passant par mon DNS et l'ALB. Je me tappe des NS_ERROR_WEBSOCKET_CONNECTION_REFUSED
J'ai regardé les logs côté ALB. Il reçoit bien la requête mais se mange un 502 BAD GATEWAY
https 2024-08-15T10:01:50.136541Z app/xxx/xxx.xxx.xx.xxx xxx xxx.xx.x.xxx:8765 -1 -1 -1 502 - 870 688 "GET https://xxx.xxx.io:443/ HTTP/1.1" "Mes Headers" TLS_AES_128_GCM_SHA256 TLSv1.3 arn:aws:elasticloadbalancing:eu-west-3:xxx:targetgroup/xxx/xxx"Root=xxx" "xxx.xxx.io" "arn:aws:acm:eu-west-3:xxx: certificate/xxx" 0 2024-08-15T10:01:50.132000Z "forward" "-" "-" "xxx.xx.x.xxx:8765" "-" "-" "-" xxx
J'ai épuisé un peu toutes mes options là. Donc si y'a un pro qui passe par là et qui voit un truc obvious que j'ai loupé, je suis preneur