Skip to content

feat(minimax-code): 헬퍼 파드·egress 경계·승인 게이트 + K3s MCP 프록시를 헬퍼 파드로 (AC-G6) - #157

Merged
dlddu merged 3 commits into
mainfrom
feat/minimax-code-helper-pod
Oct 23, 2026
Merged

dlddu merged 3 commits into
mainfrom
feat/minimax-code-helper-pod

Conversation

@dlddu

@dlddu dlddu commented Oct 23, 2026 •

Copy link
Copy Markdown
Owner

무엇을

minimax-code를 approval-gated와 같은 파드 배치로 옮긴다 — 헬퍼 파드 + egress 경계 + 승인 게이트. 그리고 #156의 K3s MCP 토큰을 그 헬퍼 파드에 싣는다. PRD AC-G6 신설, AC-G1/G3/G4/G5 개정.

#156 커밋 위에 쌓았다. 이 PR이 #156을 포함·대체하므로 이 PR을 머지하면 #156은 닫으면 된다.

구조

  • 워크로드 파드: 에이전트 컨테이너 하나(사이드카 없음). env는 헬퍼 주소 셋 — provider proxy :8091, 세션 MCP :8092, K3s MCP 프록시 :8093. loopback 주소·자격 증명 변수가 있으면 agent가 기동 거부.
  • 헬퍼 파드: 세션 MCP(게이트웨이 3종) · credential-proxy(minimax-code-credentials) · k3s-mcp-proxy(같은 Secret의 선택 키 k3s-mcp-token, 헬퍼 배치로 :8093).
  • 네트워크 정책: approval-gated와 같은 egress 허용 목록/헬퍼 ingress. minimax만 포트 8093이 더해지고 approval-gated는 두 포트 그대로.
  • 승인 대기 유휴 보류(AC-F3)와 notice tailer(in-band 대기 마커)도 적용.

K3s MCP는 세션 게이트를 지나지 않는다

K3s MCP는 자체 승인 게이트로 쓰기를 막으므로 이중 승인을 피한다(사용자 결정). approval-gated의 AC-F6 C2를 이 타입·이 프록시 하나에 한해 적용하지 않는다는 점을 AC-G6에 명시했다. 프록시 상류는 고정 origin 하나라 예외가 임의 외부 목적지로 번지지 않는다.

#156에서 바뀐 것 — marketplace 부트스트랩은 헬퍼 파드의 k3s-mcp-proxy가

