feat(mcp): deploy the MCP layer on central instead of tunnelling to a workstation
No MCP server ran on central, so remote agents reached dev-hub only through a reverse tunnel back to the workstation — routing a request for a service on their own machine out to another host and back. Adds a gated mcp Deployment and ClusterIP Service running the same image with `-m mcp_server.server`, API_BASE defaulted to the in-cluster API Service, and tcpSocket probes. No Ingress: the MCP layer proxies an unauthenticated API and must not be reachable from outside the cluster. Two fixes were needed before the manifests could work: - server.py hardcoded host="127.0.0.1". A Service routes to the pod IP, so a loopback bind is unreachable. Now MCP_HOST, still defaulting to loopback so local runs do not silently expose an unauthenticated proxy. - The container runs `-m mcp_server.server`, not the file path, so /app lands on sys.path rather than /app/mcp_server. mcp.enabled stays false in the deploy values: the running image predates MCP_HOST, so enabling it before the tag is bumped would ship a pod that never becomes reachable. Refs CUST-WP-0067-T08 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Assistant: claude-code Assistant-Model: opus Assistant-Process: 2583210@bnt-lap001 Assistant-Session: f2bff2d5-e9b2-4338-92ca-10282a927006
This commit is contained in:
parent
4e68176492
commit
6d04544368
5 changed files with 159 additions and 2 deletions
|
|
@ -47,6 +47,38 @@ ingress:
|
|||
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||
cert-manager.io/cluster-issuer: letsencrypt-prod
|
||||
|
||||
# MCP layer (CUST-WP-0067-T08). Runs from the same image with a different
|
||||
# command, as a stateless HTTP client over the API service. ClusterIP only —
|
||||
# it proxies an unauthenticated API, so it must never gain an Ingress.
|
||||
mcp:
|
||||
enabled: false
|
||||
replicaCount: 1
|
||||
transport: sse
|
||||
# Defaults to the in-cluster API Service; override only to point elsewhere.
|
||||
apiBase: ""
|
||||
service:
|
||||
port: 8001
|
||||
targetPort: 8001
|
||||
probes:
|
||||
enabled: true
|
||||
liveness:
|
||||
initialDelaySeconds: 30
|
||||
periodSeconds: 30
|
||||
timeoutSeconds: 5
|
||||
failureThreshold: 3
|
||||
readiness:
|
||||
initialDelaySeconds: 10
|
||||
periodSeconds: 10
|
||||
timeoutSeconds: 5
|
||||
failureThreshold: 3
|
||||
resources:
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 128Mi
|
||||
limits:
|
||||
cpu: 500m
|
||||
memory: 512Mi
|
||||
|
||||
probes:
|
||||
enabled: true
|
||||
path: /state/health
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue