Container/Kubernetes (7) 썸네일형 리스트형 GKE Nginx Ingress 환경에서 socket.io가 동작하지 않음 개발환경 플랫폼: GCP/GKE 백엔드: NestJS 프런트: NextJS 소켓 라이브러리: socket.io 문제 정의 socket.io를 사용한 채팅 서비스가 로컬에선 동작하지만, 쿠버네티스에 배포하면 동작하지 않음 원인 Ingress에 웹소켓 관련 설정이 따로 필요 해결 기존에 사용하던 GCE Ingress Controller는 웹소켓 관련 설정이 지원되지 않아 보였고, 자료도 찾을 수 없었음 리서치 해보니 Nginx Ingress Controller는 자료가 많았기에 교체하기로 결정(추가적으로 SSL 인증서 발급 작업 필요) 상세 내용 백엔드인 Nest에선 아래와 같이 구성했습니다. @WebSocketGateway({ namespace: 'chat', cors: { origin: '*', },.. GKE http -> https 리디렉션 GCE Ingress Controller를 사용하는 경우에 아래와 같이 설정해주면 됩니다. http2httpsConfig.yaml apiVersion: networking.gke.io/v1beta1 kind: FrontendConfig metadata: name: http-to-https-config spec: redirectToHttps: enabled: true ingress.yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ... annotations: ... networking.gke.io/v1beta1.FrontendConfig: http-to-https-config # 추가 ... [GKE] Ingress 구성 및 SSL 적용 테스트 환경 이 글은 ingress 이외의 서비스가 이미 준비 중인 것을 전제로 진행됩니다. 또한, SSL 적용을 위해선 도메인이 필요합니다. 플랫폼: GCP 쿠버네티스: GKE 공개 클러스터(비공개는 cert-manager가 정상 동작하지 않았습니다) 도메인 호스팅: Hostinger 1. Nginx Ingress Controller 구성 먼저 GCP 콘솔로 이동한 후, helm repo에 nginx ingress controller 설치 링크를 추가합니다. helm 명령어가 없으면 helm을 설치해야 합니다. helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx helm repo update 다음으로 nginx-ingress-c.. GKE에서 PVC/PV 사용해보기 배경 백엔드는 DB에서 데이터를 꺼내 프런트에 전달해주고, 프런트에서 업로드된 파일을 저장하고, 서버에 저장된 파일을 프런트에 전달해줄 수 있어야 합니다. 하지만 이러한 저장소를 노드/포드에 만들면, 포드가 어떤 노드에 들어갈지 모르고, 포드는 언제든 없어질 수 있기 때문에 전역적으로 공유할 수 있는 볼륨이 필요했습니다. 그래서 위 구조처럼 각 포드들에 PVC/PV를 사용해서 물리적 디스크에 연결해주려고 합니다. 아래 글에서 쿠버네티스 볼륨에 대한 이해를 하는 데 많은 도움이 되었습니다. 진행도 아래 글을 기반으로 할 예정입니다. https://bcho.tistory.com/1259 테스트 시나리오 프런트에서 파일을 업로드하고, 파일이 PV에 저장되는지 확인한다. 프런트에서 백엔드에 post 요청을 하면.. GKE에서 프런트/백엔드 (포드)통신 구조 만들기 배경 GKE 쿠버네티스 환경에서 프런트엔드 앱이 백엔드에 요청하는 걸 테스트하고 싶었지만, 요청 URL이 localhost인지 개별 IP인지 같은 외부 IP를 사용해야 할지 도무지 감이 안 왔습니다. 우선 쿠버네티스의 네트워크 방식을 이해해야 했고, 아래 글을 통해 Ingress 오브젝트에 대해 많이 배우게 되었습니다. https://bcho.tistory.com/1263 Ingress 구조 보안을 위해서 비공개 클러스터로 생성했기 때문에 외부로부터 들어오는 트래픽을 수신하려면 따로 설정해주어야 하는데, 여러 방법이 있겠지만 경험 상으로는 LoadBalancer 타입의 서비스를 생성해 외부 주소를 생성해주는 방법과, Ingress를 사용해 외부 트래픽을 라우팅 해주는 방법이 있었습니다. 이 글에선 백엔드.. GKE와 클러스터 생성 단계 정리 배경 서비스를 컨테이너로 배포하면 격리된 환경에서 어느 한 기술에 종속되지 않아 서비스를 최적화할 수 있고, 쿠버네티스를 사용하면 이러한 컨테이너들에 대한 관리(장애 복구 등)가 편리해지기 때문에, GCP(Google Cloud Platform)의 GKE(Google Kubernetes Engine)를 사용해 구축하기로 했습니다. 근데 막상 클러스터를 만들려 하니 쿠버네티스를 잘 모를 뿐더러 생소한 옵션과 기능들이 즐비해 있어서 한 번 정리해두면 나중에 도움이 될 것 같아 글을 작성하게 되었습니다. 목적 GKE에 대해 알아본다. GKE 클러스터(Standard) 생성과 단계들에 대해 알아본다. GKE? GKE는 GCP에서 제공하는 서비스 중 하나이며, 쿠버네티스 환경을 빠르게 구축하고 쉽게 관리할 수 있.. GCP VM Instance에 Kubernetes 구축하기 들어가며... GCP(Google Cloud Platform)에서 CI/CD 적용을 고민하던 중, Cloud Build와 GKE를 사용하면 편리하게 CI/CD를 구현할 수 있다는 걸 알게되었습니다. 하지만 Kubernetes를 사용해본 적이 없는 상태에서 GKE를 사용하는 건 위험한 것 같아서, Kubernetes를 먼저 이해하고 직접 구축해보기로 했습니다. Kubernetes? https://bcho.tistory.com/1255 https://www.samsungsds.com/kr/insights/220222_kubernetes1.html https://www.samsungsds.com/kr/insights/kubernetes-2.html Kubernetes 구성요소 https://kubernetes.. 이전 1 다음