반응형
🔹 구성 환경
사용자 ➡ Nginx ➡ Kubernetes(Ingress, Ingress Nginx Controller, Kubeflow, Jupyter Notebook)
사용자는 Nginx를 거쳐서 Jupyter Notebook에 접근한다.
🔹 문제 상황
Kubeflow를 통해서 Jupyter Notebook Pod를 생성했다.
Chrome에서 Jupyther Nodebook에 접근해서 Python 코드를 작성했고, 코드 실행 버튼을 클릭했는데 코드가 실행되지 않고 그냥 skip되는 느낌으로 다음으로 넘어갔다.
즉, 코드가 실행이 안된다.
웹브라우저 개발자 도구에서 에러를 클릭해보니
아래와 같이 WebSocket 에러가 나고 있었다.
WebSocket connection to 'ws://{IP}/notebook/kubeflow-user-example-com/test/api/events/subscribe' failed:
WebSocket connection to 'ws://{IP}/notebook/kubeflow-user-example-com/test/api/kernels/xxx' failed:
아래와 같이 WebSocket 에러가 나고 있었다.
🔹 문제 해결
nginx.conf 파일을 수정해주자.
# http 블럭 하위의 server 블럭 하위의 location 블럭에서 아래 속성들이 추가되어야한다.
location / {
proxy_pass http://wsbackend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
}
적용하면 아래와 같은 코드가 된다.
vi /etc/nginx/nginx.conf
---
http{
(생략)
upstream k8s_nodes {
server 10.0.0.6:31001;
server 10.0.0.7:31001;
server 10.0.0.8:31001;
}
server {
listen 80;
location / {
proxy_pass http://k8s_nodes;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
#-------------------------------------------------
systemctl restart nginx
참고로 L7으로 사용하고 싶어서 위에처럼 http 블럭을 사용했었는데
프로젝트 중간에 L4로 바꾸자고하셔서 HAProxy로 변경했다.
Nginx도 L4를 지원하는데 stream 블럭을 사용하면된다.
참고하라고 stream 코드도 첨부한다.
vi /etc/nginx/nginx.conf
---
(생략)
stream{
upstream k8s_nodes_http {
server 10.0.0.6:31001;
server 10.0.0.7:31001;
server 10.0.0.8:31001;
}
upstream k8s_nodes_https {
server 10.0.0.6:31002;
server 10.0.0.7:31002;
server 10.0.0.8:31002;
}
server {
listen 80;
proxy_pass k8s_nodes_http;
}
server {
listen 443;
proxy_pass k8s_nodes_https;
}
}
---
systemctl restart nginx
🔹 참고
반응형