mirror of
https://github.com/norandom/OpenUltraSAST.git
synced 2026-10-16 03:49:26 +00:00
Agent Substrate's egress gateway denies an actor without an EgressPolicy, so no task could deliver its artifacts or reach a model. egress.py grants each task exactly: http/80 to ousast-receiver.ax-system.svc.cluster.local, and TLS passthrough/443 to the bound Workspaces' https Git hosts and the bound Model's openultrasast.io/egress-hosts (api.deepseek.com for deepseek-flash). No IPs, no wildcards, no https (MITM) rules. The reconciler writes the policy with kubectl-ate between ax apply and resume, reads it back, waits OUSAST_EGRESS_SETTLE (11 s, the gateway's cached deny), and after ax delete task confirms the policy went with its actor (kubectl-ate has no delete verb; the store cascades). The receiver is a selector-less Service (ops/ax/receiver-service.yaml.tmpl, applied by up.sh together with the no-build agentgateway egress gateway) on port 18090 of the host. Measured live: the gateway checks the policy on Host but connects to the address the actor dialled, so the runner dials the Service's ClusterIP (OUSAST_ARTIFACT_DIAL) with the receiver's name as Host. The runner now labels its delivery with the Run's task name (OUSAST_TASK), which is what the receiver accepts; the ax Task name was refused with 403. The Receiver moved to egress.py to keep reconciler.py at 460 lines. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01EmM1j46qgKMh3zqD1QMwEo
32 lines
1.0 KiB
Cheetah
32 lines
1.0 KiB
Cheetah
# The reconciler's artifact receiver by name (ai-service-plane task 0). Actors reach nothing but through Agent
|
|
# Substrate's egress gateway, and the gateway allows HTTP by hostname only (never an IP address): the runner dials
|
|
# this Service's ClusterIP on port 80 with Host `ousast-receiver.ax-system.svc.cluster.local`; the gateway allows
|
|
# it on that Host and connects to the ClusterIP, which kube-proxy maps to the endpoint below, the host's receiver
|
|
# on ${OUSAST_ARTIFACT_PORT} at the kind gateway. Rendered by up.sh.
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: ousast-receiver
|
|
namespace: ax-system
|
|
spec:
|
|
ports:
|
|
- name: http
|
|
port: 80
|
|
targetPort: ${OUSAST_ARTIFACT_PORT}
|
|
protocol: TCP
|
|
---
|
|
apiVersion: discovery.k8s.io/v1
|
|
kind: EndpointSlice
|
|
metadata:
|
|
name: ousast-receiver-host
|
|
namespace: ax-system
|
|
labels:
|
|
kubernetes.io/service-name: ousast-receiver
|
|
addressType: IPv4
|
|
ports:
|
|
- name: http
|
|
port: ${OUSAST_ARTIFACT_PORT}
|
|
protocol: TCP
|
|
endpoints:
|
|
- addresses: ["${KIND_GATEWAY}"]
|