WebSocket을 통한 연결이 60초 후 닫히는 이유는 무엇입니까?

가상 프라이빗 클라우드 클래식 인프라

Ingress 서비스는 WebSocket을 사용하는 앱을 노출합니다. 그러나 60초 동안 서로 간에 트래픽이 전송되지 않으면 클라이언트와 WebSocket 앱 간의 연결이 닫힙니다.

다음 이유 중 하나로 인해 60초 넘게 비활성 상태이면 WebSocket 앱에 대한 연결이 삭제될 수 있습니다.

  • 인터넷 연결에 장기 연결을 허용하지 않는 프록시 또는 방화벽이 있습니다.
  • WebSocket 앱에 대한 ALB의 제한시간 초과로 연결이 종료됩니다.

60초 넘게 비활성 상태여도 연결이 닫히지 않도록 하려면 다음을 수행하십시오.

  1. 프록시 또는 방화벽을 통해 WebSocket 앱에 연결하는 경우에는 프록시 또는 방화벽이 장기 연결을 자동 종료하도록 구성되지 않았는지 확인하십시오.

  2. 연결이 활성 상태를 유지할 수 있도록 제한시간 값을 늘리거나 앱의 하트 비트를 설정할 수 있습니다.

    • 제한시간 변경: ALB 구성에서 proxy-read-timeout의 값을 늘리십시오. 예를 들어, 60s에서 300s와 같은 큰 값으로 제한시간을 변경하려는 경우에는 Ingress 리소스 파일에 다음 어노테이션을 추가하십시오: nginx.ingress.kubernetes.io/proxy-read-timeout: 300. 클러스터의 모든 공용 ALB에 대해 제한시간이 변경됩니다.
    • 하트비트 설정: ALB의 기본 읽기 제한시간 값을 변경하지 않으려는 경우에는 WebSocket 앱에서 하트비트를 설정하십시오. WAMP와 같은 프레임워크를 사용하여 하트비트 프로토콜을 설정하면 앱의 업스트림 서버가 주기적으로 시간 간격을 두고 ping 메시지를 전송하고 클라이언트는 pong 메시지로 응답합니다. 하트비트 간격을 58초 이하로 설정하여 60초 시간 제한이 적용되기 전에 ping/pong 트래픽이 연결을 계속 열어두도록 합니다.