Aquesta guia descriu el contracte actual del contenidor OSS de Decision Gate i proporciona passos per a l’operador per construir i executar la imatge del servidor MCP.
La imatge del contenidor és un artefacte del servidor. S’executa decision-gate serve i és adequada per a treball d’integració i qualificació semblant a producció. No és evidència que el compromís permanent, la recuperació o el perfil d’assignació de múltiples nodes estigui qualificat per al llançament.
Contracte Actual del Contenidor
- Punt d’entrada:
decision-gate - Comandament per defecte:
serve --config CONFIG_PATH --allow-non-loopback, on el preset del contenidor utilitza /etc/decision-gate/decision-gate.toml - Muntatge de configuració: /etc/decision-gate/decision-gate.toml
- Transport: HTTP (SSE opcional)
- Auth: s’exigeix autenticació bearer; els certificats controlats pel cridant o els encapçalaments de subjecte de proxy mai són autoritats d’identitat.
- TLS: terminat per defecte per l’upstream (
server.tls_termination = "upstream") - Persistència: no hi ha emmagatzematge d’estat d’execució durable per defecte; SQLite és una configuració d’ persistència local explícita
- Temps d’execució: sense permisos d’administrador, privilegis mínims, registres stdout/stderr
- Rutes escriables:
/var/lib/decision-gate(només quan SQLite està habilitat)
L’absència d’una botiga local no fa que les mutacions de l’evaluador siguin sense estat o segures per al ruteig de múltiples escriptors amb el mateix RunKey. El codi actual té mecanismes d’exact-head/idempotència, però no s’han refinat contra el model d’execució acceptada PF-03 i el perfil de vida del procés no té cap reclam de durabilitat de reinici. Un desplegament allotjat ha de rutar la mutació per un RunKey(namespace, run_id) a través d’un procés resolt i fixar bytes de llei de scenario idèntics per a aquella identitat. Aquesta és una restricció de l’operador, no una transferència d’autoritat durable o un failover. Fixar un espai de noms sencer a un procés és un ruteig conservador actual, no la clau de serialització permanent. L’objectiu estable d’assignació ruteja cada RunKey a una autoritat d’evaluador/execució acceptada co-locada i consumeix testimonis externs exactes; vegeu l’estàndard d’integració de desplegament.
La configuració actual del perfil inicial no pot representar l’adquisició d’evidència de xarxa, fonts d’evidència MCP remotes, execució de subprocessos/custom, o avaluació remota. El transport del servidor HTTP/SSE porta sol·licituds d’eines al node DG i no habilita aquelles famílies d’adquisició excloses.
Construir la Imatge
Construcció local:
docker build -t decision-gate:dev .
Construcció multi-arc (amd64 + arm64):
IMAGE_REPO=ghcr.io/your-org/decision-gate IMAGE_TAG=dev \
scripts/container/build_container.sh
Push multi-arch:
IMAGE_REPO=ghcr.io/your-org/decision-gate IMAGE_TAG=dev PUSH=1 \
scripts/container/build_container.sh
Notes:
IMAGE_REPO=ghcr.io/your-org/decision-gateés un marcador de posició. Substitueixyour-orgpel teu org o usuari de GitHub (per exemple,ghcr.io/decision-gate/decision-gate).IMAGE_TAG=devés un exemple local/dev. Per a les publicacions, utilitza una etiqueta de versió (per exemple,vX.Y.Z) i opcionalment publicalatest.
Etiquetes i Política de Lliberament
Local/dev:
decision-gate:devper a proves ad-hoc.- Les etiquetes Local/dev no són artefactes de llançament de grau de política.
Llançament:
- Actualment no s’ha publicat cap imatge oficial de GHCR d’aquest repositori.
- Els operadors que vulguin una imatge de registre haurien de construir i pujar la seva pròpia imatge a un registre controlat per l’org i mantenir el seu propi rastre de procedència.
- Els fluxos de treball de publicació encara emeten proves de la cadena de subministrament per a les etiquetes de publicació etiquetades com a font-primer i la validació de paritat de publicació local.
Configuració
El contenidor espera un fitxer de configuració a /etc/decision-gate/decision-gate.toml.
Utilitzeu la preset de contenidor com a base: configs/presets/container-prod.toml.
Requisits clau:
server.bindha de ser no-loopback (per exemple,0.0.0.0:8080).server.auth.modeha de serbearer_tokenomtls.server.tls_termination = "upstream"quan TLS es termina fora del contenidor.
Executar el contenidor
Execució mínima (autenticació de token portador, terminació TLS ascendent):
docker run --rm -p 8080:8080 \
-v "$(pwd)/configs/presets/container-prod.toml:/etc/decision-gate/decision-gate.toml:ro" \
decision-gate:dev
Notes:
- Substituïu el token de demostració a la configuració abans de l’ús en producció.
--allow-non-loopbackés part del comandament per defecte del contenidor. Si sobrescribes el comandament, inclou--allow-non-loopbacko estableixDECISION_GATE_ALLOW_NON_LOOPBACK=1.
TLS dins del contenidor (Opcional)
Si necessiteu TLS dins del contenidor, configureu:
[server]
tls_termination = "server"
[server.tls]
cert_path = "/etc/decision-gate/tls/server.crt"
key_path = "/etc/decision-gate/tls/server.key"
Munta els certificats i actualitza el teu entorn d’execució de contenidors en conseqüència.
Mode Durable (SQLite)
Per defecte, la configuració del contenidor utilitza emmagatzematges en memòria.
Per habilitar la durabilitat de SQLite, actualitzeu la configuració:
[schema_registry]
type = "sqlite"
path = "/var/lib/decision-gate/schema-registry.db"
[accepted_run_store]
type = "sqlite"
path = "/var/lib/decision-gate/decision-gate.db"
busy_timeout_ms = 5000
Executa amb un volum escrivible:
docker run --rm -p 8080:8080 \
-v "$(pwd)/configs/presets/container-prod.toml:/etc/decision-gate/decision-gate.toml:ro" \
-v decision-gate-data:/var/lib/decision-gate \
decision-gate:dev
Expectatives d’Autenticació
Exemple de token portador:
curl -sS -X POST http://127.0.0.1:8080/rpc \
-H "Authorization: Bearer dg-container-demo-token" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
Els encapçalaments de certificat-subjecte afirmats pel cridant no són intencionadament compatibles. Quan un proxy o ingress termina TLS, ha d’eliminar els encapçalaments de reenvio no fiables i passar la credencial de portador revisada sense canvis. El TLS terminat pel servidor també protegeix la connexió però no crea un mecanisme d’identitat d’aplicació separat.
Health Endpoints
Decision Gate exposa probes estàndard de Kubernetes:
GET /healthzper a la vivacitatGET /readyzper a la disponibilitat
Aquests punts finals són intencionadament no autenticats i només retornen un estat mínim. /readyz realitza comprovacions de disponibilitat lleugeres (magatzem d’estat + registre d’esquema) i retorna HTTP 503 amb {"status":"not_ready"} si les dependències no estan disponibles.
curl -sS http://127.0.0.1:8080/healthz
curl -sS http://127.0.0.1:8080/readyz
Ambdós punts finals retornen HTTP 200 amb una càrrega útil JSON.
Exemple de Kubernetes
apiVersion: apps/v1
kind: Deployment
metadata:
name: decision-gate
spec:
replicas: 1
selector:
matchLabels:
app: decision-gate
template:
metadata:
labels:
app: decision-gate
spec:
containers:
- name: decision-gate
image: ghcr.io/your-org/decision-gate:your-tag
ports:
- containerPort: 8080
securityContext:
runAsNonRoot: true
runAsUser: 10001
readOnlyRootFilesystem: true
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
readinessProbe:
httpGet:
path: /readyz
port: 8080
initialDelaySeconds: 2
periodSeconds: 5
volumeMounts:
- name: config
mountPath: /etc/decision-gate/decision-gate.toml
subPath: decision-gate.toml
readOnly: true
- name: data
mountPath: /var/lib/decision-gate
volumes:
- name: config
configMap:
name: decision-gate-config
- name: data
emptyDir: {}
Per a la durabilitat d’SQLite, substituïu emptyDir per una reclamació de volum persistent.
Artefactes de la cadena de subministrament
Els fluxos de treball de publicació de Decision Gate generen i verifiquen artefactes de la cadena de subministrament per a etiquetes de prioritat de font i comprovacions de paritat locals. Els comandos a continuació segueixen sent útils per a la verificació manual d’imatges construïdes per l’operador.
Container SBOM (exemple utilitzant syft):
syft packages decision-gate:dev -o spdx-json > decision-gate.sbom.spdx.json
Signatura de blobs o artefactes (cosign):
cosign sign-blob decision-gate.sbom.spdx.json
Declaració de procedència signada:
cosign sign-blob decision-gate.provenance.intoto.json
La política de publicació bloqueja quan:
- Hi ha una vulnerabilitat Alta/Critical present.
- Hi ha alguna CVE coneguda i explotada present.
- La verificació de la signatura o la procedència falla.