2017-05-19 4 views
4

로 nginx를 사용하는 방법 우리는 침투의 사용은 우리 (일반적으로 nodejs) 서비스가 앞으로 직접 HTTPS 부하 분산을 생성 할 수 있습니다. 그러나 최근 Google은로드 밸런서가 제공하지 않는 nodej 앞에 트래픽을 더 많이 제어하려고했습니다.이는 Kubernetes (GKE)와 구글 HTTPS 부하 분산

  • 표준화, 사용자 지정 오류 페이지
  • 표준 재 작성 규칙 (예 : http를 https로 리디렉션)로드 밸런서의 상태 검사에서
  • 분리 포드 readinessProbes을 (그래서 건강한 포드가 없을 때 우리는 여전히 사용자 지정 오류 페이지를 제공 할 수 있습니다).

우리는 스택의 다른 부분에서 nginx를 사용하므로 좋은 선택처럼 보입니다. Kuvennetes에서 프론트 서비스에 사용되는 nginx의 몇 가지 예를 두 가지 구성 중 하나에서 보았습니다.

  • 모든 pod의 nginx 컨테이너가 로컬 호스트의 응용 프로그램으로 트래픽을 직접 전달합니다.
  • 별도의 nginx 배포 & 서비스, 적절한 Kubernetes 서비스에 트래픽을 독립적으로 확장 및 전달합니다.

각 방법의 장단점은 무엇이고 어떤 것이 우리의 사용 사례에 가장 적합한 지 어떻게 결정해야합니까? 나열된 요구 사항의

답변

1

하나는 사용자 지정 오류 페이지를 제공 할 수 있도록 포드 readinessProbes을 분리 할 것입니다. 모든 용기에 nginx 컨테이너를 추가하는 경우에는 불가능합니다. 그런 다음 포드의 컨테이너 중 하나가 활성/준비 상태 프로브를 준수하지 않을 때 포드가 다시 시작됩니다. 개인적으로 나는 가능한 한 디커플링을 선호하므로 독립적 인 포드 (pods)를 스케일링하고, 필요하다면 커스텀 머신 타입을 할당 할 수 있으며, 정말로 필요한 (대부분은 메모리) nginx 인스턴스의 양만 시작하여 리소스를 절약 할 수 있습니다.

+0

네, 좋은 지적입니다. 이 문제에 대한 내 생각을 명확히하는 데 도움을 주셔서 감사합니다. 이전에 해본 사람들로부터 많은 것을 검증하려고합니다. 대부분 내가이 시스템을 설계하는 방식으로 정말 명백한 것을 놓치고있는 것은 아닙니다. :) –

1

Vincent H에서이어서, Google HTTPS로드 밸런서를 nginx 입구 컨트롤러로 파이프 라인하는 것이 좋습니다.

앞서 언급 한 것처럼이 비율은 독립적으로 조정할 수 있습니다. 자신의 건강 진단을 받아야합니다. 오류 페이지를 표준화 할 수 있습니다.

우리는 우리의 nginx 유입 컨트롤러의 기본 백엔드를 갖는 단일 kubernetes.io/ingress.class: "gce" 유입 객체를함으로써이를 달성했습니다. 다른 모든 입력 개체에는 kubernetes.io/ingress.class: "nginx"이라는 주석이 붙습니다. https://github.com/kubernetes/ingress/tree/master/controllers/nginx :

우리는 여기에 설명 된 컨트롤러를 사용하고 있습니다. 입구를 완전히 제어 할 수있는 custom /etc/nginx/template/nginx.tmpl.

투명화를 위해 nginx 컨트롤러에 맞춤 오류 페이지를 설정하지 않았지만 documentation은 곧장 나타납니다.

+0

구현 세부 사항에 대해 좀 더 자세히 설명해 주시겠습니까? 나는 똑같은 도전에 직면하고있다. – Hawky4s

+0

재미 있고 감사합니다. TCP로드 밸런서가 아닌 네트워크로드 밸런서 (nginx) 앞에서 GCE HTTP로드 밸런서를 사용하는 이유가 있습니까? –

+0

우리는 Kubernetes를 GKE로 실행 중이므로 이미 클러스터에 통합되어 있습니다. 솔직히, 그것은 당시 우리에게 가장 쉬운 일이었고 우리의 필요에 잘 맞았습니다. – Tribal