Kubernetes 이야기

mitmproxy을 사용하여 K8S API Server Reverse Proxy 설정하기 본문

개발/python

mitmproxy을 사용하여 K8S API Server Reverse Proxy 설정하기

kmaster 2023. 2. 22. 22:09
반응형

mitmproxy는 HTTP/1, HTTP/2 및 WebSocket에 대한 무료 오픈 소스 대화형 HTTPS 프록시이다.

 

주요특징

 

  • HTTP 및 HTTPS 요청과 응답을 가로채서 즉석에서 수정
  • 나중에 재생 및 분석을 위해 전체 HTTP 대화 저장
  • HTTP 대화의 클라이언트 측 재생
  • 이전에 녹화된 서버의 HTTP 응답 재생
  • 지정된 서버로 트래픽을 전달하는 리버스 프록시 모드
  • macOS 및 Linux의 투명 프록시 모드
  • Python을 사용하여 HTTP 트래픽에 대한 스크립팅된 변경 수행
  • 가로채기를 위한 SSL/TLS 인증서가 즉시 생성

설치

# pipenv install mitmproxy
Installing mitmproxy...
Pipfile.lock not found, creating...
Locking [packages] dependencies...
Locking [dev-packages] dependencies...
Updated Pipfile.lock (b554d3de68d4bab8cfb1f803f94d0436e3af2e18fc2ed46945f50ba84cdd8a62)!
Installing dependencies from Pipfile.lock (dd8a62)...

 

실행

 

실행 옵션은 다양한 방법이 있지만, 이번에는 Kubernetes Api Server를 Reverse Proxy로 테스트하는 방법을 알아보자.

mitmproxy --listen-port=8000 --mode reverse:https://10.0.0.2:6443 --ssl-insecure

이제 8000번 포트를 사용하여 Api-server에 접근해 보자.

# curl -k -H "Authorization: Bearer $TOKEN" http://localhost:8000/version
{
  "paths": [
    "/.well-known/openid-configuration",
    "/api",
    "/api/v1",
    ...
}

 

mimporxy에는 다음과 같이 접근 로그를 볼 수 있다.

 

이제 proxy 를 설정해 보았는데 이 proxy에 request 를 수정하는 방법을 알아보자.

import mitmproxy.http
from mitmproxy import ctx

def request(flow: mitmproxy.http.HTTPFlow):
    flow.request.headers["Authorization"] = "Bearer xxxxxx"

def response(flow: mitmproxy.http.HTTPFlow):
    ctx.log.info("Response: {} {}".format(flow.response.status_code, flow.response.reason))

이제 해당 프로그램을 같이 실행해보자.

mitmproxy --listen-port=8000 --mode reverse:https://10.0.0.2:6443 --ssl-insecure -s test.py

 

이제 Client에서 설정했던 Token을 삭제하고 호출해 보자.

curl -k  http://localhost:8000/
{
  "paths": [
    "/.well-known/openid-configuration",
    "/api",
    "/api/v1",
...
}

mimporxy 에서도 Request, Response, Detail 정보를 조회할 수 있다. 

반응형

'개발 > python' 카테고리의 다른 글

ChatGPT API 사용  (0) 2023.03.27
Playwright와 Python 사용 방법  (0) 2023.02.22
playwright를 활용한 e2e 테스트  (0) 2023.02.15
Python에서 gRPC 구현  (0) 2023.02.13
Kopf ( 예제 )  (1) 2023.02.05
Comments