Skip to main content
Version: v3.9.0

Edgelet API module

EdgeletAPI is the on-device HTTPS/WebSocket server for operator and workload administration. Routes live under /v1/... on port 54321 and on Unix socket /run/edgelet/edgelet.sock. Handlers validate JWTs, enforce RBAC, and delegate domain work to internal/runtimeapi.

Code: internal/edgeletapi/

Purpose​

  • Expose stable v1 REST and WebSocket surface for CLI and automation
  • Enforce bootstrap vs provisioned JWT policy and deny-by-default RBAC
  • Wrap responses in { success, data | error } envelope
  • Serve unauthenticated health and metrics probes
  • Bridge microservice exec/log streaming over WebSocket

Operator guide: Edgelet API. OpenAPI: OpenAPI contract.

Dependencies​

Depends onReason
authJWT validation, PKI paths
runtimeapiFacade to processmanager, fieldagent, store, config
serviceaccountToken list/revoke persistence
TLS material/etc/edgelet/edgeletapi-*.crt/key, CA for clients
Used byReason
supervisorStarted after core modules; monitored every 10s
cmd/edgelet CLIDefault transport via Unix socket
Workload microservicesSelf config/control routes with SA JWT

Lifecycle​

Start​

(*EdgeletAPI).Start():

  1. NewServer(54321). Dual listeners (TCP TLS + Unix)
  2. Start router in goroutine; wait on Ready() channel (max 15s)
  3. Set startup state Listening for readiness handler

Unix socket path: {varRun}/edgelet.sock (typically /run/edgelet/edgelet.sock).

Stop​

Graceful http.Server.Shutdown on both listeners.

Request pipeline​

authMiddlewareV1 (middleware.go):

  1. Require Authorization: Bearer <JWT>
  2. auth.ValidateEdgeletAPIJWT(token). Bootstrap unsigned OK when unprovisioned
  3. Map route → RBAC permission (rbac.go + API RBAC)
  4. Deny unmapped routes and failed rule checks with 403 FORBIDDEN

Health/metrics routes skip auth middleware.

Router layout​

Registered in router.go. All /v1/... routes use chainMiddleware(..., authMiddlewareV1, accessLoggingMiddleware, requestIDMiddleware).

Exception: GET /v1/microservices/control uses WebSocket control handler directly (auth inside handler).

Handler packages:

PackageRole
handlers/api.goBulk of REST handlers
handlers/api_volumes.go/v1/volumes* list, inspect, delete, prune
handlers/auth.gowhoami
handlers/status.go, info.go, version.goSystem readouts
handlers/api_envelope.goSuccess/error JSON helpers
websocket/control.goMicroservice control WS

Domain logic stays in runtimeapi. Handlers parse HTTP, call facade, map errors to stable codes.

Configuration​

Path / keyEffect
/etc/edgelet/edgelet-apiDefault CLI bearer JWT
/etc/edgelet/edgeletapi-ca.crtClient TLS trust
PKI files under /etc/edgelet/Server cert for :54321
Provision state in configBootstrap vs signed JWT mode

Token lifecycle: internal/auth/edgeletapi_token_lifecycle.go (rotated by Field Agent worker).

Data and persistence​

EdgeletAPI handlers read/write via runtimeapi → store:

  • Local deploy manifests → local_workloads, local_registries, local_runtime_classes
  • Service account tokens → local_service_account_tokens
  • Provision → config + agent_credentials

EdgeletAPI does not embed SQL.

WebSocket routes​

RouteHandler
/v1/system/logs:streamDaemon log follow
/v1/ms/{id}/logs:streamContainer log follow
/v1/ms/{id}/exec/sessions/{sessionId}:attachInteractive exec
/v1/microservices/controlWorkload control channel

Upgrade requests require bearer JWT with appropriate RBAC (or microservice self binding).

Observability​

  • Log module names: "Edgelet API", "Edgelet API Router", "Edgelet API Server"
  • StatusReporter index: 3 (utils.EdgeletAPI)
  • Access log middleware with request ID
  • GET /metrics Prometheus exposition
  • Startup state exposed to /health/ready

Failure modes​

SymptomTypical cause
CLI exit 10Daemon down or socket missing
401 UNAUTHORIZEDMissing/invalid JWT; provisioned agent with bootstrap token
403 FORBIDDENRBAC deny or unmapped route
Readiness failsListener timeout (15s) or TLS misconfiguration

See Troubleshooting.

Code map​

FileRole
api.goSingleton start/stop
server.goTLS + Unix listeners
router.goRoute registration
middleware.goAuth, logging, request ID
rbac.goPermission mapping and evaluation
request_context.goPer-request auth metadata

Related: API RBAC, Store, Process manager.

Group 3See anything wrong with the document? Help us improve it!