워크로드 파드가 github.com에 닿지 못하므로 entrypoint의 클론을 K3s 토큰을 이미 쥔 k3s-mcp-proxy 컨테이너로 옮겼다(헬퍼 파드 egress는 열려 있음).

  • proxy: 토큰이 있으면 기동 직후 자기 핸들러를 프로세스 안에서 거쳐 github_app_installation_token을 받고, URL 범위 extraheader로 전용 emptyDir에 클론 → MINIMAX_CODE_PLUGINS(기본 mcp-servers)의 manifest + skills·commands·agents·mcpServers 파일만 비밀 없는 번들로 GET /plugin-seed(503 → ready/failed/unconfigured). hook·symlink·marketplace 밖 경로 거부, 크기 상한.
  • agent: 번들을 기다려 그대로 설치하고 MCP 서버 중 K3s MCP만 프록시로 재배선(oauthClientId·Authorization 제거). 닿지 못하는 다른 서버는 경고 후 제외(#156의 「전체 실패」에서 완화 — 플러그인이 늘어도 하나가 나머지를 막지 않게).
  • 세션 MCP 플러그인은 agent가 직접 만들고, 이름을 session-platform-session-mcp로 해 marketplace 플러그인과 충돌하지 않게 했다.
  • marketplace에 플러그인이 늘면 MINIMAX_CODE_PLUGINS에 이름만 더하면 된다.

검증

  • 통합: TestMiniMaxCode_* — 파드 쌍·컨테이너 셋, 워크로드 무자격 증명·헬퍼 주소, Secret 분리(claude Secret 미참조), K3s 토큰은 k3s-mcp-proxy에만, 게이트웨이는 세션 MCP에만, 정책 포트 8091/8092/8093, 공유 볼륨 마운트, 복원 시 새 쌍.
  • 서비스: TestMiniMaxCodeApprovalWaitHoldsTheIdleCount.
  • 부트스트랩: 번들 구성(경로 필드만·hook/symlink/밖 경로 거부), seeder 503→ready / failed, 프록시 경유 GitHub token(자체 Authorization 없음), 로컬 git remote 실제 클론(실패 메시지에 header 없음), /plugin-seed 라우트.
  • data plane: env 검증(loopback·포트·자격 증명 거부), 번들 설치·K3s 재배선·타 서버 제외, failed/unconfigured/불통/세션 MCP 없음, 이름 충돌·경로 탈출 거부, 503 대기.
  • go vet(+integration/e2e)·gofmt·주석 정책·시나리오 매핑·render fidelity 통과. 등재 파일의 주석은 건드리지 않았다.

알려진 한계 (PRD 남은 일)

  • 공유 볼륨 내용은 아카이브되지 않는다(AC-F5 아카이브가 어느 타입에도 미구현). 승인된 git_clone 결과물은 동결 뒤 사라진다.
  • SPA의 게이트 전용 표면은 아직 approval-gated만 그린다(대기 마커는 출력에 보인다).
  • mcode가 플러그인 여럿을 함께 읽는 것, marketplace 스킬을 읽는지는 운영 반영 뒤 세션에서 확인 필요.
  • 프리뷰에서는 minimax 헬퍼 파드가 뜨지 않는다 — 정정: 프리뷰 ResourceSet이 approval-gateway-credentials도 copyFrom하므로 프리뷰에서도 뜬다. 대신 프리뷰의 승인 요청도 실제 gatekeeper로 간다.

운영 반영 순서

  1. 이 PR 머지(k3s-mcp-token 없이도 동작 — K3s 도구 없는 세션)
  2. flux-cd-apps: minimax ExternalSecret에 k3s-mcp-token 키 추가(#156의 2단계 그대로)
  3. CreatedOnce라 minimax-code-credentials Secret을 한 번 지워 재생성
  4. 기존 minimax 세션은 다음 복원부터 새 배치로 뜬다

https://claude.ai/code/session_01MUyooFMnpZEbS4ReCahFBo


Generated by Claude Code

minimax-code 세션에도 plugin-marketplace의 mcp-servers 플러그인(홈랩 K3s MCP 도구)을
싣는다. mcode는 플러그인 MCP 헤더의 ${VAR}를 치환하지 않고 OAuth 필드를 거부하므로,
토큰을 HOME(아카이브 대상)에 쓰지 않도록 워크로드 파드에 세 번째 컨테이너
k3s-mcp-proxy를 둔다.

- data plane: credential-proxy 구현을 헤더 허용 목록만 바꿔 재사용하는 k3s-mcp-proxy
  워크로드(127.0.0.1:8093, MCP Streamable HTTP 헤더, origin 고정, Bearer 주입).
  토큰이 없으면 configured:false로 기동하고 그 밖의 요청은 503.
- entrypoint: minimax-code에서 사이드카 /healthz 확인 → loopback 경유로
  github_app_installation_token → URL 범위 extraheader로 marketplace 클론 →
  mcp-servers의 K3s MCP 서버를 loopback URL로 바꾸고 oauthClientId·Authorization을
  지워 상태 트리 밖 seed로 스테이징. K3s MCP가 아닌 서버는 거부.
- agent: 기동·복원마다 seed를 ~/.minimax/plugins로 통째 복사하고 플랫폼 표식만 관리.
- control plane: minimax-code 파드에 k3s-mcp-proxy 사이드카, 이 타입 Secret의 선택
  키 k3s-mcp-token만 참조. 주 컨테이너는 그대로 K3S_MCP_TOKEN 없음(AC-G3).
- PRD AC-G5 신설, AC-G1·G3 개정, README·Secret 예시 갱신.

mcode 0.6.12가 exec --config 아래서도 HOME의 Claude 형식 플러그인 MCP를 로드해
mcp__k3s__* 도구를 모델 요청에 싣는 것은 shell 세션에서 가짜 MCP·캡처 서버로 실측.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011MtKFxuPycK3WQah8Kdwcr
…C-G6)

minimax-code 를 approval-gated 와 같은 파드 배치로 옮긴다. 워크로드 파드는
사이드카 없이 에이전트만 돌고, egress 는 kube-dns 와 자기 세션 헬퍼 파드로만
열린다. 헬퍼 파드는 세션 MCP(승인 게이트), 이 타입 Secret 을 읽는 provider
credential-proxy, k3s-mcp-token 을 쥔 K3s MCP 프록시 셋을 담는다.

- control plane: WorkloadType.HasApprovalGate() 로 헬퍼 파드·네트워크 정책·
  승인 대기 유휴 보류를 approval-gated 와 함께 적용. minimax 헬퍼 포트는
  8091/8092/8093, approval-gated 는 두 포트 그대로.
- data plane: 워크로드 env 는 헬퍼 주소 셋(loopback 거부). agent 가 기동·복원마다
  세션 MCP 플러그인과(프록시 configured 일 때) K3s MCP 플러그인을 직접 생성해
  ~/.minimax/plugins 에 설치하고, 승인 대기 notice 를 출력에 쓴다.
  k3s-mcp-proxy 는 DATA_PLANE_PROXY_PLACEMENT 를 따른다.
- 워크로드 파드가 github.com 에 닿지 못하므로 entrypoint 의 marketplace
  부트스트랩(#156)은 걷어냈다.
- K3s MCP 도구는 세션 게이트를 지나지 않는다 — K3s MCP 자체 게이트가 있어 이중
  승인을 피한다(PRD AC-G6 에 AC-F6 C2 예외로 명시).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MUyooFMnpZEbS4ReCahFBo
워크로드 파드가 github.com 에 닿지 못하므로, 플러그인을 agent 가 직접 만들던
방식 대신 marketplace 클론을 K3s 토큰을 이미 쥔 헬퍼 파드 k3s-mcp-proxy 가 한다.

- proxy: 토큰이 있으면 기동 직후 자기 핸들러를 프로세스 안에서 거쳐
  github_app_installation_token 을 받고, URL 범위 extraheader 로 emptyDir 에
  얕게 클론한 뒤 MINIMAX_CODE_PLUGINS(기본 mcp-servers)의 manifest + 경로 필드
  파일만 비밀 없는 번들로 GET /plugin-seed 에 내놓는다(503 → ready/failed/
  unconfigured). hook·symlink·marketplace 밖 경로는 거부, 크기 상한.
- agent: 번들을 기다려 받아 그대로 설치하고 MCP 서버 중 K3s MCP 만 프록시로
  재배선(oauthClientId·Authorization 제거), 닿지 못하는 서버는 경고 후 제외.
  세션 MCP 플러그인 이름은 session-platform-session-mcp 로 바꿔 marketplace 와
  충돌하지 않게 했다.
- control plane: k3s-mcp-proxy 에 marketplace emptyDir 와 MINIMAX_CODE_MARKETPLACE_DIR.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MUyooFMnpZEbS4ReCahFBo
@dlddu
dlddu merged commit b7d9f93 into main Oct 23, 2026
15 checks passed
@dlddu
dlddu deleted the feat/minimax-code-helper-pod branch October 23, 2026 15:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants