websocket на порту 443 с /socket.io под kubernetes не работает - PullRequest
0 голосов
/ 14 сентября 2018

Попытка перевести мою среду разработки для запуска на minikube.

Страница загружается, но моя страница использует веб-сокеты на том же порте / протоколе, с которым загружен index.html (в данном случае https), икажется, что веб-сокеты работают неправильно.

Вот пример правильного вывода при запуске через nginx / python на моей локальной машине разработки.

127.0.0.1 - - [14/Sep/2018 14:14:35] "GET / HTTP/1.0" 200 -
127.0.0.1 - - [14/Sep/2018 14:14:35] "GET /static/jquery.min.js HTTP/1.0" 200 -
127.0.0.1 - - [14/Sep/2018 14:14:35] "GET /static/socket.io.min.js HTTP/1.0" 200 -
127.0.0.1 - - [14/Sep/2018 14:14:35] "GET /socket.io/?EIO=3&transport=polling&t=MNPIg-N HTTP/1.0" 200 -
127.0.0.1 - - [14/Sep/2018 14:14:35] "GET /favicon.ico HTTP/1.0" 404 -
127.0.0.1 - - [14/Sep/2018 14:14:35] "GET /favicon.ico HTTP/1.0" 404 -
127.0.0.1 - - [14/Sep/2018 14:14:35] "POST /socket.io/?EIO=3&transport=polling&t=MNPIg-o&sid=0570b4fe27f345e9b11858b3acb40a6e HTTP/1.0" 200 -
127.0.0.1 - - [14/Sep/2018 14:14:35] "GET /socket.io/?EIO=3&transport=polling&t=MNPIg-r&sid=0570b4fe27f345e9b11858b3acb40a6e HTTP/1.0" 200 -
127.0.0.1 - - [14/Sep/2018 14:14:35] "POST /socket.io/?EIO=3&transport=polling&t=MNPIg_x&sid=0570b4fe27f345e9b11858b3acb40a6e HTTP/1.0" 200 -
127.0.0.1 - - [14/Sep/2018 14:14:35] "GET /socket.io/?EIO=3&transport=polling&t=MNPIg_w&sid=0570b4fe27f345e9b11858b3acb40a6e HTTP/1.0" 200 -
127.0.0.1 - - [14/Sep/2018 14:14:40] "GET /socket.io/?EIO=3&transport=polling&t=MNPIh0L&sid=0570b4fe27f345e9b11858b3acb40a6e HTTP/1.0" 200 -
127.0.0.1 - - [14/Sep/2018 14:14:45] "GET /socket.io/?EIO=3&transport=polling&t=MNPIiE3&sid=0570b4fe27f345e9b11858b3acb40a6e HTTP/1.0" 200 -
127.0.0.1 - - [14/Sep/2018 14:14:50] "GET /socket.io/?EIO=3&transport=polling&t=MNPIjSI&sid=0570b4fe27f345e9b11858b3acb40a6e HTTP/1.0" 200 -
127.0.0.1 - - [14/Sep/2018 14:14:55] "GET /socket.io/?EIO=3&transport=polling&t=MNPIkgS&sid=0570b4fe27f345e9b11858b3acb40a6e HTTP/1.0" 200 -

Обратите внимание, какПОЛУЧАЙТЕ каждые 5 секунд (это таймер, запущенный на странице)

При работе в Kubernetes страница загружается, и таймер отображается так, как будто веб-сокет работает, однако я не показываю журналы, где веб-сокет имеетПОЛУЧИТЬ или ПОСТАТЬ после начального.

192.168.99.1,172.17.0.7 - - [14/Sep/2018 18:24:03] "GET /static/jquery.min.js HTTP/1.1" 304 1210 0.008244
192.168.99.1,172.17.0.7 - - [14/Sep/2018 18:24:03] "GET /static/socket.io.min.js HTTP/1.1" 304 1210 0.009271
(10) accepted ('172.17.0.7', 34444)
192.168.99.1,172.17.0.7 - - [14/Sep/2018 18:24:04] "GET /socket.io/?EIO=3&transport=polling&t=MNPKrsy HTTP/1.1" 200 379 0.003682
(10) accepted ('172.17.0.7', 34446)
192.168.99.1,172.17.0.7 - - [14/Sep/2018 18:24:04] "GET /favicon.ico HTTP/1.1" 404 1314 0.004694
(10) accepted ('172.17.0.7', 34448)
(10) accepted ('172.17.0.7', 34450)
(10) accepted ('172.17.0.7', 34452)
192.168.99.1,172.17.0.7 - - [14/Sep/2018 18:24:04] "GET /socket.io/?EIO=3&transport=polling&t=MNPKrtD&sid=77d4755c524f47c2948b9c36da007b85 HTTP/1.1" 200 210 0.000749
192.168.99.1,172.17.0.7 - - [14/Sep/2018 18:24:04] "POST /socket.io/?EIO=3&transport=polling&t=MNPKrtB&sid=77d4755c524f47c2948b9c36da007b85 HTTP/1.1" 200 194 0.002632
(10) accepted ('172.17.0.7', 34454)
192.168.99.1,172.17.0.7 - - [14/Sep/2018 18:24:04] "GET /favicon.ico HTTP/1.1" 404 1314 0.002388

Ingress настроен следующим образом:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-service
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
    - http:
        paths:
          - path: /
            backend:
              serviceName: websitev2-cluster-ip-service
              servicePort: 8080

Как упоминалось ранее, websocket не находится на другом порту, и он создается в javascript как:

namespace = '/socket';
var socket = io.connect(location.protocol + '//' + document.domain + ':' + location.port + namespace);

Существуют ли какие-либо особые требования для работы веб-сокетов?Я не верю, что мне нужен специальный маршрут, потому что URI должен быть отправлен в то же место, что и все остальное, и на тот же порт.

РЕДАКТИРОВАТЬ: БОЛЬШЕ ДЕТАЛЕЙ

Мой веб-сайт имеетФорма, которая при отправке выполняет следующий код:

    $('form#job').submit(function(event) {
        var nameValue = JSON.stringify($(event.target).serializeArray());
        console.log(nameValue)
        socket.emit('job_submit', {data: nameValue});
        return false;
    });

На стороне Python у меня есть код сокета, который должен быть получен после того, как пользователь нажмет кнопку отправки.

@socketio.on('job_submit', namespace='/socket')
def job_submit(message):
    print('recieved job_submit message from client')
    # kick off subjob in celery task
    data = unstringify(message)
    print('data = {0}'.format(data))
    sessiondata = dict(session)
    print('sessiondata = {}'.format(sessiondata))
    subjobstart.delay(sessiondata, request.sid, data)

В моих журналах я не получаю никаких сообщений "полученное сообщение job_submit от клиента" при нажатии кнопки отправки, что означает, что javascript пытается отправить emit websocket на сервер python, но сообщение так и не попадает туда.

Отправка с python на страницу клиента работает, так как время обновляется на сайте.

1 Ответ

0 голосов
/ 14 сентября 2018

Так что не совсем уверен, что изменилось, так как он работал на тестовой коробке, очевидно, проблема заключалась в проверке формы, которую я делал.Как только я включил опцию novalidate, чтобы временно обойти проверку формы, форму можно было отправить, и у меня все равно не было проблем с веб-сокетом.

Надеюсь, этот пост поможет кому-то с кодом, размещенным вместо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...