39P by xguru 4달전 | favorite | 댓글 6개
  • 외부 네트워크로 터널링하는 리버스 프록시
  • 프로덕션 수준의 트래픽을 처리하며, 호스팅(특히 Kubernetes에서)이 간단하도록 설계됨
  • 고객 네트워크, BYOC(Bring Your Own Cloud) 서비스의 서비스를 노출하거나 IoT 디바이스에 연결할 수 있음
  • 내결함성, 확장성, 무중단 배포를 위해 노드 클러스터로 호스팅될 수 있음

Piko의 동작 방식

  • 업스트림 서비스는 Piko에 연결하여 엔드포인트를 등록
  • Piko는 아웃바운드 전용 연결을 통해 등록된 업스트림 서비스로 엔드포인트에 대한 요청을 라우팅
  • 이는 공용 포트를 열지 않고도 서비스를 노출할 수 있음을 의미
  • 들어오는 HTTP(S) 요청은 Host 헤더 또는 x-pico-endpoint 헤더를 사용하여 대상 엔드포인트의 ID를 식별
  • 여러 업스트림 서비스가 동일한 엔드포인트를 등록한 경우, Piko는 해당 엔드포인트에 대한 요청을 등록된 업스트림 간에 로드 밸런싱

Piko의 설계 목표

프로덕션 트래픽 처리

  • Piko는 테스트 및 개발 도구가 아닌 프로덕션 트래픽을 처리하도록 설계됨
  • Piko를 사용하여 고객 네트워크에 액세스하고, BYOC 솔루션을 구축하며, IoT 디바이스에 액세스할 수 있음
  • 이를 지원하기 위해 Piko는 내결함성, 수평 확장, 무중단 배포를 위해 노드 클러스터로 실행될 수 있음
  • 또한 모니터링 및 디버깅을 위한 관측성 도구를 제공함

호스팅 용이성

  • Piko는 Kubernetes에서 호스팅하기 쉽도록 설계됨
  • Piko 클러스터는 HTTP 로드 밸런서 또는 Kubernetes Gateway 뒤에 Kubernetes StatefulSet으로 호스팅될 수 있음
  • 업스트림 서비스 연결과 프록시 클라이언트 요청은 클러스터의 모든 노드에 로드 밸런싱될 수 있으며, Piko는 요청을 올바른 업스트림으로 라우팅하는 것을 관리함

보안성

  • 업스트림 서비스는 아웃바운드 전용 연결을 통해 Piko에 연결함
  • Piko는 해당 연결을 통해 모든 요청을 업스트림으로 라우팅함
  • 따라서 업스트림은 요청을 수신하기 위해 포트를 열 필요가 없음
  • Piko는 업스트림 서비스가 엔드포인트를 등록하기 전에 인증하는 것을 지원함
  • Piko는 자체 호스팅이 가능하므로 프록시 클라이언트와 동일한 네트워크에서 호스팅하여 외부 네트워크에서 요청을 수락하지 않을 수 있음
  • 예를 들어, 인증된 업스트림 서비스가 TLS를 통해 인터넷에서 등록하도록 한 다음, Piko와 동일한 네트워크에 있는 프록시 클라이언트에 대해서만 내부 경로를 제공할 수 있음

이는 공용 포트를 열지 않고도 서비스를 노출할 수 있음을 의미

이것이 가지는 의미==사례가 궁금합니다.

예를 들어 컴공 학부생 A가 프로젝트를 하고 있다고 합시다.
열심히 개발한 A는 이제 발표일 가까워지자 이 서비스를 시연하고자 합니다.
그런데 A는 이제 갓 서버나 짤 줄 알지 어떠한 서버도, 인스턴스도 띄우는 방법을 모릅니다.
거기다 기숙사에 살고 있지 때문에 포트포워딩으로 서비스를 노출할 수 없습니다.
이때 터널링이 등장합니다.
기숙사에 있는 노트북에서 ngork http 8080을 치면 랜덤한 url이 발급되고, 강의실에서 시연할 때 사용자가 이 url에 접속하면 ngrok서버-ngrok클라이언트-A의 서버 프로그램으로 http 요청이 전달되서 별도의 포트 포워딩 없이도 서비스를 노출할 수 있게 됩니다.

https://github.com/andydunstall/piko/pull/20

프로젝트 이름이 Pico에서 Piko로 변경되었네요. 이미 pico라는 이름의 에디터가 있어 충돌 문제로 변경된것으로 보입니다.

pico editor를 몰랐다는 답변을 보고 저의 아재력을 느낍니다. nano 전에 pico 였는 데 ㅜㅜ

어제 찾아서 정리해놓고 올린건데.. 그새 바뀌었네요 ㅠ 수정해두었습니다.