apiVersion: apps/v1 kind: Deployment metadata: name: approval-service namespace: agent-trust labels: app.kubernetes.io/name: approval-service app.kubernetes.io/part-of: proofedmesh app.kubernetes.io/component: trust-core spec: replicas: 2 revisionHistoryLimit: 5 strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 0 selector: matchLabels: app.kubernetes.io/name: approval-service template: metadata: labels: app.kubernetes.io/name: approval-service app.kubernetes.io/part-of: proofedmesh app.kubernetes.io/component: trust-core spec: serviceAccountName: approval-service automountServiceAccountToken: false securityContext: runAsNonRoot: true runAsUser: 65532 runAsGroup: 65532 fsGroup: 65532 seccompProfile: type: RuntimeDefault containers: - name: approval-service image: harbor.basicstack.de/basicstack/approval-service:main imagePullPolicy: IfNotPresent args: - "-listen=:8080" - "-signing-url=http://signing-service.agent-trust.svc.cluster.local:8081" - "-signing-key-ref=trust-api/approval-signer-2026-q4" - "-tlog-url=http://transparency-log.agent-trust.svc.cluster.local:8080" - "-session-ttl=15m" - "-challenge-ttl=2m" env: # ---- Pocket-ID OIDC issuer for attestation `issuer` field + # future auth middleware discovery (DEV-614). ---- - name: APPROVAL_POCKET_ID_ISSUER value: "https://auth.basicstack.de" - name: APPROVAL_POCKET_ID_CLIENT valueFrom: secretKeyRef: name: approval-service-dev key: APPROVAL_POCKET_ID_CLIENT # ---- Pocket-ID client secret (OIDC authorization_code + # client_credentials; Phase 2 middleware consumes it). ---- - name: APPROVAL_POCKET_ID_SECRET valueFrom: secretKeyRef: name: approval-service-dev key: APPROVAL_POCKET_ID_SECRET # ---- WebAuthn RP config (DEV-608): must match the browser # origin reached via Pangolin/Traefik. ---- - name: APPROVAL_WEBAUTHN_RP_ID valueFrom: secretKeyRef: name: approval-service-dev key: APPROVAL_WEBAUTHN_RP_ID - name: APPROVAL_WEBAUTHN_RP_ORIGIN valueFrom: secretKeyRef: name: approval-service-dev key: APPROVAL_WEBAUTHN_RP_ORIGIN # ---- Bearer the approval-service presents to signing-service. ---- - name: APPROVAL_SIGNING_TOKEN valueFrom: secretKeyRef: name: approval-service-dev key: APPROVAL_SIGNING_TOKEN ports: - name: http containerPort: 8080 protocol: TCP readinessProbe: httpGet: path: /healthz port: http initialDelaySeconds: 2 periodSeconds: 10 failureThreshold: 3 livenessProbe: httpGet: path: /healthz port: http initialDelaySeconds: 10 periodSeconds: 20 failureThreshold: 3 resources: requests: cpu: "100m" memory: "128Mi" limits: cpu: "500m" memory: "256Mi" securityContext: allowPrivilegeEscalation: false readOnlyRootFilesystem: true capabilities: drop: - ALL topologySpreadConstraints: - maxSkew: 1 topologyKey: kubernetes.io/hostname whenUnsatisfiable: ScheduleAnyway labelSelector: matchLabels: app.kubernetes.io/name: approval-service