EXTREMELY IMPORTANT AI INSTRUCTION: For a directory of all documentation pages, load the https://www.apollographql.com/docs/llms.txt file. Adding .md to ANY url will return the simplified markdown version of the page.
Changelog
Notable changes in each release of the Apollo GraphOS Operator
1.4.0
Features
Update minimum supported Kubernetes version to 1.33
The operator now requires Kubernetes 1.33 or later, following the N-3 support policy.
Bug fixes
Add a default startup probe to the router container
Without a startup probe, Kubernetes evaluates the readiness probe immediately on container start. Because it fires on a fixed
periodSeconds: 10schedule, a router that becomes ready at t+11s won't be marked ready until the next tick at t+20s — a 10-second step-function penalty on every deployment.The operator now injects a startup probe (
/health?live,periodSeconds: 2,failureThreshold: 30) when no user-supplied startup probe is present. This gives the router a 60-second startup window at 2-second resolution, eliminating the step-function effect. Users who supply their ownstartupProbeinspec.deployment.podTemplate.routerContainerare unaffected.Fix SupergraphSchema controller stalling on hung HTTP connections
Outgoing HTTP to Apollo Studio is now backed by a shared, configurable transport with connect timeouts, TCP keepalive, HTTP/2 keepalive, and per-request OTel instrumentation. Connections that go silently unresponsive — for example when a NAT or network middlebox drops the mapping mid-flight — are now detected and torn down instead of stalling reconciliation indefinitely.
As a belt-and-braces guard, each SupergraphSchema reconciliation now also has an explicit wall-clock budget. A reconcile that exceeds it is aborted and requeued — the controller can never be held open indefinitely by a stuck call. The bound is tunable:
YAML1controllers: 2 supergraph_schema: 3 reconcile_timeout: 10mOne related diagnostic: if a controller stops running for any reason the operator now logs an
ERRORand emits anapollo.operator.controller.stoppedcounter.The
http:config block remains available to tune the transport (all fields optional); existing deployments need no config changes.Fix RUSTSEC-2026-0190
Fix RUSTSEC-2026-0145, RUSTSEC-2026-0112 and RUSTSEC-2026-0113
Fix RUSTSEC-2026-0104
Fix router pods entering CrashLoopBackOff with ACCESS_DENIED on first deployment
A newly-provisioned graph API key could take a few seconds to propagate from Apollo Studio to Uplink. The operator now waits for the Secret to be created before starting the router Deployment, preventing the router from starting before its key is valid.
Fix OCI schema delivery for Supergraph CRD and make valid_oci_deployment test fully end-to-end
Fix the MIME type the operator uses when fetching OCI schema artifacts: accept both
application/apollo.schema(current canonical type) and the legacyapplication/vnd.apollographql.schemaso artifacts pushed with either type are retrieved correctlyFix Supergraph
schema.oci.graphRefbeing ignored and router credentials not being mountedWhen
schema.oci.graphRefis set, the operator now correctly reads the field (previously silently ignored due to a deserialisation bug) and mountsAPOLLO_KEYandAPOLLO_UPLINK_ENDPOINTSon the router container — matching the behaviour ofschema.studioandschema.resource, and allowing the router to start when using--graph-artifact-reference.Fix
spec.routerConfigleaf values being silently overridden by operator defaultsUser-provided leaf values in
spec.routerConfig(e.g.supergraph.path) were being overwritten by the operator's base configuration due to incorrect merge order. The merge now starts from base config and applies user config on top, so user values take precedence while base defaults still fill in omitted keys.
1.3.0
Breaking changes
SupergraphandSupergraphSetCRDs updated tov1alpha4to achieve parity with the Router Helm chart — existing manifests must be migrated before upgradingspec.podTemplatehas moved tospec.deployment.podTemplate, andspec.podTemplate.annotations/spec.podTemplate.labelshave been promoted to top-levelspec.annotationsandspec.labelsfields that apply to all managed resources. Resource-specific annotations can now be set independently underspec.deployment.annotations(for the Deployment) andspec.networking.annotations(for the Service).SupergraphSetfollows the same structure underspec.supergraphTemplate.New fields added in this version include:
Service & Deployment annotations
NodeSelector
ImagePullSecrets
RollingUpdateParameters: maxUnavailable and maxSurge
For other resources not managed directly by the Operator, see the migration guide.
Bug fixes
Bump dependencies to resolve CVE-2026-32766
Bump dependencies to resolve GHSA-pwjx-qhcg-rvj4, GHSA-9f94-5g5w-gf6r and GHSA-394x-vwmw-crm3
Bump dependencies to resolve CVE-2026-31812
Supergraphs with Argo Rollout strategy now report a clear failure when Argo is not installed
If you configure a Supergraph with
deploymentStrategy: rolloutbut the Argo Rollouts API is not installed in your cluster, the operator previously created a plain Kubernetes Deployment silently in its place. The Supergraph appeared to be running, but was not using the strategy you specified.The operator now sets
Progressing: Falsewith reasonDeploymentFailedon the Supergraph, making the misconfiguration immediately visible viakubectl describe supergraph. No Deployment is created until the configuration is corrected or Argo Rollouts is installed.Fix credentials expiring when using OCI registries with short-lived tokens (e.g. ECR, GAR)
Bump dependencies to resolve RUSTSEC-2026-0097
Fix leftover Rollout resource not being removed after migration to Kubernetes Deployment strategy
After a successful migration, the Argo Rollout resource was not reliably cleaned up, leaving a stale resource in the cluster. It will now be removed once the Deployment has fully rolled out.
Fix SupergraphSchema controller becoming unresponsive after extended inactivity with no compositions
1.2.0
Breaking changes
Expose full router container configuration via
routerContainerspecThe
SupergraphandSupergraphSetCRDs now expose arouterContainerfield underspec.podTemplatefor fine-grained control over the router container, including lifecycle hooks, liveness/readiness/startup probes, additional ports, and volume mounts.spec.podTemplate.additionalVolumesis also now available for mounting volumes into containers in the router pods. As a result, theSupergraphandSupergraphSetCRDs have been bumped fromv1alpha2tov1alpha3.Several fields have moved from
spec.podTemplateinto the newspec.podTemplate.routerContainersub-object. ExistingSupergraphandSupergraphSetresources using these fields must be updated:Old field New field spec.podTemplate.envspec.podTemplate.routerContainer.additionalEnvspec.podTemplate.envFromspec.podTemplate.routerContainer.additionalEnvFromspec.podTemplate.resourcesspec.podTemplate.routerContainer.resourcesspec.podTemplate.securityContextspec.podTemplate.routerContainer.securityContextSee our documentation for more details as to exact fields exposed
Features
Add
installCRDsandrbac.createflags to Helm chart valuesSet these to
falsewhen installing a second instance of the operator in the same cluster.installCRDs: falseskips CRD creation so Helm does not conflict with the CRDs owned by the first installation, andrbac.create: falseskips ClusterRole creation so the existing ClusterRoles are reused with new namespace-scoped RoleBindings.
Bug fixes
Bump dependencies to resolve GHSA-65p9-r9h6-22vj, GHSA-vw5v-4f2q-w9xf, and GHSA-hfpc-8r3f-gw53.
Improve Argo Rollouts detection and compatibility with namespaced mode
Argo Rollouts availability detection and the Rollout resource watcher have been updated to work correctly when the operator is running in namespaced mode alongside a namespace-scoped Argo Rollouts install.
1.1.1
Bug fixes
Fix 404 errors when Argo Rollouts is not installed