Проверка веб-сокета Kubernetes для action_cable

#ruby-on-rails #kubernetes #websocket #ruby-on-rails-6 #actioncable

Вопрос:

Я пытаюсь настроить некоторые зонды для контейнера websocket (рельсы с action_cable)

Я не уверен, как настроить такие зонды (и если это вообще возможно), я нахожу мало документации по этому варианту использования в k8s

Вот соответствующий раздел конфигурации моего файла развертывания

 containers:
  - name: {{ .Chart.Name }}
    image: xxx
    ports:
      - name: action-cable
        containerPort: 28080
        protocol: TCP
    command: ["/bin/sh"]
    args:
      - -c
      - |
          passenger start 
          --environment {{ .Values.global.appEnvironment }} 
          --port 28080 
          -R cable/config.ru 
          --max-pool-size 2
    # See recommended sidekik_alive config on github
    livenessProbe:
      httpGet:
        path: /cable
        port: action-cable
        httpHeaders:
          - name: Origin
            value: "https://{{ .Values.global.hostname }}"
          - name: Upgrade
            value: Websocket
          - name: Connection
            value: Upgrade
 

(и аналогичная конфигурация для readinessProbe и startupProbe)

Я получаю следующие ошибки (в начале по какой-то причине включен 1 запрос, не относящийся к WebSocket / , но затем он повторяется с GET /cable [WebSocket]

 App 191 output: Started HEAD "/"[non-WebSocket] for 127.0.0.1 at 2021-10-06 09:58:53  0000
App 191 output: Failed to upgrade to WebSocket (REQUEST_METHOD: HEAD, HTTP_CONNECTION: , HTTP_UPGRADE: )
App 191 output: Finished "/"[non-WebSocket] for 127.0.0.1 at 2021-10-06 09:58:53  0000
# -- then loop on the following:
App 191 output: Started GET "/cable" [WebSocket] for 10.42.0.197 at 2021-10-06 09:58:53  0000
App 191 output: Request origin not allowed: https://api.lb.k8s.dev.example.com
App 191 output: Failed to upgrade to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: upgrade, HTTP_UPGRADE: Websocket)
App 191 output: Finished "/cable" [WebSocket] for 10.42.0.197 at 2021-10-06 09:58:53  0000
 

Я думаю Request origin not allowed: , что это может иметь значение, а может и не иметь, я перепробовал несколько конфигураций, включая ноль или фактический URL

В моей конфигурации rails application.rb я попробовал следующее (что все еще дает `

 config.action_cable.allowed_request_origins = [
  nil, # kubernetes hack
  # I have also tried 'https://api.lb.k8s.dev.example.com'
]
config.action_cable.disable_request_forgery_protection = true
 

If it is not possible, should I resort to using some other type of probe ? (like a process alive probe ?)

EDIT: I was able to fix it somehow, but now my probe seems to be stuck by the ongoing websocket connection, I have

 App 191 output: Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: upgrade, HTTP_UPGRADE: Websocket)
 

Но kubernetes остается в состоянии «Сбой при запуске», и я больше не вижу дополнительных проверок работоспособности (похоже, что k8s застрял с открытым подключением к websocket ?)