LabHub
배우기 러닝패스 코스

FDE 캡스톤: 창고가 같은 주문을 세 번 받았다 · 사내 프록시 뒤에서 연동하기 · 실습

프록시를 켰더니 사내 API 가 죽었다

LabHub 에서 이어서 보기

목표

고객 사내 프록시 설정에서 curl·Python urllib·requests 가 각각 어느 길로 가는지 기록하는 가짜 프록시로 직접 재고, 세 도구가 모두 같은 길로 가는 설정·연동기·판정 도구를 만든다.

왜 중요한가

프록시 환경 변수는 표준이 아니라 관습이라 도구마다 해석이 다르다. 그래서 고객 설정을 넣은 뒤 curl 헬스체크는 초록불인데 파이썬 수집기만 사내 API 에서 403 을 받는 일이 생긴다. 추론으로 설정을 고치면 한 도구를 살리고 다른 도구를 죽이기 쉽다. 이 실습은 "그 요청이 프록시에 도착했는가" 를 기록으로 확인하는 습관을 만든다.

재료: /opt/lab/p1a-proxy/ — corpnet.py(가짜 프록시·사내 API), customer.env(고객 설정), cases.tsv(사례 18개), connector.py(문제 있는 연동기). 인터넷은 없다. 127.0.0.2·127.0.0.3 도 이 파드 자신(루프백)이고, corp.example·saascorp.example 같은 이름은 풀리지 않는다 — 직접 가려던 요청은 이름 풀이에서 실패하지만, 프록시 기록에 없다는 것 자체가 "직접 갔다" 는 증거다.

예상 60분. 세션이 끝나면 /root/proxy 는 사라지니 필요한 파일은 따로 보관한다.

단계

1. python3 /opt/lab/p1a-proxy/corpnet.py up 으로 사내망 흉내를 띄우고, customer.env 를 적용한 상태에서 http://127.0.0.2:8080/health 를 curl·urllib·requests 로 한 번씩 요청한다. 응답 본문의 served_by 와 id 를 보고 /root/proxy/repro.tsv도구<TAB>PROXY|DIRECT<TAB>id 세 줄을 적는다.
2. cases.tsv 의 02 단계 사례(c01..c05, 대소문자·스킴별 변수)를 세 도구로 실행해 /root/proxy/matrix.tsvcase<TAB>curl<TAB>urllib<TAB>requests 로 적는다.
3. 03 단계 사례(c06..c10, 접미사·선행 점·별표 붙은 도메인)를 재서 matrix.tsv 에 더한다.
4. 04 단계 사례(c11..c14, IP·CIDR·포트)를 재서 matrix.tsv 에 더한다.
5. 05 단계 사례(c15..c18, 별표 한 글자와 소문자·대문자 우선순위)를 재서 matrix.tsv 에 더한다.
6. 세 도구가 모두 사내 네 곳(127.0.0.2:8080, 127.0.0.3:8080, localhost:8081, api.corp.example:8080)은 직접, 바깥 세 곳(http·https 의 saascorp.example, updates.vendor.example)은 프록시 http://127.0.0.1:3128 로 가게 하는 /root/proxy/fixed.env 를 만든다.
7. connector.py 를 /root/proxy/connector.py 로 복사해 고친다. CONNECTOR_PROXY 를 계속 쓰되 NO_PROXY 에 걸리는 URL 은 직접 가고, 환경의 HTTP_PROXY·HTTPS_PROXY 는 쓰지 않아야 한다.
8. /root/proxy/route_probe.py 를 만든다. python3 route_probe.py <env파일> URL... 이 설정 파일의 프록시 주소를 로컬 센티널로 바꿔 끼우고 세 도구를 실제로 실행해, URL 마다 url<TAB>curl<TAB>urllib<TAB>requests 를 출력하고 판정이 갈리면 종료 코드 3, 모두 같으면 0 으로 끝나야 한다.

참고

단계 8개

  1. 고객 설정으로 장애 재현하고 증거 남기기
  2. 대문자 HTTP_PROXY 와 ALL_PROXY 재기
  3. 접미사·선행 점·별표 붙은 도메인
  4. CIDR 과 포트를 적은 NO_PROXY
  5. 별표 한 글자와 소문자 우선
  6. 세 도구의 공통분모로 설정 다시 쓰기
  7. proxies 인자를 쓰는 연동기 고치기
  8. 어떤 설정이든 도구별 길을 재는 탐침