Gitea SSH → HTTPS 마이그레이션과 외부 노출 최소화
포트 32222 정리 요청에서 시작해, 클러스터 전체의 외부 노출 표면을 재평가하고 Teleport 기반 Zero-Trust 구조로 수렴하기까지의 기록. 중간에 발견한 CoreDNS 죽은 설정, Cloudflare 100MB 업로드 제한, mTLS 인증 모델에 대한 정리를 포함합니다.
배경
Lumie 인프라에서 내부 Git 서버(Gitea)는 두 가지 방식으로 외부 노출돼있었습니다.
github.lumie-infra.com:443→ Teleport 리버스 프록시 → Gitea (SSO 강제)github.lumie-infra.com:32222(NodePort) → Gitea SSH
포트 32222가 OCI 보안 리스트와 Gitea NodePort 양쪽에서 의도적으로 열려있어, 개발자들이 SSH 키로 gitea:Lumie-Edu/... 단축 URL로 clone/push하는 패턴을 지원했습니다.
이 작업의 시작점은 단순했습니다.
"포트 32222, 2222 같은 안 쓰는 것들을 정리하고 싶다. 443 하나로 통일할 수 있을까?"
발견 1 — 포트 2222는 false positive
외부에서 github.lumie-infra.com:2222 로 TCP 연결하면 성공했지만:
$ (echo dummy; sleep 2) | nc -w 3 github.lumie-infra.com 2222
# (빈 응답)
$ (echo dummy; sleep 2) | nc -w 3 github.lumie-infra.com 32222
SSH-2.0-Go
애플리케이션 레벨에서 응답하는 건 32222 뿐. 2222는 TCP 핸드셰이크만 성립하고 실제 서비스가 없는 상태로, 정리 대상이 하나(32222)로 줄었습니다.
해결 방향 결정
세 가지 대안을 검토했습니다.
| 옵션 | 내용 | 선택? |
|---|---|---|
| A. Git-over-HTTPS 전용 호스트 추가 | git.lumie-infra.com Ingress 를 새로 만들고 SSH는 비활성 | 초기 선택 |
| B. sslh 멀티플렉서로 443에 SSH와 HTTPS 공존 | 운영 포인트 증가, 블라스트 반경 ↑ | 기각 |
| C. SSH 유지 + 32222만 닫기 | 현상 유지, 외부 SSH 제공 포기 | 기각 |
옵션 A가 엔터프라이즈 표준 패턴(GitHub 도 이 방향)에 부합해 채택했습니다.