2016-02-10 2 views
8

У меня есть приложение Meteor, развернутое с использованием Kubernetes в Google Cloud, настроенное с помощью Nginx, действующего как завершение SSL. Все работает нормально.Запуск приложения Meteor с прокси-сервером Nginx SSL на Kubernetes

Однако, похоже, что если два разных клиента подключаются к двум различным контейнерам SSL, обновления не отображаются в соответствующих приложениях на срок до 10 секунд, из-за чего кажется, что веб-узлы не работают, но опрос вступление в силу. Я подтвердил, что все клиенты связаны с Websockets, но поскольку обновления не распространяются немедленно, возможно, Nginx не настроен правильно разговаривать с приложением Meteor.

Вот моя SSL/услуга Nginx:

apiVersion: v1 kind: Service metadata: name: frontend-ssl labels: name: frontend-ssl spec: ports: - name: http port: 80 targetPort: 80 - name: https port: 443 targetPort: 443 selector: name: frontend-ssl type: LoadBalancer loadBalancerIP: 123.456.123.456 sessionAffinity: ClientIP

А вот служба Метеора:

apiVersion: v1 kind: Service metadata: name: frontend labels: name: frontend spec: ports: - port: 3000 targetPort: 3000 selector: name: flow-frontend type: LoadBalancer loadBalancerIP: 123.456.123.456 sessionAffinity: ClientIP

Для прекращения SSL, я использую Kubernetes предложили раздвоенные установки SSL с дополнениями веб-сокетов https://github.com/markoshust/nginx-ssl-proxy

+0

Вы указывая 123.456.123.456 на обоих служб (или это опечатка)? Я не знаком с метеоритом, но есть шанс, что ваша проблема не метеорная проблема. У вас должно быть как минимум 2 контейнера (желательно, 2 RC), и 2 службы, один для nginx и один для вашего приложения. Только служба nginx должна быть Type = Loadbalacer. –

+0

Чтобы сузить неизвестные, вы можете заставить стручки приземлиться на том же узле с помощью селекторов узлов (https://github.com/kubernetes/kubernetes/blob/release-1.1/docs/user-guide/node-selection/ README.md # шаг один прикрепить ярлык-к-узлу). Вы также можете указать экземпляр nginx непосредственно в службе с чем-то вроде 'proxy_pass http: //svcName.svcNamespace.svc.cluster.local: svcPort' в вашей конфигурации (при условии, что у вас работает DNS-кластер и вы можете разрешить свое имя службы, например Nslookup). Дайте мне знать, как это происходит. –

+0

Nginx и Meteor имеют отдельные rcs и стручки. Я решил, что только nginx нужен Type = LoadBalancer, однако я не думаю, что на стороне метеора должно повлиять что угодно. Они живут на одном и том же IP-адресе, однако это просто делает доступными как общедоступные, так и каждый на своем собственном порту. –

ответ

0

В вашей конфигурации NginX выполнено y ou обязательно использовать флаг ip_hash для прямого доступа к веб-сайтам на один и тот же сервер? Также вы должны убедиться, что заголовки WebSocket Upgrade пересылаются:

upstream meteorapp{ 
    ip_hash; 
    server hostname:port 
} 
server { 
    # your server stuff here 
    # 
    location/{ 
     proxy_pass     http://meteorapp; 
     proxy_set_header   Host $host; 
     proxy_set_header   X-Real-IP $remote_addr; 
     proxy_http_version   1.1; 
     proxy_set_header   Upgrade $http_upgrade; 
     proxy_set_header   Connection "upgrade"; 

     proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header   X-Forwarded-Proto http; 
     proxy_redirect    http:// $scheme://; 
    } 
} 
+0

Arg no ... однострочный, pfft. Позвольте мне проверить это. Спасибо, много! –

+0

No-go. Добавление строки 'ip_hash', казалось, не имело никакого эффекта. –

+0

как насчет заголовков обновлений? – MrE

0

Самый простой способ запустить приложение будет использовать контроллер ингресс на основе Nginx вместо службы Nginx.

На мой взгляд, самый простой способ развертывания ингресс контроллер, с руля: https://docs.helm.sh/using_helm/#installing-helm https://kubeapps.com/charts/stable/nginx-ingress

Но если вы предпочитаете не добавлять еще один инструмент для вашего стека можно использовать официальное руководство по установке: https://github.com/kubernetes/ingress-nginx/tree/master/deploy.

Пример конфигурации объекта вход с поддержкой веб-сокетов можно найти здесь: https://github.com/nginxinc/kubernetes-ingress/tree/master/examples/websocket

+0

Возможно, это правильно. Я отошел от Кубернеса по нескольким причинам, но здесь должно было что-то происходить с Nginx. –

Смежные вопросы