Сбой подключения к веб-сокету после установки https в google ingress controller - PullRequest
0 голосов
/ 24 мая 2018

Я развернул приложение в kubernetes, которое обслуживается Google Ingress Controller (Сервис как ELB).Приложение работает нормально.Но в тот момент, когда я применяю конфигурацию, связанную с https, приходит https, но websocket не работает.

Ниже приведен служебный файл и файл конфигурации

для http:

kind: Service
apiVersion: v1
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  labels:
    app: ingress-nginx
  annotations:
    # Enable PROXY protocol
    service.beta.kubernetes.io/aws-load-balancer-proxy-protocol: '*'
    # Increase the ELB idle timeout to avoid issues with WebSockets or Server-Sent Events.
    service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout: '3600'
spec:
  type: LoadBalancer
  selector:
    app: ingress-nginx
  ports:
  - name: http
    port: 80
    targetPort: http
  - name: https
    port: 443
    targetPort: https

---------------------------------------------------------------------------------------------------


kind: ConfigMap
apiVersion: v1
metadata:
  name: nginx-configuration
  namespace: ingress-nginx
  labels:
    app: ingress-nginx
data:
  use-proxy-protocol: "true"

для https:

kind: Service
apiVersion: v1
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  labels:
    app: ingress-nginx
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: "arn:aws:acm:us-east-1:2xxxxxxxxxxxxxxxxxxx56:certificate/3fxxxxxxxxxxxxxxxxxxxxxxxxxx80" 
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: "http"
    service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "https" 
    # Increase the ELB idle timeout to avoid issues with WebSockets or Server-Sent Events.
    service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout: '3600'
spec:
  type: LoadBalancer
  selector:
    app: ingress-nginx
  ports:
  - name: http
    port: 80
    targetPort: http
  - name: https
    port: 443
    targetPort: http

------------------------------------------------------------------------------------------

kind: ConfigMap
apiVersion: v1
metadata:
  name: nginx-configuration
  namespace: ingress-nginx
  labels:
    app: ingress-nginx
data:
  use-proxy-protocol: "false"

Я пропустил какие-либо аннотации или данныев configmap?Пожалуйста, помогите мне

1 Ответ

0 голосов
/ 24 мая 2018

Я думаю, что проблема в аннотации:

service.beta.kubernetes.io/aws-load-balancer-backend-protocol: "http"

Бэкэнд-протокол в ELB должен быть TCP для соединений через веб-сокет.

Также я вижу, что вы используете Nginx Ingress Controller, может быть, вы хотите установить эти переменные в конфигурации

proxy-read-timeout: "3600"
proxy-send-timeout: "3600"

Чтобы избежать закрытия соединения.

...