Because Astronomer has separate maintenance life cycles for each minor version of APC, the same change can be introduced multiple times across minor versions, resulting in multiple identical release notes. When a new minor version releases, such as version 1.1.0, all changes from previously released versions are included in the new minor version.If you’re upgrading to receive a specific change, ensure the release note for the change appears either:
- Within your target minor version.
- In a patch version that was released before the first release of your target minor version.
Astro Private Cloud 2.2.0 is a minor release that adds worker queues, worker autoscaling with KEDA, Deployment hibernation, the Laminar integration, an MCP server, and Istio ingress support. It also adds support for Kubernetes 1.36 and 1.37 and resolves a number of security, platform, and Deployment bugs.
New features
- Worker queues: You can give an operator-based Deployment that uses the Celery executor more than one Celery worker queue. Each queue runs as its own Kubernetes worker Deployment with its own CPU, memory, ephemeral storage, worker count, and worker concurrency, and you can place each queue on a node pool. Create and edit queues in the Worker Queues section of Deployment settings, or pass
workerQueuestoupsertDeployment. Existing Celery Deployments get adefaultqueue that reproduces their current worker configuration. Worker queues are off by default. Setdeployments.workerQueues.enabledto make them available, anddeployments.workerQueues.maxPerDeploymentto change how many queues a Deployment can have. The default is 10. See Configure worker queues. - Node pools: Administrators can declare named node pools for a cluster, each with a node selector, tolerations, and CPU and memory ceilings. Users then place a worker queue on a pool by name. When you edit a pool’s node selector or tolerations, the APC UI offers to upgrade the Deployments that use the pool. APC blocks a ceiling reduction that would leave an existing queue over the new limit. The built-in roles gain the
cluster.nodePools.*andsystem.nodePools.*permissions, so add them to any custom role that needs node pool access. - Per-queue logs and metrics: The Logs page filters worker logs by queue, and each queue card shows its CPU and memory use. CPU and memory metrics require cAdvisor. Without it, the cards show a no-data state.
- Worker autoscaling with KEDA: A worker queue’s size is now a range from
minWorkerCounttomaxWorkerCount, and KEDA scales the queue within it. Setting both to the same value turns scaling off for that queue. AminWorkerCountof0is allowed only where autoscaling is available. Autoscaling requires KEDA 2.20.0 or later and Laminar. APC doesn’t install KEDA, so install it first, then setglobal.keda.enabledtotrueandglobal.keda.namespaceto the namespace where KEDA runs. The KEDA operator service account defaults tokeda-operator, andglobal.keda.operatorServiceAccountNamechanges it. APC creates a service account and related resources in your KEDA namespace. Autoscaling is off by default. Setglobal.laminar.enabledanddeployments.workerQueues.autoscaling.enabledtotrueto make it available. The scaling poll interval defaults to 30 seconds, anddeployments.workerQueues.autoscaling.pollingIntervalSecondschanges it. Worker autoscaling needs the Airflow operator 1.7.0 that ships with this release, because earlier operators drop the scaling trigger without an error. See Configure worker autoscaling. - Deployment hibernation: You can hibernate a Deployment that runs in Airflow Operator mode, which scales its components to zero, and wake it again later. Hibernation preserves the state of the Deployment. Hibernate and wake a Deployment from the APC UI, with the
upsertDeploymentmutation, or with theastro deployment hibernateandastro deployment wakecommands. Hibernation is off by default. Setdeployments.hibernation.enabledtotrueto make it available, then use config governance to control which clusters, Workspaces, and Deployments can use it. Hibernation requires Laminar and worker autoscaling. While a Deployment hibernates, deploys, configuration updates, and upgrades fail until you wake it. Turning hibernation off at the cluster, Workspace, or Deployment level removes stored hibernation configuration and wakes any hibernated Deployment. See Hibernate Deployments. [confirm: whether alerts pause for hibernated Deployments, APC-1905 is Done with no linked PR, so make no alert-pausing claim until its assignee answers] - Laminar integration: Laminar is a new data plane component that provides autoscaling, hibernation, Deployment status, and Airflow investigation for operator-based Deployments. Set
global.laminar.enabledtotrueto install it. Pulling the Laminar image from an Astronomer-managed registry requires authentication. If you pull from an Astronomer-managed registry, setlaminar.imagePullSecretsto the token that Astronomer provides. By default, APC provisions the Laminar database in your Postgres instance. To use your own database, setlaminar.databaseBootstrapper.backendSecretNameto a secret that has aconnectionkey. Setlaminar.databaseBootstrapper.dbNameto name the database independently of the Helm release name. Laminar Kubernetes objects carry alaminar-prefix, so they don’t collide with Airflow components. Existing Deployments use Laminar only after their next update. The data plane internal API authenticates to Laminar with a short-lived signed token, and a NetworkPolicy limits access to Laminar to the data plane internal API. APC also publishes its JWKS atv2/.well-known/jwks.json. - APC MCP server: A new control plane component lets MCP clients and AI agents manage APC and troubleshoot Airflow Deployments. Set
mcpServer.enabledtotrueto install it. Tools are grouped, andmcpServer.enabledGroupsselects the groups. It defaults toplatform_readandplatform_write, and groups that contain destructive tools are off by default.mcpServer.disabledToolsblocks individual tools, andmcpServer.skills.enabledadds the bundled Airflow skills. Requests authenticate with a Workspace service account API key, and APC authorizes each tool call against the caller’s role. The MCP server isn’t supported whenglobal.authSidecar.enabledistrue, which includes Istio gateway mode, and the chart fails to render if you enable both. - Istio ingress: The APC Helm chart can render Istio
VirtualServiceresources for the routes it exposes, so a cluster that uses an Istio gateway instead of NGINX no longer maintains those resources separately. The chart attaches the routes to an existing Gateway and supports control plane and data plane segregation. Setglobal.istio.gateway.enabledtotrueto use gateway mode, and setglobal.istio.gateway.nameto the Gateway in<namespace>/<gateway>format. Gateway mode requiresglobal.authSidecar.enabled: true, and the chart fails to render without it. - CSI volume mount Dag delivery: You can now deliver Dags to a Deployment from cloud object storage that a CSI driver mounts read-only into Airflow. Install a CSI driver for GCS Fuse, S3 Mountpoint, or Azure Blob on the data plane cluster, set
deployments.deployMechanisms.objectStorageMountDagDeployment.enabledtotrue, and select CSI Volume Mount as the Dag delivery option on the pages that create and update a Deployment. The option is off by default. - Default alerts for Laminar and the Airflow operator: Prometheus now alerts when a Laminar API server or hypervisor container, or the Airflow operator’s manager container, isn’t ready for 5 minutes, and when the Laminar or Airflow operator Deployment has no available replicas for 10 minutes. Both alert groups are on by default. Set
prometheus.defaultAlerts.laminar.enabledorprometheus.defaultAlerts.airflowOperator.enabledtofalseto turn one off, and add your own rules inprometheus.additionalAlerts.laminarandprometheus.additionalAlerts.airflowOperator. - Secrets from mounted files (Preview): Platform components can now read their secrets from mounted files instead of
secretKeyRefenvironment variables, for clusters that forbid secrets in environment variables. Setglobal.secretsFromFiles.enabledtotrue, and setglobal.dbBootstrapper.secretsFromFiles.enabledtotruefor the database bootstrapper, which doesn’t follow the global setting. Each component can override the global setting with its ownsecretsFromFiles.enabled. The feature is off by default and strict:helm upgraderefuses values that would also put one of those secrets in a component’s environment. - Kubernetes 1.36 and 1.37: APC now supports Kubernetes 1.36 and 1.37. See Kubernetes version support.
Breaking changes
- A write to a Workspace or Deployment configuration override now replaces the stored override instead of merging into it. A key that you leave out of the payload returns to inheriting its value from the tier above. If you call
updateWorkspaceDeploymentsConfigorupdateDeploymentConfigwith a partial override, send the complete override for the scope instead. An empty override is rejected, so usedeleteWorkspaceDeploymentsConfigordeleteDeploymentConfigto clear one. Cluster overrides still merge:updateClustermerges the keys you send into the stored cluster override. See Config governance. nullis no longer valid in cluster, Workspace, or Deployment configuration overrides, and saving one fails with an error that names the key. APC ignoresnullvalues already stored in an override, and the tier above applies instead. Before 2.2, a storednullin a Workspace or Deployment override was rendered into the Helm values. UseDELETE_KEYto remove a key, or at the Workspace and Deployment tiers, leave the key out.DELETE_KEYnow removes keys underdeployments.helm.*at every tier, even when a platform default exists, so the Airflow Helm chart’s own default applies. A few protected paths, such ashelm.airflow.imagesandhelm.airflow.postgresql, still only withdraw the override. ADELETE_KEYstored before the upgrade on one of these keys now removes it, which can switch a chart feature back on. To turn a feature off, set its value, for exampleenabled: false. Workspace and Deployment overrides now storeDELETE_KEY, so they can remove a value they inherit. See Remove a setting.- Workspace and Deployment overrides can no longer set
helm.ingress.extraIngressAnnotations,helm.airflow.elasticsearch.connection.host, orhelm.openshift.enabled, because the data plane supplies them. Workspace overrides also can no longer setnamespaceManagement.preCreatedNamespaces,namespaceManagement.manualNamespaceNames.enabled, ornamespaceManagement.namespaceFreeFormEntry.preDeploymentValidationHookAllowedHosts. APC ignores a value already stored at one of these paths, and the cluster or platform value applies. Saving the stored value again drops it from the override, and saving a new value fails. Ingress annotations that you added to a Deployment this way no longer reach its ingress after the Deployment’s next update. See Values the data plane supplies. - A cluster override can no longer set a value that the data plane supplies, such as
chart.version.updateClusterand the cluster configuration editor reject a new value, and APC ignores one already stored. Before 2.2, such an override applied until the next metadata update replaced it. To clean one up, set the key toDELETE_KEYin the cluster override. - Log queries and log streaming, Deployment environment variable updates, Deployment deletion, and deploy revision cleanup now resolve configuration the same way as Deployment provisioning, including Workspace and Deployment overrides. Before 2.2 they read only the cluster configuration. Deploy revision cleanup now uses each Deployment’s own retention window. Check any override that sets a key these operations read.
- The APC API now checks each metadata document from a data plane and rejects the whole document if a field is invalid. A data plane internal API older than APC 2.2 reports namespace pools that are enabled with no namespace names as
null. Until you upgrade that data plane, registering it fails and its metadata stops updating. Upgrade the data plane, or list the pool’s namespace names. - On operator-based Deployments, Airflow
parallelismnow derives from the Deployment’s worker queues and no longer defaults to 32. A Deployment with one queue at concurrency 16 and one worker moves from 32 to 16, and the change restarts the components that read it. SetAIRFLOW__CORE__PARALLELISMon the Deployment to keep a fixed value. - On operator-based Deployments,
AIRFLOW__CELERY__WORKER_CONCURRENCYhas never taken effect, and every worker runs with a concurrency of 16. Set the concurrency in the Worker Queues section instead, then remove the environment variable. A queue’s concurrency can’t exceed 15 per CPU. See Queue settings reference. [confirm: wording with PM and support, APC-1831] - The APC API and DP-Link now limit their database connection pools to
astronomer.houston.prismaConnectionLimit, which now defaults to 20. Previously the default was 5, and neither value applied: each pool sized itself from the node’s CPU count. Size your Postgresmax_connectionsfor the APC API replicas times 20, plus the DP-Link Pods. If you sethouston.backendSecretName, or sethouston.backendConnectionwithouthouston.backendSecretConnection: true, addconnection_limitto your connection string. - The Deployments list is now sorted by creation date, newest first, for the APC UI, the Astro CLI, and the APC API.
- The data plane internal API now rejects any request that sets the global
airflowPodAnnotations.gke-gcsfuse/volumesannotation to"true", with an error, before it asks Helm to provision the Deployment. Before you upgrade, remove the global annotation from cluster, Workspace, and Deployment overrides, or the next deploy, update, or upgrade of an affected Deployment fails. Set the annotation per component inpodAnnotations, or use the CSI volume mount Dag delivery option. - The Laminar hypervisor now always runs one replica, because it doesn’t support high availability. The
laminar.hypervisor.replicasvalue is removed, and the chart ignores it if you still set it. The Laminar API server’s replica count is unchanged. - The bundled External Secrets Operator chart no longer processes
ClusterExternalSecretandClusterPushSecretresources by default. If you use them, setexternal-secrets.processClusterExternalSecretandexternal-secrets.processClusterPushSecretback totrue. - The
houston-cleanup-airflow-dbCronJob is removed.astronomer.houston.cleanupAirflowDb.enablednow only controls thecleanupAirflowDbAPI, and theschedule,olderThan,outputPath,dropArchives,dryRun,provider,bucketName,providerEnvSecretName,tables,readinessProbe,livenessProbe, andstartupProbevalues are removed, so APC ignores any you left in an override file. To clean up Airflow metadata, call thecleanupAirflowDbquery on your own schedule. PassperClusterConfig: trueto clean up every cluster under its own configuration override, as the CronJob did. - A Workspace-level
preDeploymentValidationHookURL must now point to a host thatdeployments.namespaceManagement.namespaceFreeFormEntry.preDeploymentValidationHookAllowedHostslists, or match the hook set at the platform or cluster tier. Otherwise, Deployment operations in that Workspace fail with anot on an allowed hosterror and APC doesn’t call the hook. Only the platform and cluster tiers can set the allowlist. The allowlist is empty by default.
Security enhancements
- Inactive Airflow metadata database credentials are no longer stored in a Deployment’s configuration, and existing records are purged, so the credentials are no longer readable through the APC API.
- Database connection credentials no longer appear in APC API logs.
- The APC API and the data plane internal API no longer write credentials, such as git-sync keys, registry credentials, and Airflow database passwords, to logs, audit events, or error responses. Upgrading doesn’t remove credentials already logged, so rotate any that might be exposed.
- The APC API no longer writes Git sync SSH keys, HTTPS tokens, or webhook secrets to logs or audit events. Rotate any Git sync credentials that might be logged.
- On installations with a separate control plane and data plane, the APC API stored its Airflow database creation credentials in each cluster’s configuration and could return them to any signed-in user. The APC API no longer stores or returns these credentials, and the upgrade removes them from existing records. After you upgrade, rotate the credentials in the secret named by
houston.airflowBackendSecretName(by default, the APC API’s own database secret). - Exporting environment variables to JSON in the APC UI no longer writes the values of secret variables to the file.
- Removed the unmaintained
shortiddependency from the APC API. See CVE-2026-67213. - Patched the CVEs identified against Astro Private Cloud 2.1.3. See the Resolved CVE list.
Additional improvements
- New images: APC 2.2 adds the
ap-laminarimage, installed by thelaminarsubchart, and theap-apc-mcp-serverimage for the APC MCP server. Both are disabled by default. See Container image reference. - Platform defaults can reach registered clusters: A cluster can now derive its
deploymentsconfiguration from the platform defaults that the APC API runs with, so a change to thedeploymentsdefaults in your Helm values reaches clusters that are already registered. Derivation is off by default, and upgrading doesn’t turn it on. Setastronomer.houston.config.clusters.configDerive.modetooptInand opt clusters in one at a time, or set it toon. A cluster that doesn’t derive keeps reading the snapshot of the defaults taken when you registered it. See Derive cluster configuration from platform defaults. - Data plane metadata reaches the control plane sooner: A data plane now sends its metadata, such as its chart version, namespace pools, and Elasticsearch host, to the control plane over the existing data plane link. A data plane upgrade converges on the control plane without waiting for the scheduled poll, and the scheduled poll remains as a fallback.
- APC API performance: The APC API caches and batches per-request permission lookups, bounds the concurrency of cluster and Deployment batch jobs, and reduces subscription polling, which lowers database load and shortens response times on large installations.
- Grafana link:
deployments.metricsReporting.grafana.enabledis no longer fixed totrue, so you can hide the Grafana link in the APC UI on an installation that doesn’t use Grafana. - Ingress objects: Set
global.ingress.enabledtofalseto stop the APC Helm chart from rendering any Ingress objects, for example when you use Istio and run no NGINX controller. The default istrue. - NGINX ingress
extraArgs: Setnginx.extraArgsto pass additional flags to the NGINX ingress controller, for exampleenable-metrics: true. - Logging sidecar environment variables:
loggingSidecar.extraEnvnow also applies to the logging sidecar on git-sync and the Dag server, so you can pass secret-backed Elasticsearch credentials when you usecustomConfig: true. - Cluster ID labels: APC now applies a
clusteridlabel with the cluster ID to the resources of each Airflow component in Operator-based and Helm-based Deployments, including the Services that Prometheus scrapes. Airflow alerts that keep the Deployment’s labels, such as the scheduler heartbeat alert, show the cluster ID in the alert email. Existing Deployments get the label the next time APC updates them. - Laminar private CA certificates: Laminar now trusts the private CA certificates listed in
global.privateCaCerts, so it can fetch the APC API’s public keys when the APC API uses a private CA. - Update and roll out together: Set
applyToDeployment: trueonupdateDeploymentConfigto apply the saved configuration right away, so you no longer callupsertDeploymentafterward. The default,false, only saves the configuration. Applying also requires permission to upsert the Deployment. - Laminar metrics: Prometheus no longer stores these unused Laminar metrics:
laminar_laminar_hypervisor_monitored_airflow_MonitoredAirflow_run_monitoring_timer_bucket, and the hypervisor metricshypervisor_laminar_hypervisor_num_upcoming_dag_runs,_num_stuck_queued_dag_runs,_num_non_terminal_dag_runs,_num_monitored_airflow_deployments,_num_delayed_task_instances,_monitored_airflow_scaling_duration_seconds_{created,sum},_monitored_airflow_run_count_created,_monitored_airflow_monitoring_scrape_duration_seconds_{count,created,sum},_monitored_airflow_monitoring_duration_seconds_{created,sum}, and_db_scraper_query_duration_seconds_{count,created,sum}. Update any custom dashboards that use them. - Deployment list sorting: You can sort the Deployments list by Created and Last Updated in the Workspace and System Admin views.
- Airflow operator images: APC no longer replaces the images that a Deployment specifies for PgBouncer, Redis, StatsD, and the exporters with the Airflow operator’s defaults.
- Read-only root filesystem on operator Pods: Airflow Pods and jobs on operator-based Deployments now set
readOnlyRootFilesystemby default, which clears Kyverno read-only root filesystem policy warnings. It takes effect the next time APC applies a Deployment. To turn it off, setdeployments.securityContext.container.readOnlyRootFilesystemtofalseat the platform, cluster, Workspace, or Deployment level. The same key also controls Helm-based Deployments. [confirm: whether the 2.2.0 upgrade re-applies Deployments and restarts their Pods, APC-2019] - DP-Link replicas: The default number of DP-Link replicas,
astronomer.dpLink.replicas, drops from 3 to 2. - Resource defaults: The default worker ephemeral storage request and limit is now 2048Mi, and the minimum and maximum for the worker ephemeral storage component are 1024 and 102400. The built-in executor list moved into code, so
deployments.resourceManagement.executorsnow defaults to an empty list, and your overrides still apply. Check that any override of that list still renders as you expect. - Operator
extraArgs: Setairflow-operator.extraArgsto a map of flags and values, and the chart renders each one as--flag=value, or as--flagwhen the value is empty. - “Dag” in messages: The APC UI, APC API errors, and logs now say “Dag” instead of “DAG”. Update any alerts or log queries that match on the old text.
Bug fixes
- Fixed an issue where the
usr-local-airflow-copierinit container set no resource requests or limits, so Deployment creation failed on a cluster where a KubernetesLimitRangerequires them. - Fixed an issue where the log index curator deleted the current month’s log index every day, when index naming was monthly and retention was set in days.
- Fixed an issue where the APC UI showed stale config governance values, such as the list of Astro Runtime versions, after a Helm change, until you refreshed the browser page.
- Fixed an issue where the APC UI platform lists, including Workspaces, Deployments, Users, and Teams, showed a spinner indefinitely when their query failed, instead of an error with a retry.
- Fixed an issue where a deploy rollback asked you to confirm twice.
- Fixed an issue where Deployments that pin their Astro Runtime image by digest failed to start with
InvalidImageNamewhencustomImageShawas enabled. - Fixed an issue where saving a custom role cloned from the built-in
DEPLOYMENT_ADMINorSYSTEM_ADMINrole failed withUnknown permission key(s). The role catalog now includes the missing permissionsdeployment.config.unadopt,system.controlPlanes.get,system.controlPlanes.register,system.controlPlanes.update,system.controlPlanes.deregister, andsystem.regions.update. See Clone a role. - Fixed an issue where, with custom roles enabled, a custom role could override a user’s built-in role (System Admin, Op, User, or Viewer) in Airflow 2 and Airflow 3. A user’s effective Airflow access is now the most-permissive combination of all of their roles. See How multiple roles combine.
- Fixed an issue where the
deploymentCapabilitiesfield of the APC API reportedfalsefor Deployment actions that a user was allowed to perform, so the APC UI hid actions such as Delete Deployment, Unadopt Deployment, and Cordon Deployment. This affected System Admins who also held a Workspace Admin or Deployment Admin role when the matching permission, such asdeployment.config.delete, was disabled forDEPLOYMENT_ADMIN, and users whose custom role grants the matchingsystem.deploymentspermission. - Fixed an issue where a Workspace Admin couldn’t see Unadopt Deployment in the APC UI when
deployment.config.unadoptwas disabled forDEPLOYMENT_ADMIN, even though the APC API allowed the action. - Fixed an issue where the APC UI showed Delete Deployment and Unadopt Deployment to a user whose only system permission was
system.airflow.admin, even though the APC API refused both actions. - Fixed an issue where creating a Deployment with
upsertDeploymentsilently replaced anextra_capacityCPU or memory value below the minimum for the Deployment’s executor with the default value, and reported success. The APC API now rejects the request with aMinimum Extra CPU not metorMinimum Extra Memory not meterror. - Fixed an issue where
upsertDeploymentaccepted anextra_capacityCPU or memory value above the maximum set indeployments.resourceManagement.maxExtraCapacity. The APC API now rejects the request with aMaximum Extra CPU exceededorMaximum Extra Memory exceedederror on both create and update. A Deployment that already exceeds the maximum isn’t affected, but it can’t raise its value above what it has now. - Fixed an issue where the APC UI and the APC API showed stale values after you updated a Deployment’s environment variables. The APC API now writes the Kubernetes Secret immediately. If the Secret write fails, the update fails and no changes are saved.
- Fixed an issue where users with the
deployment.airflow.oporsystem.airflow.oppermission didn’t get the Airflow Op role. These permissions now map to Op on Airflow 2 Deployments and to Airflow User on Airflow 3, which has no Op role. - Fixed an issue where deleting an operator-based Deployment dropped its Airflow database even when the database was external or you skipped database provisioning.
- Fixed an issue where the data plane internal API crashed during a Deployment rollback when the logging sidecar was enabled but the Deployment had no
sidecar-log-consumercontainer. - Fixed an issue where the Clusters, Regions, Control Planes, and Permission Audit pages showed bare red error text with no retry. They now show an error with a retry.
- Fixed an issue where the cluster Deployments Configuration editor dropped override keys with a
nullvalue, so saving without making any changes listed those keys as Removed. - Fixed several issues where the APC API didn’t wait for asynchronous work to finish or didn’t handle its errors. Removing a user’s Team bindings and adding a Team to a Workspace now wait for all of their changes to finish. The metrics poller no longer fails when Prometheus is unavailable.
- Fixed an issue where updating a cluster configuration removed unrelated, untouched settings and then failed.
- Fixed an issue where saving a cluster configuration failed at random with
Cluster was modified by another update, because data plane heartbeats changed the cluster’supdatedAtvalue. - Fixed an issue where a Helm value removed under
airflow.registry,airflow.elasticsearch, orairflow.postgresqlstayed in an existing Helm-based Deployment after an update. Updates still keep the values that the APC API sets only when it creates a Deployment:airflow.fernetKey, the registry and Elasticsearch passwords,airflow.data, andairflow.airflowDbRef. - Fixed an issue where enabling namespace pools without listing namespace names caused the APC API to reject every metadata document from the data plane.
- Fixed an issue where DP-Link Pods waited indefinitely for the data plane internal API when the NetworkPolicy ran in unified mode.
- Fixed an issue where a malformed metadata environment variable let the data plane internal API start and then panic on the first provisioning request. It now fails at startup and names the variable.
- Fixed an issue where the data plane internal API started with an empty database type when
COMMANDER_DATAPLANE_DATABASE_URLcouldn’t be parsed, which surfaced only as adata/dbType must be equal to one of the allowed valueserror at cluster registration. The data plane internal API now stops at startup and names the variable and the reason in its log, and it trims whitespace around the URL with a warning instead of stopping. Before you upgrade, correct any invalid URL. - Fixed an issue where installation and database migration failed when the Houston database couldn’t use the hard-coded
houston$defaultschema. Setglobal.houston.database.schemaNameto the schema you want, and change it only on a fresh install. - Fixed an issue where changing only a Deployment’s label, description, or alert emails restarted the Deployment. These updates no longer apply to the data plane.
- Fixed an issue where an explicit
nullfor a component,label, ordescriptioninupsertDeploymentoverwrote the stored value. - Fixed an issue where a Deployment that had a failing, crash-looping, or Pending worker queue showed Healthy.
- Fixed an issue where a worker queue couldn’t reach its configured maximum worker count because Airflow
parallelismwas fixed at 32. - Fixed an issue where operator-based Celery Deployments couldn’t start a worker because the namespace ephemeral storage quota was smaller than the default worker queue’s request. Each namespace quota is now at least what the Deployment’s components and worker queues need at their maximum, and a configured quota can only raise it.
- Fixed an issue where the PgBouncer
metrics-exportercontainer went intoCrashLoopBackOffon operator-based Deployments. - Fixed an issue where CPU, memory, and network metrics were missing for components with multi-word names, such as
api-serveranddag-processor, because the APC API relied on a Prometheus label that mis-parsed those names. The APC API now scopes these metrics by the Deployment’s namespace. - Fixed an issue where the APC API didn’t clear the authentication cookie when it rejected a request with a
FORBIDDENerror, so the browser kept sending a token the APC API no longer accepted. - Fixed an issue where a node pool’s node selector and tolerations never reached the Deployments placed on that pool.
- Fixed an issue where, in unified installations, support images, such as Redis, PgBouncer, the PgBouncer exporter, StatsD, git-sync, and the logging sidecar, stayed on the tags stored when the cluster was registered, so a platform upgrade never moved them forward. A unified cluster that derives its configuration now uses the upgraded defaults. New Deployments get them at once, and existing Deployments get them from the post-upgrade Deployment upgrade, or on their next update if you turn derivation on after you upgrade. To turn derivation on, set
astronomer.houston.config.clusters.configDerive.modetoon, or tooptInand then opt the cluster in. This isn’t fixed in control plane and data plane installations, because a data plane doesn’t report its image defaults to the control plane. - Fixed an issue where
deploymentsconfiguration that you set in your Helm values underastronomer.houston.config.deploymentswas silently ignored for clusters that were already registered. The value now applies to clusters that derive their configuration. - Fixed an issue where a cluster whose stored configuration had
runtimeManagement.airflowV3.enabledset tofalsekept Airflow 3 disabled after you enabled it in the platform configuration, and only a direct database update could fix it. The platform value now applies to clusters that derive their configuration. - Fixed an issue where
dagDeploy.extraEnvwas silently dropped depending on whether you set it underdeployments.helm.dagDeployor at the top level.deployments.helm.dagDeploy.extraEnvis now honored. - Fixed an issue where every chart render created a new signing key pair for the data plane internal API, and Laminar kept trusting the old certificate, so Laminar authentication failed. The key now stays stable across renders. The new
astronomer.commander.signingKey.regenerateKeyEachUpgradevalue isfalseby default. - Fixed an issue where operator-based Deployments always had their extra capacity set to 0, and the APC UI didn’t show the setting. Operator-based Deployments now default to, and are validated against, the executor’s minimum extra capacity, as Helm-based Deployments are. A Deployment stored with 0 is raised to the minimum the next time it’s saved.
- Fixed an issue where a Deployment’s status could change from one refresh to the next when its Pods were in a mix of
FailedandUnknownphases. - Fixed an issue where the Elasticsearch host that the APC API stored for a cluster wasn’t updated when the data plane’s Helm release name or external Elasticsearch setting changed, so Deployments on that cluster kept using the old host.
- Fixed an issue where a data plane that reported an empty Airflow chart version or Helm release name replaced the values the APC API stored for its cluster, which left Deployments with no chart version or an unusable Elasticsearch host. Cluster registration now fails with an error that names the missing value, and the metadata sync keeps the last valid value.
- Fixed an issue where the DP-Link timing values in the APC Helm chart, such as the lease duration, reconnect backoff, and degraded and unreachable thresholds, had no effect because the chart set environment variable names that DP-Link doesn’t read. If you set any
astronomer.dpLinktiming values, they take effect after you upgrade. - Fixed an issue where the logging sidecar stopped reading task logs as soon as a worker Pod began terminating, for example during a scale-down, node drain, or eviction, so a task that kept running lost the rest of its logs. The logging sidecar now keeps shipping logs until the worker finishes its task.
- Fixed an issue where an adopted operator-based Deployment with the auth sidecar enabled never became healthy, because the APC API didn’t apply the sidecar’s NGINX ConfigMap, Service, and Ingress.
- Fixed an issue where the Elasticsearch environment variables of an adopted Deployment’s original Airflow custom resource appeared among the Deployment’s environment variables in the APC UI and the APC API, and the APC UI offered them for editing.
- Fixed an issue where the cluster details form in the APC UI reset your changes on every keystroke, so you couldn’t edit a cluster’s name.
- Fixed an issue where, after a failed save of a Deployment’s environment variables, the APC UI showed the error toast again on every keystroke.
Known issues
- Laminar copies each Deployment’s Airflow metadata database credentials into the platform namespace, so anyone with access to that namespace can read them. Restrict access to the namespace.
- Hibernation requires worker autoscaling. Hibernation without KEDA isn’t supported in this release.
- Hibernation schedules created in the APC UI can run an hour off. The APC UI converts schedule times with each time zone’s January offset all year, so time zones that observe daylight saving are an hour off for part of the year, and it can save the wrong hour when the browser’s time zone isn’t UTC. As a workaround, set
hibernationScheduleswith theupsertDeploymentmutation usinghibernateAtCronandwakeAtCroncron expressions in UTC, or reopen a schedule after you save it in the APC UI and check the time. ThehibernationScheduleslist replaces all of a Deployment’s schedules, so include every schedule you want to keep. A fix is planned for a future release. - Task logs don’t appear for Astro Runtime 3.3 and later with the bundled Elasticsearch 8, because newer Runtime images ship the Elasticsearch 9 client. As a workaround, set the environment variable
AIRFLOW__ELASTICSEARCH__ES_COMPAT_WITH=8on each affected Deployment. [confirm: whether the fix for this ships in 2.2.0, PINF-1027 is In Review and its changes are in beta6; if it ships, move this to Bug fixes] - The MCP server and Laminar ingresses can ignore the Istio gateway flag. Don’t set
global.istio.gateway.enabledandmcpServer.enabledtogether. Gateway values on migration flights, and a single Istio API version across both charts, are also open. - In control plane and data plane installations that use the Istio ingress gateway, the
elasticsearch-nginxauth subrequest can fail with an SNI error. - db-bootstrapper writes
prisma_connection_limitinstead ofconnection_limitto the connection string, so Prisma ignores it. As a workaround, addconnection_limitto the APC API’s connection string. - An upgrade can leave stale support image defaults stored in a cluster’s configuration in every control plane and data plane installation, and in a unified installation whose cluster doesn’t derive its configuration. As a workaround in a unified installation, set
astronomer.houston.config.clusters.configDerive.modetooptInand opt the cluster in. See Derive cluster configuration from platform defaults. In any installation, you can instead update the cluster configuration and re-upsert the Deployments. - Worker autoscaling authentication on OpenShift isn’t verified. Test autoscaling on OpenShift before you use it in production.
- If the network path between the control plane and a data plane disappears without closing the connection, for example when the data plane’s load balancer is deleted or replaced, DP-Link doesn’t reconnect to that data plane. Its metadata is then refreshed only by the hourly sync, and failover doesn’t select it as a destination. As a workaround, restart DP-Link with
kubectl -n <platform-namespace> rollout restart deployment/<release-name>-dp-link. - Environment variables set through
astronomer.dpLink.envare rendered twice in the DP-Link Pod spec, which can makehelm upgradefail or leave DP-Link running with an old value. Leaveastronomer.dpLink.envempty, set the variables on the DP-Link Deployment withkubectl set env, and reapply them after each upgrade. - A cluster registered on APC 2.0.3 or a later 2.0.x release keeps an incomplete container security context in its stored configuration, so after an upgrade the Pods of its Helm-based Deployments lack
allowPrivilegeEscalation: falseandcapabilities.drop: [ALL]. If an admission policy requires those settings, such as the Kyvernodisallow-privilege-escalationandrequire-drop-all-capabilitiespolicies inEnforcemode, the upgraded Pods are denied and the Deployments stay unhealthy. Operator-based Deployments aren’t affected, because the Airflow operator sets both fields itself. As a workaround, set the complete container security context as a cluster override on each affected cluster before you upgrade. Alternatively, setastronomer.houston.config.clusters.configDerive.modetoonin the values for the upgrade, so the cluster derives the current security context defaults. This makes every cluster that hasn’t opted out derive its configuration, not only the affected ones. See Clusters registered on APC 2.0.3 or later 2.0.x releases.
Resolved CVE list
Astro Private Cloud 2.2.0 resolves 158 vulnerabilities: 114 CVEs, 41 GitHub security advisories, and 3 RustSec advisories. Some of these also appear in the 2.1.3 list, because 2.1.3 fixed them in only some components and 2.2.0 fixes them in more.CVEs (114)
CVEs (114)
- CVE-2025-12781
- CVE-2025-13601
- CVE-2025-14087
- CVE-2025-14505
- CVE-2025-14512
- CVE-2025-15366
- CVE-2025-15367
- CVE-2025-6052
- CVE-2025-70873
- CVE-2026-102277
- CVE-2026-102278
- CVE-2026-102554
- CVE-2026-103387
- CVE-2026-104895
- CVE-2026-106554
- CVE-2026-107324
- CVE-2026-107325
- CVE-2026-110816
- CVE-2026-110879
- CVE-2026-110910
- CVE-2026-111943
- CVE-2026-113351
- CVE-2026-114583
- CVE-2026-114613
- CVE-2026-115290
- CVE-2026-115298
- CVE-2026-115506
- CVE-2026-115557
- CVE-2026-115710
- CVE-2026-116587
- CVE-2026-117610
- CVE-2026-11822
- CVE-2026-11824
- CVE-2026-118370
- CVE-2026-118774
- CVE-2026-118775
- CVE-2026-118776
- CVE-2026-118780
- CVE-2026-118781
- CVE-2026-119286
- CVE-2026-119371
- CVE-2026-119372
- CVE-2026-119373
- CVE-2026-119374
- CVE-2026-119375
- CVE-2026-119376
- CVE-2026-119377
- CVE-2026-119378
- CVE-2026-119379
- CVE-2026-119586
- CVE-2026-119591
- CVE-2026-12345
- CVE-2026-123609
- CVE-2026-123610
- CVE-2026-123611
- CVE-2026-13595
- CVE-2026-14457
- CVE-2026-15195
- CVE-2026-17508
- CVE-2026-18036
- CVE-2026-18040
- CVE-2026-27456
- CVE-2026-34180
- CVE-2026-3446
- CVE-2026-40467
- CVE-2026-40468
- CVE-2026-40469
- CVE-2026-40553
- CVE-2026-40898
- CVE-2026-42767
- CVE-2026-42769
- CVE-2026-49272
- CVE-2026-54874
- CVE-2026-56391
- CVE-2026-58010
- CVE-2026-58011
- CVE-2026-58012
- CVE-2026-58013
- CVE-2026-58014
- CVE-2026-58015
- CVE-2026-58016
- CVE-2026-6019
- CVE-2026-62290
- CVE-2026-63074
- CVE-2026-63075
- CVE-2026-71888
- CVE-2026-71889
- CVE-2026-71891
- CVE-2026-71892
- CVE-2026-7383
- CVE-2026-78659
- CVE-2026-78660
- CVE-2026-78661
- CVE-2026-78663
- CVE-2026-78669
- CVE-2026-81521
- CVE-2026-85393
- CVE-2026-88031
- CVE-2026-89044
- CVE-2026-93488
- CVE-2026-93491
- CVE-2026-93558
- CVE-2026-93565
- CVE-2026-93566
- CVE-2026-93573
- CVE-2026-93574
- CVE-2026-93599
- CVE-2026-93600
- CVE-2026-93601
- CVE-2026-93602
- CVE-2026-93690
- CVE-2026-93751
- CVE-2026-97032
- CVE-2026-97045
GitHub security advisories (GHSAs) (41)
GitHub security advisories (GHSAs) (41)
- GHSA-2755-2mm4-rm5c
- GHSA-27pc-rm86-68pq
- GHSA-2hhj-vj64-hx3j
- GHSA-3r8g-cqwr-jr29
- GHSA-49g6-96jj-f7r9
- GHSA-4c67-8q63-xrxq
- GHSA-4w3g-jfj2-cw2q
- GHSA-525v-9gp9-w22h
- GHSA-5cwg-6vw7-rj6p
- GHSA-5x38-2vff-x55p
- GHSA-6m5v-9gmr-5665
- GHSA-6mp9-8xrw-74r4
- GHSA-6qrw-m8cv-hcxf
- GHSA-6r6q-9jmv-gg3h
- GHSA-6wvx-3r32-xmcg
- GHSA-7wch-p9px-956x
- GHSA-8hrf-8g6f-7xwp
- GHSA-8r9f-h969-mm4m
- GHSA-95fj-3fxw-g62g
- GHSA-c67m-wr4h-2ccg
- GHSA-g82h-mgfp-jx8g
- GHSA-hfpw-x3fg-wmmg
- GHSA-hqq3-7jhf-c5jx
- GHSA-j38q-h3ph-jjpq
- GHSA-j83x-34mv-v962
- GHSA-jc66-7q78-782g
- GHSA-jfv7-ghgv-gx4x
- GHSA-jh75-xv39-vhvx
- GHSA-mgcc-cww5-fp2q
- GHSA-mm27-wq9c-mxxr
- GHSA-mrwp-f3q8-3g9p
- GHSA-mw29-5qxh-rr87
- GHSA-p9j4-2j95-j4rv
- GHSA-qpmf-fgh3-ff25
- GHSA-r39w-98wm-9pp6
- GHSA-r49w-vh47-r4hf
- GHSA-rhr8-3pm8-cq29
- GHSA-v6h2-qj3f-2h6v
- GHSA-vvm8-gf78-28g4
- GHSA-x547-2835-q547
- GHSA-xc97-9f2f-9hrx
RustSec advisories (3)
RustSec advisories (3)
Astro Private Cloud 2.1.3 is a security patch release that also resolves a number of role, Deployment, and APC UI bugs.
Security enhancements
- Updated the system Brotli decoder library,
libbrotlidec, to 1.2.1 in every APC image that includes it, to resolve CVE-2026-111497, a Critical severity out-of-bounds write in the Brotli decoder. - Patched the CVEs identified against Astro Private Cloud 2.1.2. See the Resolved CVE list.
Bug fixes
- Fixed an issue where saving a custom role cloned from the built-in
DEPLOYMENT_ADMINorSYSTEM_ADMINrole failed withUnknown permission key(s). The role catalog now includes the missing permissionsdeployment.config.unadopt,system.controlPlanes.get,system.controlPlanes.register,system.controlPlanes.update,system.controlPlanes.deregister, andsystem.regions.update. See Clone a role. - Fixed an issue where, with custom roles enabled, a custom role could override a user’s built-in role (System Admin, Op, User, or Viewer) in Airflow 2 and Airflow 3. For example, a System Admin in a Team with a narrower custom role lost admin access in Airflow. A user’s effective Airflow access is now the most-permissive combination of all of their roles. Built-in roles now apply whether they’re assigned directly or inherited through a Team, and members of local Teams also receive the Team’s built-in Workspace and Deployment role bindings. Behavior doesn’t change when custom roles are disabled. See How multiple roles combine.
- Fixed an issue where the APC UI and the APC API showed stale values after you updated a Deployment’s environment variables. The APC API now writes the Kubernetes Secret immediately. If the Secret write fails, the update fails and no changes are saved.
- Fixed an issue where a Pod could appear more than once in a Deployment’s usage metrics on the Metrics tab. Network traffic is now summed per Pod.
- Fixed several issues where the APC API didn’t wait for asynchronous work to finish or didn’t handle its errors. Removing a user’s Team bindings and adding a Team to a Workspace now wait for all of their changes to finish. The metrics poller no longer fails when Prometheus is unavailable, and a failed notification email no longer causes an unhandled error.
- Fixed an issue where the cluster Deployments Configuration editor dropped override keys with a
nullvalue, so saving without making any changes listed those keys as Removed. - Fixed an issue where a System Admin who is also a Deployment Admin couldn’t delete or unadopt a Deployment in the APC UI when
deployment.config.deletewas disabled forDEPLOYMENT_ADMIN. This regression was introduced in APC 2.1.0 and affected only the APC UI. The APC API still allowed both actions.
Additional improvements
- Component updates: Updated Grafana to 12.4.14 and the NATS server to 2.15.2.
Resolved CVE list
Astro Private Cloud 2.1.3 resolves 57 vulnerabilities: 39 CVEs and 18 GitHub security advisories. Some of these also appear in the 2.1.2 list, because 2.1.2 fixed them in only some components and 2.1.3 fixes them in more.CVEs (39)
CVEs (39)
- CVE-2026-109383
- CVE-2026-109869
- CVE-2026-109924
- CVE-2026-109932
- CVE-2026-110095
- CVE-2026-110180
- CVE-2026-110306
- CVE-2026-110725
- CVE-2026-111181
- CVE-2026-111497
- CVE-2026-111943
- CVE-2026-113872
- CVE-2026-114613
- CVE-2026-118774
- CVE-2026-118775
- CVE-2026-118776
- CVE-2026-118780
- CVE-2026-118781
- CVE-2026-119566
- CVE-2026-1642
- CVE-2026-40460
- CVE-2026-40701
- CVE-2026-42934
- CVE-2026-46600
- CVE-2026-56434
- CVE-2026-56851
- CVE-2026-56852
- CVE-2026-60005
- CVE-2026-78659
- CVE-2026-78660
- CVE-2026-78663
- CVE-2026-78669
- CVE-2026-87018
- CVE-2026-88932
- CVE-2026-93479
- CVE-2026-95101
- CVE-2026-97032
- CVE-2026-97205
- CVE-2026-97629
GitHub security advisories (GHSAs) (18)
GitHub security advisories (GHSAs) (18)
- GHSA-2qm8-x737-gmw5
- GHSA-49g6-96jj-f7r9
- GHSA-4cf7-xm37-g63h
- GHSA-4w3g-jfj2-cw2q
- GHSA-6mp9-8xrw-74r4
- GHSA-85x2-q946-cp5h
- GHSA-8c8m-p3m8-cjg8
- GHSA-9m75-vc3g-4x39
- GHSA-fm9c-5rcf-2q5p
- GHSA-g3f9-hcw7-r9w2
- GHSA-jfv7-ghgv-gx4x
- GHSA-m943-m63m-w62w
- GHSA-mgcc-cww5-fp2q
- GHSA-mm57-4v3p-rchx
- GHSA-qpmf-fgh3-ff25
- GHSA-r49w-vh47-r4hf
- GHSA-vvm8-gf78-28g4
- GHSA-xc97-9f2f-9hrx
Astro Private Cloud 2.1.2 is a security patch release that also resolves a number of platform, monitoring, and Deployment bugs.
Security enhancements
- APC images and the Astro CLI 1.46.1 and later no longer trust the eMudhra intermediate certificate authorities whose private keys were disclosed in October 2026. If your installation’s TLS certificate chains through one of them, replace it before you upgrade, because connections that use it fail after the upgrade.
- The APC API and the data plane internal API no longer write credentials, such as git-sync keys, registry credentials, and Airflow database passwords, to logs, audit events, or error responses. Upgrading doesn’t remove credentials already logged, so rotate any that might be exposed. See Respond to Airflow database credentials in APC logs.
- On installations with a separate control plane and data plane, the APC API stored its Airflow database creation credentials in each cluster’s configuration and could return them to any signed-in user. The APC API no longer stores or returns these credentials, and the upgrade removes them from existing records. After you upgrade, rotate the credentials in the secret named by houston.airflowBackendSecretName (by default, the APC API’s own database secret).
- Updated the APC UI dependencies dompurify, react-router, and query-string to patch known vulnerabilities.
- Patched the Critical and High severity CVEs identified against Astro Private Cloud 2.1.1. See the Resolved CVE list.
Bug fixes
- Fixed an issue where Deployments that pin their Astro Runtime image by digest failed to start with InvalidImageName when customImageSha was enabled.
- Fixed an issue where users with the
deployment.airflow.oporsystem.airflow.oppermission didn’t get the Airflow Op role. These permissions now map to Op on Airflow 2 Deployments and to Airflow User on Airflow 3, which has no Op role. See Airflow Op role removal and restoration. - Fixed an issue where removing or renaming a configuration override key that contains dots, such as
eks.amazonaws.com/role-arn, left the old key on the Deployment’s ServiceAccount with the valueDELETE_KEY. As a result, aDELETE_KEYoverride written in flat form, such as{"a.b": "DELETE_KEY"}, now removes a key literally nameda.binstead of the nested keybundera. Before you upgrade, rewrite any such override in nested form. - Fixed an issue where Astro Runtime releases set inline in
astronomer.houston.runtimeReleasesConfigweren’t mounted into the APC API. - Fixed an issue where Deployments managed by the Airflow operator with Dag-only deploys enabled mounted volumes that weren’t declared, which prevented their Pods from starting.
- Fixed an issue where PgBouncer couldn’t resolve the Airflow metadata database host after an upgrade to APC 2.1.0, so it lost its connection to the database.
- Fixed an issue where setting
readOnlyRootFilesystem: falsestill mounted an emptyDir volume at/tmp, which hid files that the Deployment image added to/tmp. Airflow containers now use the image’s own/tmp. Updating a Deployment to 2.1.2 restarts all of its Airflow components. See Read-only root filesystem. - Fixed an issue where NATS metrics were missing from Prometheus after an upgrade from APC 0.37.
- Fixed an issue where NGINX ingress controller metrics were missing from Prometheus on the control plane and data plane.
Additional improvements
- Logs for malformed requests: The APC API now logs requests whose body isn’t valid JSON, with the method, path, and client IP address but not the body.
- Prometheus config reloader memory: The default memory request and limit for the Prometheus config reloader container is now 128Mi, up from 25Mi.
- “Dag” in messages: Messages and logs from the Dag server and client now say “Dag” instead of “DAG”. Update any scripts that match on the old text.
- Object store metric: Prometheus now exposes
astro_object_store_operations_totalfor Airflow object store operations. - Component updates: Updated bundled components, including NATS 2.15.1, Prometheus 3.15.1, Vector 0.60, Alertmanager 0.34.1, registry 3.1.2, Redis 8.10.2, Grafana 12.4.13, Elasticsearch 8.19.23, and NGINX 1.31.8.
Resolved CVE list
Astro Private Cloud 2.1.2 resolves 315 vulnerabilities: 253 CVEs, 23 GitHub security advisories, and 39 RustSec advisories.CVEs (253)
CVEs (253)
- CVE-2025-13462
- CVE-2025-15366
- CVE-2026-100347
- CVE-2026-100348
- CVE-2026-100351
- CVE-2026-100352
- CVE-2026-100353
- CVE-2026-100699
- CVE-2026-100700
- CVE-2026-100701
- CVE-2026-100702
- CVE-2026-101910
- CVE-2026-101911
- CVE-2026-101912
- CVE-2026-101913
- CVE-2026-101915
- CVE-2026-101916
- CVE-2026-102276
- CVE-2026-102404
- CVE-2026-102411
- CVE-2026-102633
- CVE-2026-103007
- CVE-2026-103008
- CVE-2026-103009
- CVE-2026-103111
- CVE-2026-104844
- CVE-2026-104852
- CVE-2026-104874
- CVE-2026-105481
- CVE-2026-105482
- CVE-2026-105483
- CVE-2026-106069
- CVE-2026-106072
- CVE-2026-106073
- CVE-2026-106074
- CVE-2026-106444
- CVE-2026-106445
- CVE-2026-106446
- CVE-2026-106449
- CVE-2026-106450
- CVE-2026-106451
- CVE-2026-106452
- CVE-2026-106453
- CVE-2026-109829
- CVE-2026-109841
- CVE-2026-110871
- CVE-2026-111497
- CVE-2026-111750
- CVE-2026-111755
- CVE-2026-111756
- CVE-2026-111943
- CVE-2026-111997
- CVE-2026-114604
- CVE-2026-12345
- CVE-2026-12704
- CVE-2026-13608
- CVE-2026-14456
- CVE-2026-1502
- CVE-2026-15308
- CVE-2026-15310
- CVE-2026-15806
- CVE-2026-16599
- CVE-2026-17084
- CVE-2026-17495
- CVE-2026-18140
- CVE-2026-18149
- CVE-2026-18374
- CVE-2026-18503
- CVE-2026-18540
- CVE-2026-18924
- CVE-2026-19032
- CVE-2026-19534
- CVE-2026-19672
- CVE-2026-19931
- CVE-2026-2297
- CVE-2026-33630
- CVE-2026-34182
- CVE-2026-34183
- CVE-2026-35189
- CVE-2026-3644
- CVE-2026-38752
- CVE-2026-38753
- CVE-2026-38754
- CVE-2026-38755
- CVE-2026-39827
- CVE-2026-39828
- CVE-2026-39829
- CVE-2026-39830
- CVE-2026-39831
- CVE-2026-39832
- CVE-2026-39833
- CVE-2026-39834
- CVE-2026-39835
- CVE-2026-41080
- CVE-2026-41715
- CVE-2026-4224
- CVE-2026-42508
- CVE-2026-42766
- CVE-2026-42768
- CVE-2026-42770
- CVE-2026-43868
- CVE-2026-45186
- CVE-2026-45445
- CVE-2026-45446
- CVE-2026-45447
- CVE-2026-46595
- CVE-2026-46597
- CVE-2026-46598
- CVE-2026-46600
- CVE-2026-47857
- CVE-2026-49235
- CVE-2026-49264
- CVE-2026-49265
- CVE-2026-50195
- CVE-2026-50219
- CVE-2026-53489
- CVE-2026-53492
- CVE-2026-53493
- CVE-2026-53495
- CVE-2026-54872
- CVE-2026-54875
- CVE-2026-54876
- CVE-2026-56131
- CVE-2026-56132
- CVE-2026-56403
- CVE-2026-56404
- CVE-2026-56405
- CVE-2026-56406
- CVE-2026-56407
- CVE-2026-56408
- CVE-2026-56409
- CVE-2026-56410
- CVE-2026-56411
- CVE-2026-56412
- CVE-2026-56850
- CVE-2026-56851
- CVE-2026-56854
- CVE-2026-56855
- CVE-2026-56857
- CVE-2026-56864
- CVE-2026-56865
- CVE-2026-56866
- CVE-2026-58055
- CVE-2026-58210
- CVE-2026-58213
- CVE-2026-58214
- CVE-2026-58469
- CVE-2026-58470
- CVE-2026-58471
- CVE-2026-58472
- CVE-2026-61709
- CVE-2026-61801
- CVE-2026-62380
- CVE-2026-63072
- CVE-2026-63073
- CVE-2026-63076
- CVE-2026-63209
- CVE-2026-63308
- CVE-2026-66046
- CVE-2026-68495
- CVE-2026-68496
- CVE-2026-68497
- CVE-2026-68498
- CVE-2026-6879
- CVE-2026-7210
- CVE-2026-72897
- CVE-2026-75140
- CVE-2026-75803
- CVE-2026-75804
- CVE-2026-75805
- CVE-2026-75806
- CVE-2026-76641
- CVE-2026-76956
- CVE-2026-76957
- CVE-2026-77214
- CVE-2026-77420
- CVE-2026-77696
- CVE-2026-7774
- CVE-2026-78659
- CVE-2026-78660
- CVE-2026-78662
- CVE-2026-78663
- CVE-2026-78667
- CVE-2026-78669
- CVE-2026-80229
- CVE-2026-80230
- CVE-2026-80231
- CVE-2026-81870
- CVE-2026-81871
- CVE-2026-81872
- CVE-2026-82049
- CVE-2026-82208
- CVE-2026-82209
- CVE-2026-82560
- CVE-2026-83557
- CVE-2026-84303
- CVE-2026-84304
- CVE-2026-84445
- CVE-2026-84782
- CVE-2026-84784
- CVE-2026-84890
- CVE-2026-84933
- CVE-2026-84947
- CVE-2026-84961
- CVE-2026-85008
- CVE-2026-85014
- CVE-2026-85024
- CVE-2026-85091
- CVE-2026-85152
- CVE-2026-85731
- CVE-2026-85732
- CVE-2026-86145
- CVE-2026-86472
- CVE-2026-8674
- CVE-2026-86805
- CVE-2026-86818
- CVE-2026-87859
- CVE-2026-87910
- CVE-2026-89092
- CVE-2026-89156
- CVE-2026-89157
- CVE-2026-89158
- CVE-2026-89160
- CVE-2026-89161
- CVE-2026-89407
- CVE-2026-89425
- CVE-2026-90711
- CVE-2026-9076
- CVE-2026-90776
- CVE-2026-91776
- CVE-2026-91777
- CVE-2026-92392
- CVE-2026-93492
- CVE-2026-93567
- CVE-2026-93568
- CVE-2026-93569
- CVE-2026-93579
- CVE-2026-93657
- CVE-2026-93990
- CVE-2026-94439
- CVE-2026-94440
- CVE-2026-94448
- CVE-2026-95818
- CVE-2026-95837
- CVE-2026-95838
- CVE-2026-9669
- CVE-2026-97030
- CVE-2026-97031
- CVE-2026-97032
- CVE-2026-97394
- CVE-2026-97687
- CVE-2026-97688
- CVE-2026-97689
GitHub security advisories (GHSAs) (23)
GitHub security advisories (GHSAs) (23)
- GHSA-2g87-pp6c-29x5
- GHSA-2mjx-qc3c-rqvc
- GHSA-3gjw-f78c-vvpw
- GHSA-494j-54xm-rwp3
- GHSA-4w3g-jfj2-cw2q
- GHSA-5wr8-gcqf-gqf3
- GHSA-5x78-73v4-xg6w
- GHSA-6cjc-53gc-5rqm
- GHSA-6f2x-v7q7-m7m5
- GHSA-6g2r-675j-hx59
- GHSA-6mp9-8xrw-74r4
- GHSA-6q48-6c7w-9gw2
- GHSA-6w6g-hm98-mhgm
- GHSA-7984-qgvg-3j9c
- GHSA-7gcf-g7xr-8hxj
- GHSA-9xw5-w5jj-pvcg
- GHSA-f9xw-jh8m-3mwq
- GHSA-g33f-6538-grxh
- GHSA-gx76-c99x-2c96
- GHSA-mgcc-cww5-fp2q
- GHSA-rgqc-3x5p-6gwg
- GHSA-vvm8-gf78-28g4
- GHSA-xmj3-9gf7-h52w
RustSec advisories (39)
RustSec advisories (39)
- RUSTSEC-2024-0436
- RUSTSEC-2026-0173
- RUSTSEC-2026-0186
- RUSTSEC-2026-0190
- RUSTSEC-2026-0194
- RUSTSEC-2026-0195
- RUSTSEC-2026-0204
- RUSTSEC-2026-0221
- RUSTSEC-2026-0253
- RUSTSEC-2026-0257
- RUSTSEC-2026-0258
- RUSTSEC-2026-0310
- RUSTSEC-2026-0338
- RUSTSEC-2026-0339
- RUSTSEC-2026-0340
- RUSTSEC-2026-0341
- RUSTSEC-2026-0342
- RUSTSEC-2026-0346
- RUSTSEC-2026-0348
- RUSTSEC-2026-0349
- RUSTSEC-2026-0370
- RUSTSEC-2026-0371
- RUSTSEC-2026-0372
- RUSTSEC-2026-0385
- RUSTSEC-2026-0386
- RUSTSEC-2026-0391
- RUSTSEC-2026-0395
- RUSTSEC-2026-0396
- RUSTSEC-2026-0397
- RUSTSEC-2026-0398
- RUSTSEC-2026-0399
- RUSTSEC-2026-0400
- RUSTSEC-2026-0401
- RUSTSEC-2026-0402
- RUSTSEC-2026-0403
- RUSTSEC-2026-0404
- RUSTSEC-2026-0405
- RUSTSEC-2026-0406
- RUSTSEC-2026-0410
Astro Private Cloud 2.1.1 is a security patch release that also resolves a number of platform, deployment, logging, and APC UI bugs.
Security enhancements
- Signing out of Astro Private Cloud now ends the session. Previously, signing out cleared only the browser cookie, so a copy of the session token taken beforehand stayed valid until it expired, by default after 24 hours. APC now deletes the session record on every sign-out, instead of only when
auth.openidConnect.idpGroupsRefresh.enabledistrue. - The APC API now confirms that a session still exists when it verifies a session token, so a revoked session is rejected instead of being accepted until the token expires. Verification previously checked only the token’s signature and expiry, which left no way to end a session early after a token was exposed.
- The PgBouncer SSL certificate generator Job now sets
allowPrivilegeEscalation: falseand drops all capabilities. Clusters that enforce the Pod Security Standards Restricted profile through Kyverno previously rejected this Job, which blocked any install or upgrade that setspgbouncer.sslmode: require. - Patched the Critical and High severity CVEs identified against Astro Private Cloud 2.1.0. See the Resolved CVE list.
Bug fixes
- Fixed an issue where Airflow metadata database and result backend connection credentials could be written in plaintext to APC API logs and audit records when a Deployment was created or updated with custom or user-defined values through the
upsertDeploymentmutation or a pre-deployment webhook. APC now redacts customer-managed database credentials written to log lines. Upgrading doesn’t remove credentials that are already stored in your logs or audit records, so review who can access them and how long you keep them. See Respond to Airflow database credentials in APC logs. - Fixed an issue where read-only root filesystem hardening had no way to be disabled, which could increase Pod scheduling latency past task SLAs on Deployments where copying
/usr/local/airflowinto the writable volume was slow under load. Setdeployments.securityContext.container.readOnlyRootFilesystem: falseto disable the hardening — including theusr-local-airflow-copierinit container and its volume — on Airflow Deployment containers. See Read-only root filesystem. - Fixed an issue where the
usr-local-airflow-copierinit container could permanently enterCrashLoopBackOffon Airflow images containing a read-only file or a dangling symlink under/usr/local/airflow. - Fixed an issue where Flower didn’t receive the
usr-local-airflow-copierinit container that scheduler and worker components receive, causing Flower to crash on startup on Deployments that load a custom module, such as a secrets backend, throughinclude. - Fixed an issue where the
usr-local-airflow-copierinit container declared no CPU or memory requests or limits, so Deployment creation failed on clusters whose namespaces enforce aLimitRange. - Fixed an issue where the
usr-local-airflow-copierinit container ignored the cluster’s default runtime image tag or digest and fell back to the Astro Runtime version, producing a malformed image reference on clusters that pin their default runtime image by digest. - Fixed an issue where an upgrade failed when in-cluster PostgreSQL was enabled, because the StatefulSet had no writable
/var/run/postgresqlmount and couldn’t readpostgresql.conf. The PostgreSQL configuration files are now regenerated during the upgrade instead of leaving the server unable to start. - Fixed an issue where the data plane internal API didn’t reset the password of a PostgreSQL user that already existed, so a Deployment recreated after an incomplete cleanup failed with
password authentication failed. - Fixed an issue where the
houston-upgrade-deploymentsandhouston-cp-refreshHelm hook Jobs read aglobal.sslmodeEnabledvalue that novalues.yamlfile sets, instead ofglobal.ssl.enabled, so their database connections didn’t use the configured SSL mode. - Fixed an issue where PodDisruptionBudgets were created for the External Secrets Operator and PgBouncer even when
global.podDisruptionBudgets.enabledwasfalse. Both components now respect the platform-wide setting rather than requiring a per-component override. - Fixed an issue where the Dag server expected a
<release-name>-sidecar-configConfigMap while the Airflow Pods used asidecar-configSecret whenloggingSidecar.customConfigwastrue, which required creating both objects by hand. - Fixed an issue where a cluster, Workspace, or Deployment override that replaced
deployments.logging.loggingSidecarwithoutextraEnvappended a null entry to the logging sidecar’senvarray. Helm schema validation rejected the resulting values, so configuration and Deployment updates failed across the triggerer, scheduler, webserver, Dag processor, and workers. - Fixed an issue where webhook-triggered
git-sync-relaysyncs ran concurrently and raced on.git/index.lock, so Dag commits could be missed. A delivery that failed at the end of a burst left the checkout stale until the next push. - Fixed an issue where git-sync annotations weren’t applied to Deployment Pods, causing Pod startup failures on clusters that run an Istio service mesh. The APC API now supports
annotationsandpodAnnotationsfor git-sync. - Fixed an issue where Airflow 3 Deployments using the Kubernetes executor with
global.loggingSidecar.enabled: trueingested every task log line into Elasticsearch twice. The injectedpod_mutation_hookteed task output to the sidecar log in addition to the structured task log that Airflow 3 already writes, and Vector shipped both copies to the same Elasticsearch sink. The tee now applies to Airflow 2 only, which leaves Airflow 2 behavior unchanged and removes the duplicate documents. - Fixed an issue where the auth sidecar returned a 404 for an authenticated request to
/dags/healthz, because nginx had no location block matching that path. - Fixed an issue where Deployments on Astro Runtime 9.x failed to start the Airflow webserver and logged
No module named 'airflow.providers.fab', because the chart injected anauth_managerclass that only exists in Astro Runtime 11.x and later. - Fixed an issue where the last system admin could be removed, leaving an installation with no administrator and no supported way to restore access. APC now blocks the removal and ships a recovery script for installations already in that state.
- Fixed an issue where a deploy rollback failed with an error pulling the Docker manifest for the target image. APC now authenticates image manifest validation across all registries.
- Fixed an issue where the
upgrade-deploymentsscript resolved the target airflow-chart version twice, once for its log output and once for the message it published, so the logged version and the version actually applied could disagree. The APC API now also rejects an empty chart version instead of persisting it. - Fixed an issue where the Deployments list and a Deployment’s detail page could report different health for the same Deployment at the same time. Every element on a page now reads health from one shared subscription.
- Fixed an issue where the APC API ran a separate health check loop for every open subscription to the same Deployment, each on its own timer. Two people watching the same Deployment could see different health at the same moment, and the platform repeated identical Prometheus queries. The APC API now runs at most one health check loop per Deployment across its replicas, and the Prometheus queries within a cycle run concurrently so that each result is a single point-in-time snapshot.
- Fixed an issue where a change to a custom role wasn’t reflected in the APC UI until you refreshed the page.
- Fixed an issue where role assignments didn’t appear in the Show all view on the Roles and Permissions page until you refreshed the page or toggled Hide others.
- Fixed an issue where custom roles weren’t all visible on the Roles and Permissions page unless you filtered by scope, and where the page rendered empty space instead of scrolling each section independently.
- Fixed an issue where
DagOnlyDeploymentDisabledErroralways nameddeployments.deployMechanisms.dagOnlyDeployment.enabledas the reason a Dag-only deploy was blocked, even when the actual blocker wasdeployments.deployMechanisms.configureDagDeployment.enabled. - Fixed an issue where a permission denial rendered a blank page, an indefinite loading indicator, or a false empty state instead of an Access denied view. Query hooks dropped the
INSUFFICIENT_PERMISSIONSerror rather than surfacing it, so the affected pages fell through to their loading or empty branch and reported the error only in the browser console. - Fixed an issue where the Astro Runtime version dropdown in the APC UI continued to show stale values after a config governance change applied through Helm values, until you refreshed the page.
- Fixed an issue where the APC UI prevented a system admin from removing the last Workspace or Deployment admin user or team, even though the APC API allowed the removal. Administrators previously had to delete the role binding directly in the database.
- Fixed an issue where the last Workspace or Deployment admin couldn’t be removed when the role was assigned through an IdP-managed team. The last-admin check now falls back to administrators who hold the role through a custom role before it blocks a removal.
- Fixed an issue where only the last worker setting you changed was applied when you created a Deployment in the APC UI, so changes to worker resources, termination grace period, and worker count overwrote each other.
- Fixed an issue where
updateSystemServiceAccountreturned a permissions error instead of a validation error when the payload contained an unrecognized role.
Additional improvements
- Human-readable user names in Airflow 3: The Airflow 3 authorization token now carries
email,fullName, anduserTypeclaims, so Airflow shows a user’s email or name instead of an opaque ID in the audit log, in Triggering User on a Dag run, and on backfills, asset materializations, and Human-in-the-loop responses. Astro Runtime has to supply the other half of this change, so each Astro Runtime line has a minimum version: 3.1-19, 3.2-7, or 3.3-6. On the 3.0 line, 3.0-17 and later cover the audit log only, because Airflow 3.0 has no Triggering User field. These fields keep showing an opaque ID on earlier Astro Runtime versions, and on any version until the platform runs 2.1.1 or later. - Disable the Grafana link:
deployments.metricsReporting.grafana.enabledis no longer hardcoded totruein the Helm chart, so installations that don’t use Grafana can stop the Grafana link from appearing in the APC UI. - Dedicated jwks-hook service account: The
jwks-hookJob no longer shares the data plane internal API’s service account configuration. You can now name and scope its service account independently, so the Job runs with only the privileges it needs rather than inheriting a broader set. - Relaxed X.509 validation for Dag deploy: A new opt-in cluster setting lets the
dag-downloadersidecar connect to a Kubernetes API server whose serving certificate omits the Authority Key Identifier, Subject Alternative Name, or Extended Key Usage extensions. The sidecar’s TLS stack enforces these extensions strictly, which broke Dag deploy entirely on clusters provisioned by older installers. The default remains strict validation.
Resolved CVE list
- CVE-2026-4786
- CVE-2026-6791
- CVE-2026-7210
- CVE-2026-8763
- CVE-2026-12704
- CVE-2026-12802
- CVE-2026-12803
- CVE-2026-12816
- CVE-2026-13506
- CVE-2026-13608
- CVE-2026-14199
- CVE-2026-14682
- CVE-2026-15603
- CVE-2026-17033
- CVE-2026-19475
- CVE-2026-25680
- CVE-2026-25681
- CVE-2026-27136
- CVE-2026-27878
- CVE-2026-32952
- CVE-2026-33814
- CVE-2026-33818
- CVE-2026-39821
- CVE-2026-40345
- CVE-2026-41178
- CVE-2026-42151
- CVE-2026-42502
- CVE-2026-42506
- CVE-2026-42533
- CVE-2026-43871
- CVE-2026-49844
- CVE-2026-54411
- CVE-2026-54515
- CVE-2026-56143
- CVE-2026-56853
- CVE-2026-56858
- CVE-2026-56860
- CVE-2026-56862
- CVE-2026-58059
- CVE-2026-58060
- CVE-2026-59639
- CVE-2026-59642
- CVE-2026-59647
- CVE-2026-59650
- CVE-2026-59889
- CVE-2026-59903
- CVE-2026-59949
- CVE-2026-71497
- CVE-2026-72639
- CVE-2026-72642
- CVE-2026-72645
- CVE-2026-72647
- CVE-2026-72678
- CVE-2026-72679
- CVE-2026-72684
- CVE-2026-72685
- CVE-2026-72686
- CVE-2026-72687
- CVE-2026-75595
- CVE-2026-75596
- CVE-2026-75899
- CVE-2026-75931
- CVE-2026-75975
- CVE-2026-76172
- CVE-2026-77037
- CVE-2026-77063
- CVE-2026-77078
- CVE-2026-77310
- CVE-2026-78605
- CVE-2026-80229
- CVE-2026-80230
- CVE-2026-80231
- CVE-2026-82208
- CVE-2026-82333
- CVE-2026-82417
- CVE-2026-82562
- CVE-2026-84375
- GHSA-2x7j-588g-ccc2
- GHSA-8m3c-c648-2xjj
- GHSA-cc9r-2j5m-2m83
- GHSA-hrxh-6v49-42gf
- GHSA-mhm7-754m-9p8w
- GHSA-mpwr-8vm7-h73f
- GHSA-wmmp-3585-3rmp
Astro Private Cloud 2.1.0 adds control plane reliability, custom roles and permission audit, Airflow Operator mode, and per-deployment migration, and significantly expands data plane failover.Before you upgrade, review Breaking changes for the changes to default behavior in this release.
New features
- Control plane reliability: You can now run two or more control planes that share one database and serve one customer-facing domain. Within a region they serve traffic together, and an unhealthy control plane drops out of rotation automatically. Across regions, you can stand up control planes in a standby region and fail the platform over to it during an outage or a planned migration. Two new admin pages, Regions and Control Planes, manage this system. See Control plane reliability, Configure control plane reliability, Manage a control plane reliability group, and the Control plane reliability reference.
- Custom roles and permission audit: You can now define custom roles from a catalog of granular permissions that spans both platform and Airflow permissions, scope them to the system, a Workspace, or a Deployment, and assign them to users, teams, and service accounts. Custom roles are additive and don’t change the built-in Viewer, Editor, and Admin roles. They’re disabled by default until a System Admin enables them for the platform. A new Permission Audit page shows who has access to a given system, Workspace, or Deployment, and what any single user, team, or service account can do. See Custom roles, Permission audit, and the Role and permission reference.
- Airflow Operator mode and Deployment adoption (Preview): You can now run a Deployment as an Airflow custom resource managed by the Airflow Kubernetes Operator instead of as a Helm release. If you already run Airflow with the operator, you can register that cluster as an APC data plane and adopt its existing Deployments without recreating them or interrupting Airflow, bringing their environment variables, users, registry, logs, and metrics under APC. Unadopt a Deployment to hand control back. Adopt and unadopt from the APC UI or with
astro deployment adoptandastro deployment unadopt. Operator support is disabled by default and enabled per data plane. See Airflow Operator mode, Adopt Astro Runtime Operator managed Deployments, and Move the operator under APC. - Per-deployment migration: You can now migrate individual Deployments to another data plane cluster, rather than failing over an entire data plane. Use it to shift a busy or unhealthy Deployment onto a neighboring cluster, or to let one team test failover on their own Deployment. Requires data plane failover to be enabled on your clusters. See Configure per-deployment migration, Manage and observe migration, and the Per-deployment migration reference.
- LDAP authentication: You can now authenticate users directly against an LDAP or LDAPS directory, such as Active Directory or OpenLDAP, with no OIDC bridge in between. You can also import LDAP groups as teams and map LDAP groups to system roles. See Configure LDAP authentication.
- Failover upgrade for existing Deployments: You can now retrofit Deployments created before data plane failover was enabled, so they get the inactive database connection failover requires. Upgrade Deployments one at a time or in bulk, and use the indicator on the Deployments list to see which Deployments are ready for failover and which still need the upgrade. See Run a failover upgrade.
- HashiCorp Vault for data plane failover: You can now use Vault as the
ClusterSecretStorebackend that the External Secrets Operator uses to replicate Deployment secrets between failover clusters, using Vault’s Kubernetes auth method. See Configure Vault for data plane failover. - git-sync over HTTPS: You can now authenticate git-sync to a private repository over HTTPS with a personal access token, in addition to SSH. Credentials are validated when you save the configuration rather than at first sync.
git-sync-relaynow also trusts the bundles named inglobal.privateCaCerts, so clones against a Git host behind a private certificate authority succeed, and a Deployment’s status indicator reflects git-sync health, so a failing sync is visible without opening the Logs tab. See Deploy Dags with git-sync.
Breaking changes
- Soft delete is removed. Deleting a Deployment now removes it and its Airflow database immediately, the Hard delete checkbox is gone from the APC UI, and the
hardDeleteDeploymentflag is deprecated in the Astro CLI. ThehardDeleteDeploymentconfiguration key no longer gates anything and is retained only so existing configuration overrides continue to validate. Confirm that your delete workflows and any automation that relied on recovering a soft-deleted Deployment account for the new behavior before you upgrade. - The default
USERrole no longer includes thesystem.workspace.createpermission, so authenticated users can no longer create a Workspace — and therefore Deployments in it — without an explicit grant. Every authenticated user previously held this permission, which let them create a Workspace, inherit Workspace Admin on it, and create Deployments there. If your teams create their own Workspaces, grantsystem.workspace.createthrough a custom role or a system role assignment before you upgrade. See Manage platform users and User permissions. - Default container security contexts now comply with the Kubernetes Pod Security Standards Restricted profile (PSS Restricted enforcement itself isn’t enabled by default). The APC Helm chart and the APC API’s injected container contexts now set
allowPrivilegeEscalation: false,capabilities.drop: [ALL],runAsNonRoot, andseccompProfile.type: RuntimeDefault, and forcereadOnlyRootFilesystemregardless of overrides. If you set a component’ssecurityContext, provide the entire block — other thanreadOnlyRootFilesystem, values aren’t deep-merged with the defaults. See Configure security contexts. global.acmeis removed. Remove this deprecated flag from yourvalues.yamlbefore you upgrade, because the strict schema validator rejects unknown keys.- Cluster Admin permissions are folded into System Admin.
SYSTEM_ADMINnow inherits theCLUSTER_ADMINpermission set, and both roles gain the new cordon, region, control plane registry, adoption, and custom role permissions. Review any automation that asserts an exact permission set. - The Airflow Operator sub-chart condition changed. The sub-chart is now gated on
airflow-operator.enabledfirst andglobal.airflowOperator.enabledsecond. If your cluster already runs a standalone Airflow Kubernetes Operator, setairflow-operator.enabled: falseto avoid installing a second one, and keepglobal.airflowOperator.enabled: true.
Security enhancements
- Patched the Critical and High severity CVEs identified against Astro Private Cloud 2.0.1. See the Resolved CVE list.
- Environment variables marked
isSecretare now masked in Pod stdout logs. - Platform Kubernetes service accounts now set
automountServiceAccountTokenexplicitly, so a Pod that doesn’t need the API server no longer receives a mounted token. - Removed the default Workspace-create grant from the
USERrole. See Breaking Changes.
Additional improvements
- Postgres 18 support: APC is now compatible with Postgres 18 and later.
- Migrate from unified mode to split mode: Installations running the control plane and data plane in one cluster can now migrate to split control plane and data plane mode without Airflow downtime or data loss.
- Cluster maintenance mode: You can now put a whole cluster into maintenance mode while you work on it, which blocks Deployment changes on that cluster while leaving Airflow and read access untouched. In 2.1, the cluster-level control is available through the APC API only. You can cordon individual Deployments from the Deployment Actions menu in the APC UI. See Cordon and uncordon a Deployment.
- Kubernetes security policy compatibility: The defaults that APC ships now conform to Pod Security Standards Restricted. See Configure security contexts.
- Private CA trust for git-sync HTTPS: A new cluster-scoped setting,
astronomer.houston.config.deployments.privateCaCertSecretNames, names the Secrets holding the private certificate authority bundles that git-sync HTTPS clones should trust. See Deploy Dags with git-sync. - More component resources configurable per Deployment: PgBouncer and StatsD CPU and memory can now be set from the Deployment settings page, and the API server now honors over-provisioning factors. On Deployments using the Celery executor, Redis can be set the same way. Component defaults, minimums, and limits are also listed in the APC API configuration, so you can see the current values before you override them. See Configure component size limits.
- ClusterIP ingress: For clusters whose policy forbids
LoadBalancerandNodePortServices, you can now setnginx.serviceType: ClusterIPand front the Service with your own load balancer. The default remainsLoadBalancer. See Network configuration. - Node exporter tolerations documented: The toleration that lets
prometheus-node-exporterrun on every node is now listed in the Helm configuration reference, so you can find and override it if your cluster policy restricts tolerations. The toleration and its default are unchanged. See Helm configuration reference. - Dag server backup annotations: The Dag server now accepts
annotationsandpodAnnotations, so its persistent volume can be included in Velero backup policies. - APC UI performance and polish: The initial page load is significantly faster — the Monaco editor is slimmed down, heavy routes are lazy-loaded, and responses are gzipped. Deployment actions are consolidated into a single Actions menu in the Deployment header. The configuration editors gain an Expand All control so search reaches collapsed YAML, a confirmation step before Update Cluster, and guidance in place of a blank Workspace override editor. The Airflow environment variable list in the Deployment UI now reflects Airflow 3. References to “Houston” are replaced with “APC API”, and the System Admin tab is now System.
- Duplicate Workspace label pre-upgrade check: The upgrade now checks for duplicate Workspace labels before it runs, instead of failing partway through the database migration.
- New image: APC 2.1 adds the
airflow-operator-controllerimage, which runs the Airflow Kubernetes Operator for Deployments in operator mode. It’s installed only when operator support is enabled. See Container image reference. SSHRemoteJobOperator: A new deferrable operator in the SSH provider runs a command on a remote host as a detached job and streams its log back into the Airflow task log. The job keeps running if the SSH connection drops or the worker restarts, and it doesn’t hold a worker slot while it waits. Use it instead ofSSHOperatorfor long-running remote jobs.
Bug fixes
- Fixed an issue where the Deployment detail page in the APC UI rendered blank, with no loading indicator, while the Deployment query was still pending.
- Fixed an issue where Deployment historical metrics rendered blank in the APC UI.
- Fixed an issue where PgBouncer extra configuration was appended to the defaults instead of overriding them.
- Fixed an issue where
apiServerresource requests were silently overwritten with the limit values throughupsertDeploymenton Airflow 3 Deployments. - Fixed an issue where the
NO_PROXYmatcher did not normalize trailing-dot fully-qualified domain names, so requests to matching internal hosts were still routed through the corporate proxy. - Fixed an issue where the Pilot component used a hardcoded Helm release name, blocking control plane and data plane failover on installations that use a different release name.
- Fixed an issue where failover validation timed out on Deployments with the auth sidecar enabled.
- Fixed an issue where the
upgrade-deploymentsscript published a near-empty NATS payload, droppingglobalDeploymentsConfigfrom the Deployments it updated. - Fixed an issue where the System Admin sidebar tab was visible to every system role, including
SYSTEM_VIEWERandSYSTEM_EDITOR. - Fixed an issue where the cluster configuration page’s Learn more link pointed to a broken URL, because the APC API had no
configGovernancedocumentation URL in its defaults. - Fixed an issue where the Cluster Deployments Configuration section heading in the APC UI did not describe the settings it contained.
- Fixed an issue where the failure messages for
team_system_role_binding.createandteam_system_role_binding.deletewere grammatically incorrect. - Fixed an issue where PgBouncer resource customizations set through platform Helm values were not applied to Deployments.
- Fixed an issue where hard-deleting a Deployment left its Airflow metadata database, database users, and namespace pool slot orphaned, even though the operation reported success.
- Fixed an issue where secondary database users were not cleaned up when a Deployment was deleted.
- Fixed an issue where a Deployment reported a status other than
HEALTHYwhile all of its Pods wereRunning, because the Pod phase check read only the first result of a multi-Pod query. - Fixed an issue where the Deployment page returned a 404 error when a gRPC call to the data plane failed, instead of loading the page and surfacing the error.
- Fixed an issue where the APC API worker was not restarted after a platform upgrade.
- Fixed an issue where an upgrade from Astronomer Software 0.37 on Azure Red Hat OpenShift failed when a Deployment switched deployment types.
- Fixed an issue where permission denials from the APC API surfaced as
INTERNAL_SERVER_ERRORrather thanFORBIDDEN, and where a global error handler redirected the entire APC UI, presenting a per-resource permission error as a logout. - Fixed an issue where a deploy rollback failed with an error pulling the Docker manifest for the target image.
- Fixed an issue where Elasticsearch and registry naming overrides were not applied.
- Fixed an issue where OpenShift installations could not set
podSecurityContextindependently of the OpenShift flag. - Fixed an issue where the data plane metadata ConfigMap was mangled into a quoted string by trailing whitespace, and where the metadata endpoint inferred the protocol instead of returning the full URL.
- Fixed an issue where a cleanup job failed for Airflow 3 Deployments.
- Fixed an issue where enabling external Elastic search via
global.customLogging.enabled=truecreated a duplicate Ingress for the same host by also rendering the in-cluster Elasticsearch ingress. - Fixed an issue where Prometheus proxy targets were incorrectly generated for unified-mode clusters after the default data plane cluster name changed to
default. - Fixed an issue where DR incorrectly deleted namespaces for namespace pools.
- Fixed an issue where databases were not cleaned up properly when using
manualReleaseName. - Fixed an issue where the Helm chart included an incorrect Grafana config map mapping.
- Fixed an issue where the bundled Grafana dashboards rendered synthetic random-walk data instead of
No dataon recent Grafana versions. The dashboards’ panels declared no explicit datasource, so their queries fell back to Grafana’s built-in test datasource rather than the configured Prometheus datasource, and a panel with no underlying metrics appeared to show real data. - Fixed an issue where the post-installation notes showed a Grafana URL in data plane mode, even though Grafana only deploys in control plane or unified mode.
- Fixed an issue where the data plane failover network policy referred to the wrong port when the auth sidecar was enabled.
- Fixed an issue where the data plane failover network policy used a hardcoded release name instead of the installation’s release name.
- Fixed an issue where StatsD did not reload after a change to its mapping configuration.
Known issues
- The chart version shown in the APC UI is stale after a
helm rollbackunder control plane reliability. The Control Planes page keeps showing the pre-rollback version, and that stale value also feeds the version-eligibility gate. As a workaround, revert withhelm upgradeto the target version rather thanhelm rollback. The reported version corrects itself within one heartbeat interval. - Per-deployment migration has no rollback. A migration removes the Deployment from the source cluster before creating it on the destination, so a destination failure leaves it installed on neither. No data is lost, but the Deployment is down until you re-run the migration. As a workaround, verify destination capacity and image availability first, and migrate a single Deployment before you move a batch.
- Adopting a Deployment rewrites a digest-pinned image to a tag reference. If an Airflow custom resource references its image by digest, adoption rewrites it to a tag built from the Deployment’s Astro Runtime version on the first apply. As a workaround, re-tag the image and reference it by tag before you adopt.
- Some changes to an adopted Deployment are ignored. Worker count, worker resources, and KEDA autoscaling changes made through APC don’t take effect, because the operator still owns those fields. Change them on the Airflow custom resource instead.
- Data plane failover can stall if Commander is unavailable for several minutes during a failover. This is carried forward from 2.0. As a workaround, restart the Pilot Deployment in the affected cluster and the failover resumes.
- Switching a Deployment to Dag-only deployment mode fails on Azure Red Hat OpenShift, because the security context constraint rejects the configured
runAsUser. - Changes to roles made on the Workspace or Deployments (for Users, Teams, or ServiceAccounts) details pages are applied successfully, but the UI does not update immediately. Refresh the page to see the latest role assignment.
- When a large number of custom roles are configured, some roles might not be visible by default on the Roles and Permissions page. As a workaround, use the Scope dropdown to filter by the appropriate scope. For example, select Scope: Workspace to view all custom Workspace roles.
- Newly assigned roles might not appear in the Show all view on the Roles and Permissions page until you refresh the page or toggle the Hide others button. The assignment is saved; only the display is stale.
Resolved CVE list
- CVE-2023-26144
- CVE-2025-22872
- CVE-2025-47911
- CVE-2025-58190
- CVE-2026-0864
- CVE-2026-4360
- CVE-2026-7246
- CVE-2026-11940
- CVE-2026-11972
- CVE-2026-12590
- CVE-2026-13149
- CVE-2026-13221
- CVE-2026-13676
- CVE-2026-13697
- CVE-2026-14257
- CVE-2026-14643
- CVE-2026-15157
- CVE-2026-15308
- CVE-2026-16221
- CVE-2026-16728
- CVE-2026-16729
- CVE-2026-18446
- CVE-2026-27141
- CVE-2026-34180
- CVE-2026-39822
- CVE-2026-42151
- CVE-2026-42505
- CVE-2026-54272
- CVE-2026-55170
- CVE-2026-55689
- CVE-2026-55831
- CVE-2026-55833
- CVE-2026-56745
- CVE-2026-56746
- CVE-2026-56819
- CVE-2026-57432
- CVE-2026-59869
- CVE-2026-59871
- CVE-2026-59873
- CVE-2026-59874
- CVE-2026-59875
- CVE-2026-59876
- CVE-2026-59877
- CVE-2026-59881
- CVE-2026-59884
- CVE-2026-59885
- CVE-2026-59886
- CVE-2026-59887
- CVE-2026-59890
- CVE-2026-59898
- CVE-2026-59899
- CVE-2026-59900
- CVE-2026-59901
- CVE-2026-59921
- CVE-2026-67213
- CVE-2026-67214
- CVE-2026-69152
- CVE-2026-69192
- CVE-2026-69198
- CVE-2026-69243
- CVE-2026-69244
- CVE-2026-69247
- CVE-2026-69249
Product lifecycle, support, and compatibility matrix
- For Astro Private Cloud compatibility with Kubernetes, Postgres, and Astro Runtime versions, see Version compatibility.
- For the Astro Private Cloud support lifecycle, see Astro Private Cloud release and lifecycle policy.
Astro Private Cloud 2.0.6 is a security patch release that also resolves a number of Deployment, metrics, and APC UI bugs.
Security enhancements
- Updated the system Brotli decoder library,
libbrotlidec, to 1.2.1 in every APC image that includes it, to resolve CVE-2026-111497, a Critical severity out-of-bounds write in the Brotli decoder. - The Airflow operator controller 1.5.10 no longer trusts the eMudhra intermediate certificate authorities whose private keys were disclosed in October 2026. Version 1.5.9 still trusted them because the CA bundle in its base image wasn’t updated. This affects only installations that enable the Airflow operator, which is off by default. If your installation’s TLS certificate chains through one of these authorities, replace it before you upgrade, because connections that use it fail after the upgrade.
- Patched the CVEs identified against Astro Private Cloud 2.0.5. See the Resolved CVE list.
Bug fixes
- Fixed an issue where the APC UI and the APC API showed stale values after you updated a Deployment’s environment variables. The APC API now writes the Kubernetes Secret immediately. If the Secret write fails, the update fails and no changes are saved.
- Fixed an issue where a Pod could appear more than once in a Deployment’s usage metrics on the Metrics tab. Network traffic is now summed per Pod.
- Fixed several issues where the APC API didn’t wait for asynchronous work to finish or didn’t handle its errors. Removing a user’s Team bindings and adding a Team to a Workspace now wait for all of their changes to finish. The metrics poller no longer fails when Prometheus is unavailable, and a failed notification email no longer causes an unhandled error.
- Fixed an issue where the cluster Deployments Configuration editor dropped override keys with a
nullvalue, so saving without making any changes listed those keys as Removed. - Fixed an issue where a Deployment with git-sync enabled showed Unhealthy indefinitely after its
git-sync-initinit container failed at startup and then succeeded on retry. The APC API no longer counts a pastgit-sync-initfailure when it calculates Deployment status. A Pod that is still blocked on git-sync shows as Deploying.
Additional improvements
- Component updates: Updated bundled components, including NATS 2.15.2, Vector 0.61, Alertmanager 0.34.2, Redis 8.10.3, Grafana 12.4.14, and the NGINX ingress controller 1.15.12.
Resolved CVE list
Astro Private Cloud 2.0.6 resolves 100 vulnerabilities: 71 CVEs, 26 GitHub security advisories, and 3 RustSec advisories.CVEs (71)
CVEs (71)
- CVE-2025-12781
- CVE-2025-13601
- CVE-2025-14087
- CVE-2025-14512
- CVE-2025-15366
- CVE-2025-15367
- CVE-2025-6052
- CVE-2025-70873
- CVE-2026-111497
- CVE-2026-111943
- CVE-2026-113351
- CVE-2026-114583
- CVE-2026-114613
- CVE-2026-115506
- CVE-2026-115557
- CVE-2026-117610
- CVE-2026-11822
- CVE-2026-11824
- CVE-2026-118370
- CVE-2026-118774
- CVE-2026-118775
- CVE-2026-118776
- CVE-2026-118778
- CVE-2026-118780
- CVE-2026-118781
- CVE-2026-119376
- CVE-2026-12345
- CVE-2026-13595
- CVE-2026-14457
- CVE-2026-1642
- CVE-2026-27456
- CVE-2026-34180
- CVE-2026-3446
- CVE-2026-40460
- CVE-2026-40467
- CVE-2026-40468
- CVE-2026-40469
- CVE-2026-40553
- CVE-2026-40701
- CVE-2026-42767
- CVE-2026-42769
- CVE-2026-42934
- CVE-2026-46600
- CVE-2026-49272
- CVE-2026-54874
- CVE-2026-56391
- CVE-2026-56434
- CVE-2026-56851
- CVE-2026-56852
- CVE-2026-58010
- CVE-2026-58011
- CVE-2026-58012
- CVE-2026-58013
- CVE-2026-58014
- CVE-2026-58015
- CVE-2026-58016
- CVE-2026-60005
- CVE-2026-6019
- CVE-2026-63074
- CVE-2026-63075
- CVE-2026-7383
- CVE-2026-85393
- CVE-2026-93479
- CVE-2026-93599
- CVE-2026-93600
- CVE-2026-93601
- CVE-2026-93602
- CVE-2026-93753
- CVE-2026-95101
- CVE-2026-97205
- CVE-2026-97629
GitHub security advisories (GHSAs) (26)
GitHub security advisories (GHSAs) (26)
- GHSA-2qm8-x737-gmw5
- GHSA-49g6-96jj-f7r9
- GHSA-4w3g-jfj2-cw2q
- GHSA-5cwg-6vw7-rj6p
- GHSA-5x38-2vff-x55p
- GHSA-6mp9-8xrw-74r4
- GHSA-6qrw-m8cv-hcxf
- GHSA-6wvx-3r32-xmcg
- GHSA-7wch-p9px-956x
- GHSA-8hrf-8g6f-7xwp
- GHSA-9m75-vc3g-4x39
- GHSA-c8m5-c952-6cm4
- GHSA-fm9c-5rcf-2q5p
- GHSA-g3f9-hcw7-r9w2
- GHSA-h2v8-394m-p7vv
- GHSA-hqq3-7jhf-c5jx
- GHSA-jc66-7q78-782g
- GHSA-jfv7-ghgv-gx4x
- GHSA-mgcc-cww5-fp2q
- GHSA-mm57-4v3p-rchx
- GHSA-mrwp-f3q8-3g9p
- GHSA-qpmf-fgh3-ff25
- GHSA-r49w-vh47-r4hf
- GHSA-rhr8-3pm8-cq29
- GHSA-vvm8-gf78-28g4
- GHSA-w44r-93j7-qv28
RustSec advisories (3)
RustSec advisories (3)
Astro Private Cloud 2.0.5 is a security patch release that also resolves a number of platform and Deployment bugs.
Security enhancements
- APC images and the Astro CLI 1.46.1 and later no longer trust the eMudhra intermediate certificate authorities whose private keys were disclosed in October 2026. If your installation’s TLS certificate chains through one of them, replace it before you upgrade, because connections that use it fail after the upgrade.
- The APC API and the data plane internal API no longer write credentials, such as git-sync keys, registry credentials, and Airflow database passwords, to logs, audit events, or error responses. Upgrading doesn’t remove credentials already logged, so rotate any that might be exposed. See Respond to Airflow database credentials in APC logs.
- On installations with a separate control plane and data plane, the APC API stored its Airflow database creation credentials in each cluster’s configuration and could return them to any signed-in user. The APC API no longer stores or returns these credentials, and the upgrade removes them from existing records. After you upgrade, rotate the credentials in the secret named by houston.airflowBackendSecretName (by default, the APC API’s own database secret).
- Updated the APC UI dependency dompurify and the APC API dependencies to patch known vulnerabilities.
- Patched the Critical and High severity CVEs identified against Astro Private Cloud 2.0.4. See the Resolved CVE list.
Kubernetes version support
- Astro Private Cloud 2.0.5 now supports Kubernetes 1.36 and 1.37.
Bug fixes
- Fixed an issue where users with the
deployment.airflow.oporsystem.airflow.oppermission didn’t get the Airflow Op role. These permissions now map to Op on Airflow 2 Deployments and to Airflow User on Airflow 3, which has no Op role. See Airflow Op role removal and restoration. - Fixed an issue where setting
readOnlyRootFilesystem: falsestill mounted an emptyDir volume at/tmp, which hid files that the Deployment image added to/tmp. Airflow containers now use the image’s own/tmp. Updating a Deployment to 2.0.5 restarts all of its Airflow components. See Read-only root filesystem.
Additional improvements
- Logs for malformed requests: The APC API now logs requests whose body isn’t valid JSON, with the method, path, and client IP address but not the body.
- Prometheus config reloader memory: The default memory request and limit for the Prometheus config reloader container is now 128Mi, up from 25Mi.
- Airflow 3 role permissions: The Airflow 3 Editor and Admin roles gain dataset create and delete and access to cluster activity and Dag warnings. Admin also gains access to task reschedules.
- Component updates: Updated bundled components, including NATS 2.15.1, Prometheus 3.15.1, Vector 0.60, Alertmanager 0.34.1, registry 3.1.2, Redis 8.10.2, Grafana 12.4.13, Elasticsearch 8.19.23, and NGINX 1.31.8.
Resolved CVE list
Astro Private Cloud 2.0.5 resolves 424 vulnerabilities: 355 CVEs, 30 GitHub security advisories, and 39 RustSec advisories.CVEs (355)
CVEs (355)
- CVE-2023-26144
- CVE-2023-45288
- CVE-2023-48795
- CVE-2024-24786
- CVE-2024-24791
- CVE-2024-34155
- CVE-2024-34156
- CVE-2024-34158
- CVE-2024-45336
- CVE-2024-45337
- CVE-2024-45338
- CVE-2024-45341
- CVE-2024-6104
- CVE-2025-0913
- CVE-2025-13462
- CVE-2025-22866
- CVE-2025-22868
- CVE-2025-22869
- CVE-2025-22870
- CVE-2025-22871
- CVE-2025-22872
- CVE-2025-4673
- CVE-2025-47906
- CVE-2025-47907
- CVE-2025-47911
- CVE-2025-47912
- CVE-2025-47913
- CVE-2025-47914
- CVE-2025-58181
- CVE-2025-58183
- CVE-2025-58185
- CVE-2025-58186
- CVE-2025-58187
- CVE-2025-58188
- CVE-2025-58189
- CVE-2025-58190
- CVE-2025-61723
- CVE-2025-61724
- CVE-2025-61726
- CVE-2025-61727
- CVE-2025-61728
- CVE-2025-61729
- CVE-2025-61730
- CVE-2025-68121
- CVE-2026-100347
- CVE-2026-100348
- CVE-2026-100349
- CVE-2026-100350
- CVE-2026-100351
- CVE-2026-100352
- CVE-2026-100353
- CVE-2026-100700
- CVE-2026-100701
- CVE-2026-100702
- CVE-2026-101898
- CVE-2026-101899
- CVE-2026-101900
- CVE-2026-101901
- CVE-2026-101902
- CVE-2026-101903
- CVE-2026-101904
- CVE-2026-101905
- CVE-2026-101906
- CVE-2026-101907
- CVE-2026-101908
- CVE-2026-101909
- CVE-2026-101915
- CVE-2026-101916
- CVE-2026-102276
- CVE-2026-102404
- CVE-2026-102411
- CVE-2026-102633
- CVE-2026-103006
- CVE-2026-103007
- CVE-2026-103008
- CVE-2026-103009
- CVE-2026-103111
- CVE-2026-104844
- CVE-2026-104852
- CVE-2026-104874
- CVE-2026-105481
- CVE-2026-105482
- CVE-2026-105483
- CVE-2026-106069
- CVE-2026-106072
- CVE-2026-106073
- CVE-2026-106074
- CVE-2026-106444
- CVE-2026-106445
- CVE-2026-106446
- CVE-2026-106449
- CVE-2026-106450
- CVE-2026-106451
- CVE-2026-106452
- CVE-2026-106453
- CVE-2026-107324
- CVE-2026-107325
- CVE-2026-109829
- CVE-2026-109841
- CVE-2026-110871
- CVE-2026-111497
- CVE-2026-111750
- CVE-2026-111755
- CVE-2026-111756
- CVE-2026-111943
- CVE-2026-111997
- CVE-2026-114604
- CVE-2026-12345
- CVE-2026-12590
- CVE-2026-12704
- CVE-2026-13608
- CVE-2026-14199
- CVE-2026-14456
- CVE-2026-1502
- CVE-2026-15308
- CVE-2026-15310
- CVE-2026-15603
- CVE-2026-15806
- CVE-2026-16599
- CVE-2026-17033
- CVE-2026-17084
- CVE-2026-17495
- CVE-2026-18140
- CVE-2026-18374
- CVE-2026-18503
- CVE-2026-18540
- CVE-2026-18924
- CVE-2026-19032
- CVE-2026-19475
- CVE-2026-19499
- CVE-2026-19534
- CVE-2026-19672
- CVE-2026-19931
- CVE-2026-2297
- CVE-2026-25679
- CVE-2026-25680
- CVE-2026-25681
- CVE-2026-27136
- CVE-2026-27139
- CVE-2026-27141
- CVE-2026-27142
- CVE-2026-27878
- CVE-2026-32280
- CVE-2026-32283
- CVE-2026-32288
- CVE-2026-32289
- CVE-2026-32952
- CVE-2026-33630
- CVE-2026-33814
- CVE-2026-34182
- CVE-2026-34183
- CVE-2026-35189
- CVE-2026-3644
- CVE-2026-38752
- CVE-2026-38753
- CVE-2026-38754
- CVE-2026-38755
- CVE-2026-39821
- CVE-2026-39824
- CVE-2026-39827
- CVE-2026-39828
- CVE-2026-39829
- CVE-2026-39830
- CVE-2026-39831
- CVE-2026-39832
- CVE-2026-39833
- CVE-2026-39834
- CVE-2026-39835
- CVE-2026-41080
- CVE-2026-41178
- CVE-2026-41715
- CVE-2026-42151
- CVE-2026-4224
- CVE-2026-42502
- CVE-2026-42506
- CVE-2026-42508
- CVE-2026-42766
- CVE-2026-42768
- CVE-2026-42770
- CVE-2026-43868
- CVE-2026-43871
- CVE-2026-45186
- CVE-2026-45445
- CVE-2026-45446
- CVE-2026-45447
- CVE-2026-45819
- CVE-2026-46595
- CVE-2026-46597
- CVE-2026-46598
- CVE-2026-46600
- CVE-2026-47857
- CVE-2026-49235
- CVE-2026-49264
- CVE-2026-49265
- CVE-2026-49844
- CVE-2026-50195
- CVE-2026-50219
- CVE-2026-53489
- CVE-2026-53492
- CVE-2026-53493
- CVE-2026-53495
- CVE-2026-54872
- CVE-2026-54875
- CVE-2026-54876
- CVE-2026-55969
- CVE-2026-56131
- CVE-2026-56132
- CVE-2026-56403
- CVE-2026-56404
- CVE-2026-56405
- CVE-2026-56406
- CVE-2026-56407
- CVE-2026-56408
- CVE-2026-56409
- CVE-2026-56410
- CVE-2026-56411
- CVE-2026-56412
- CVE-2026-56850
- CVE-2026-56851
- CVE-2026-56852
- CVE-2026-56854
- CVE-2026-56855
- CVE-2026-56857
- CVE-2026-56864
- CVE-2026-56865
- CVE-2026-56866
- CVE-2026-58055
- CVE-2026-58210
- CVE-2026-58213
- CVE-2026-58214
- CVE-2026-58469
- CVE-2026-58470
- CVE-2026-58471
- CVE-2026-58472
- CVE-2026-59876
- CVE-2026-59877
- CVE-2026-61709
- CVE-2026-61801
- CVE-2026-62243
- CVE-2026-62380
- CVE-2026-63072
- CVE-2026-63073
- CVE-2026-63076
- CVE-2026-63209
- CVE-2026-63308
- CVE-2026-66046
- CVE-2026-68495
- CVE-2026-68496
- CVE-2026-68497
- CVE-2026-68498
- CVE-2026-6879
- CVE-2026-7210
- CVE-2026-72897
- CVE-2026-73088
- CVE-2026-73089
- CVE-2026-75140
- CVE-2026-75507
- CVE-2026-75508
- CVE-2026-75595
- CVE-2026-75596
- CVE-2026-75803
- CVE-2026-75804
- CVE-2026-75805
- CVE-2026-75806
- CVE-2026-75899
- CVE-2026-75931
- CVE-2026-75975
- CVE-2026-76172
- CVE-2026-76641
- CVE-2026-76956
- CVE-2026-76957
- CVE-2026-77037
- CVE-2026-77063
- CVE-2026-77078
- CVE-2026-77117
- CVE-2026-77214
- CVE-2026-77420
- CVE-2026-77696
- CVE-2026-7774
- CVE-2026-78659
- CVE-2026-78660
- CVE-2026-78662
- CVE-2026-78663
- CVE-2026-78667
- CVE-2026-78669
- CVE-2026-80229
- CVE-2026-80230
- CVE-2026-80231
- CVE-2026-80489
- CVE-2026-81870
- CVE-2026-81871
- CVE-2026-81872
- CVE-2026-82049
- CVE-2026-82208
- CVE-2026-82209
- CVE-2026-82294
- CVE-2026-82333
- CVE-2026-82417
- CVE-2026-82560
- CVE-2026-82562
- CVE-2026-83557
- CVE-2026-84292
- CVE-2026-84303
- CVE-2026-84304
- CVE-2026-84375
- CVE-2026-84445
- CVE-2026-84782
- CVE-2026-84784
- CVE-2026-85024
- CVE-2026-85091
- CVE-2026-85731
- CVE-2026-85732
- CVE-2026-86145
- CVE-2026-86472
- CVE-2026-8674
- CVE-2026-86805
- CVE-2026-87029
- CVE-2026-87859
- CVE-2026-87910
- CVE-2026-88031
- CVE-2026-89092
- CVE-2026-89156
- CVE-2026-89157
- CVE-2026-89158
- CVE-2026-89160
- CVE-2026-89161
- CVE-2026-89407
- CVE-2026-89425
- CVE-2026-90711
- CVE-2026-9076
- CVE-2026-91776
- CVE-2026-91777
- CVE-2026-92392
- CVE-2026-93492
- CVE-2026-93567
- CVE-2026-93568
- CVE-2026-93569
- CVE-2026-93579
- CVE-2026-93657
- CVE-2026-93990
- CVE-2026-94408
- CVE-2026-94439
- CVE-2026-94440
- CVE-2026-94448
- CVE-2026-95818
- CVE-2026-95837
- CVE-2026-95838
- CVE-2026-9669
- CVE-2026-97030
- CVE-2026-97031
- CVE-2026-97032
- CVE-2026-97394
- CVE-2026-97687
- CVE-2026-97688
- CVE-2026-97689
GitHub security advisories (GHSAs) (30)
GitHub security advisories (GHSAs) (30)
- GHSA-2g87-pp6c-29x5
- GHSA-2mjx-qc3c-rqvc
- GHSA-2x7j-588g-ccc2
- GHSA-3gjw-f78c-vvpw
- GHSA-494j-54xm-rwp3
- GHSA-4w3g-jfj2-cw2q
- GHSA-5wr8-gcqf-gqf3
- GHSA-5x78-73v4-xg6w
- GHSA-6cjc-53gc-5rqm
- GHSA-6f2x-v7q7-m7m5
- GHSA-6g2r-675j-hx59
- GHSA-6mp9-8xrw-74r4
- GHSA-6q48-6c7w-9gw2
- GHSA-6w6g-hm98-mhgm
- GHSA-7984-qgvg-3j9c
- GHSA-7gcf-g7xr-8hxj
- GHSA-8m3c-c648-2xjj
- GHSA-9xw5-w5jj-pvcg
- GHSA-cc9r-2j5m-2m83
- GHSA-f9xw-jh8m-3mwq
- GHSA-g33f-6538-grxh
- GHSA-gcjh-h69q-9w9g
- GHSA-gx76-c99x-2c96
- GHSA-hrxh-6v49-42gf
- GHSA-mgcc-cww5-fp2q
- GHSA-mpwr-8vm7-h73f
- GHSA-rgqc-3x5p-6gwg
- GHSA-vvm8-gf78-28g4
- GHSA-wmmp-3585-3rmp
- GHSA-xmj3-9gf7-h52w
RustSec advisories (39)
RustSec advisories (39)
- RUSTSEC-2024-0436
- RUSTSEC-2026-0173
- RUSTSEC-2026-0186
- RUSTSEC-2026-0190
- RUSTSEC-2026-0194
- RUSTSEC-2026-0195
- RUSTSEC-2026-0204
- RUSTSEC-2026-0221
- RUSTSEC-2026-0253
- RUSTSEC-2026-0257
- RUSTSEC-2026-0258
- RUSTSEC-2026-0310
- RUSTSEC-2026-0338
- RUSTSEC-2026-0339
- RUSTSEC-2026-0340
- RUSTSEC-2026-0341
- RUSTSEC-2026-0342
- RUSTSEC-2026-0346
- RUSTSEC-2026-0348
- RUSTSEC-2026-0349
- RUSTSEC-2026-0370
- RUSTSEC-2026-0371
- RUSTSEC-2026-0372
- RUSTSEC-2026-0385
- RUSTSEC-2026-0386
- RUSTSEC-2026-0391
- RUSTSEC-2026-0395
- RUSTSEC-2026-0396
- RUSTSEC-2026-0397
- RUSTSEC-2026-0398
- RUSTSEC-2026-0399
- RUSTSEC-2026-0400
- RUSTSEC-2026-0401
- RUSTSEC-2026-0402
- RUSTSEC-2026-0403
- RUSTSEC-2026-0404
- RUSTSEC-2026-0405
- RUSTSEC-2026-0406
- RUSTSEC-2026-0410
Astro Private Cloud 2.0.4 is a security patch release that also resolves a number of platform and monitoring bugs and adds a default executor configuration fallback.
Security enhancements
- Patched the Critical and High severity CVEs identified against Astro Private Cloud 2.0.3. See the Resolved CVE list.
Bug fixes
- Fixed an issue where the
upgrade-deploymentsscript published a near-empty NATS payload, droppingglobalDeploymentsConfigfrom the Deployments it updated. - Fixed an issue where NGINX metrics were missing from the Prometheus dashboard due to a mismatch in ingress controller component naming.
- Fixed an issue where NATS metrics configuration was missing after upgrading from Astro Private Cloud 0.37 to 1.x or 2.x. The configuration was dropped during the STAN migration and is now restored.
Additional improvements
- Added a default executor configuration fallback. Astro Private Cloud now falls back to the default executor config when the
executorsection is missing or passed as an empty list. Customer-provided overrides continue to be respected and applied on top of these defaults.
Resolved CVE list
Astro Private Cloud 2.0.3 is a bug fix release.
Bug fixes
- Fixed an issue where read-only root filesystem hardening had no way to be disabled, which could increase Pod scheduling latency past task SLAs on Deployments where copying
/usr/local/airflowinto the writable volume was slow under load. Setdeployments.securityContext.container.readOnlyRootFilesystem: falseto disable the hardening — including theusr-local-airflow-copierinit container and its volume — on Airflow Deployment containers. See Read-only root filesystem. - Fixed an issue where the
usr-local-airflow-copierinit container could permanently enterCrashLoopBackOffon Airflow images containing a read-only file or a dangling symlink under/usr/local/airflow. - Fixed an issue where Flower didn’t receive the
usr-local-airflow-copierinit container that scheduler and worker components receive, causing Flower to crash on startup on Deployments that load a custom module, such as a secrets backend, throughinclude.
Astro Private Cloud 2.0.2 is a security patch release that also resolves a number of platform and deployment bugs.
Breaking changes
postgres-exporteris upgraded tov0.20.0. Thereplication_slotcollector is renamed toreplication_slots(--collector.replication_slot→--collector.replication_slots,--no-collector.replication_slot→--no-collector.replication_slots), and--disable-settings-metrics/PG_EXPORTER_DISABLE_SETTINGS_METRICSare removed — use--no-collector.settingsinstead. Update any Prometheus alerts, dashboards, or scrape configs that reference the old collector name or removed flags before you upgrade.
Security enhancements
- Patched the Critical and High severity CVEs identified against Astro Private Cloud 2.0.1. See the Resolved CVE list.
Bug fixes
- Fixed an issue where switching a Deployment to Dag-only deployment failed on ARO OpenShift because the generated Pod spec hardcoded
runAsUser: 50000, which falls outside the namespace’s SCC-assigned UID range. - Fixed an issue where the embedded GraphQL Playground landing page at
GET /v1failed with areq.body is not seterror, caused by a body-parser 2.x behavior change introduced by the Apollo Server 5 migration.POSTrequests and the Altair playground were unaffected. - Fixed an issue where Kuiper reload generated incorrect Prometheus proxy targets for unified-mode clusters, after the default data plane cluster name changed from
default-populated-by-db-bootstrappertodefault. - Fixed an issue where the post-installation notes showed a Grafana URL in data plane mode, even though Grafana only deploys in control plane or unified mode.
Additional improvements
- APC UI performance: The initial page load is significantly faster — the Monaco editor is slimmed down, heavy routes are lazy-loaded, and responses are gzipped.
Resolved CVE list
- CVE-2026-4786
- CVE-2026-6846
- CVE-2026-7210
- CVE-2026-7246
- CVE-2026-7383
- CVE-2026-8763
- CVE-2026-9076
- CVE-2026-11940
- CVE-2026-11972
- CVE-2026-12802
- CVE-2026-12803
- CVE-2026-12816
- CVE-2026-13221
- CVE-2026-13506
- CVE-2026-13676
- CVE-2026-13697
- CVE-2026-14257
- CVE-2026-14682
- CVE-2026-16221
- CVE-2026-18446
- CVE-2026-25800
- CVE-2026-33818
- CVE-2026-34180
- CVE-2026-34181
- CVE-2026-34182
- CVE-2026-34183
- CVE-2026-39822
- CVE-2026-40345
- CVE-2026-42151
- CVE-2026-42504
- CVE-2026-42533
- CVE-2026-42764
- CVE-2026-42765
- CVE-2026-44432
- CVE-2026-45445
- CVE-2026-45447
- CVE-2026-54273
- CVE-2026-54274
- CVE-2026-54275
- CVE-2026-54277
- CVE-2026-54278
- CVE-2026-54279
- CVE-2026-54280
- CVE-2026-55831
- CVE-2026-55833
- CVE-2026-56745
- CVE-2026-56819
- CVE-2026-56853
- CVE-2026-56859
- CVE-2026-56862
- CVE-2026-57432
- CVE-2026-58059
- CVE-2026-58060
- CVE-2026-59639
- CVE-2026-59642
- CVE-2026-59650
- CVE-2026-59869
- CVE-2026-59873
- CVE-2026-59874
- CVE-2026-59884
- CVE-2026-59885
- CVE-2026-59886
- CVE-2026-59887
- CVE-2026-59898
- CVE-2026-59899
- CVE-2026-59900
- CVE-2026-59901
- CVE-2026-60005
- CVE-2026-69152
- CVE-2026-69192
- CVE-2026-69244
- CVE-2026-69249
- CVE-2026-73566
- CVE-2026-76905
- CVE-2026-77354
Astro Private Cloud 2.0.1 is a security patch release that also resolves a number of platform, logging, and deployment bugs.
Security enhancements
- Patched the Critical and High severity CVEs identified against Astro Private Cloud 2.0.0. See the Resolved CVE list.
Bug fixes
- Fixed an issue where the
dagOnlyDeploymentDag-server Pod crashed withPermission deniedwhile writing to its PVC becausefsGroupwas not set on the PodsecurityContext. The PodsecurityContextnow includesfsGroup: 50000so the mounted volume is group-writable. - Fixed an issue where Deployment config override updates were rejected when
overProvisioningFactorCPUoroverProvisioningFactorMemwere set to fractional values such as0.5, because the generated schema typed these fields as integers. - Fixed an issue where the Vector DaemonSet entered
CrashLoopBackOffon install because the Vector configuration retained agraphqlfield that was removed in Vector v0.55.0. - Fixed an issue where logs from tasks in a task group (with
prefix_group_id=True, the default) did not appear in the Airflow UI or ship to Elasticsearch when using the Kubernetes executor with Vector sidecar or daemonset logging, because the Vector log-path pattern did not account for dots indag_idandtask_idvalues. - Fixed an issue where
AIRFLOW__LOGGING__REMOTE_BASE_LOG_FOLDERwas silently overridden with an empty value on all Astro Runtime 3.x Deployments, ignoring values set through the Deployment environment variables, the Dockerfile, or mounted secrets. - Fixed an issue where Airflow workers scheduled into a different namespace than their Deployment could not reach the execution API, because the execution API URL used a relative service name instead of a fully-qualified domain name.
- Fixed an issue where Celery worker liveness and readiness probes failed on container images without the
hostnamebinary, such as UBI-based Astro Runtime images, causing Kubernetes to restart healthy workers. The probe now resolves the hostname through Python. - Fixed an issue where the APC API routed requests to internal hosts through the corporate proxy despite matching
NO_PROXYentries, because the matcher did not handle bare hostnames,*.hostwildcards, single-label hostnames, or trailing-dot fully-qualified domain names. - Fixed an issue where
git-sync-relayPods failed to schedule on OpenShift because hardcodedfsGroupandrunAsUservalues fell outside the namespace-allocated UID and GID range enforced by therestricted-v2security context constraint. - Fixed an issue where the APC API database migration that adds a unique constraint on Workspace labels failed with error
P3009when duplicate Workspace labels existed, blocking all later migrations and preventing the APC API from starting. The migration now resolves duplicate labels before it creates the constraint. - Fixed an issue where a failed APC API database migration surfaced raw Prisma error messages that pointed operators to tooling not available in APC. Migration errors now include APC-specific guidance and links to Astronomer documentation and support.
- Fixed an issue where the platform-labeller pre-install Job did not include
imagePullSecrets, causingErrImagePullon installations that use a private registry. - Fixed an issue where setting
astroUI.volumeMountsproduced invalid YAML in the Astro UI deployment template, causing the Helm release to fail to render. - Fixed an issue where the Astro UI built log queries using an incorrect internal Elasticsearch proxy service name, causing log retrieval to fail with a DNS resolution error.
- Fixed an issue where the data plane metadata endpoint returned an empty
registry.versioninstead of the registry image tag. - Fixed an issue where the data plane internal API that the APC API interacts with silently ignored an unparseable
COMMANDER_DATAPLANE_DATABASE_URLand returned an empty database type, leaving operators with no signal about the cause. It now logs a warning, with database credentials redacted, when the URL can’t be parsed. - Fixed an issue where failover-related error messages in the APC API were logged as
[object Object]instead of readable text. - Fixed an issue where the private CA trust script for containerd 2.x removed the GKE Docker Hub pull-through mirror. The script now preserves the mirror configuration.
- Fixed an issue where the git-sync configuration form rejected valid SSH repository URLs that use a non-standard username, such as a service account, instead of
git. - Fixed an issue where NFS-backed Dag deployments created a persistent volume claim whose name did not match the claim referenced by the dag-processor, triggerer, and API server components, so those Pods failed to mount the Dags volume.
- Fixed an issue where a custom
COMMANDER_HOUSTON_JWKS_ENDPOINToverride for the data plane internal API was reset to its default on every Helm upgrade, causing connection timeouts until it was manually patched. - Fixed an issue where registering a data plane failed with a misleading metadata error when the base domain URL included a trailing slash, because the resulting request path contained a double slash.
- Fixed an issue where an executor disabled by a cluster-level configuration override, such as the local executor, still appeared as an option when creating a Deployment, because the Deployment configuration query did not apply cluster-level overrides.
- Fixed an issue in the cluster Deployment configuration override where the resource slider could permit values that the save action then rejected, and where wrapping the override in an extra
deploymentskey silently produced an inert configuration. The override now rejects double-wrapped input and returns a clearer out-of-range error. - Fixed an issue where the Deployment resource configuration UI did not respect the cluster’s configured default and maximum values for component resources, including scheduler CPU and memory, because the UI did not pass the cluster context to the Deployment configuration query.
- Fixed an issue where the Vector logging pipeline could silently drop logs from Deployments in namespaces that did not match standard Kubernetes naming, such as those created through manual namespace pools, because a namespace regex filter returned no match instead of checking for a valid namespace.
- Fixed an issue where a fresh install could hang because the Prometheus
filesd-reloadercrash-looped when it queried the APC API database before the database migration had created the required tables. The reloader now retries until the tables are available. - Fixed an issue where large Airflow 3 environments running many Deployments produced repetitive Dag processor manager logging. Operators can tune how often Dag bundles are checked for changes through
bundle_refresh_check_interval. - Fixed an issue where Airflow 2 Dag processor manager logs were noisily sent to stdout in containerized Deployments. Operators can control this behavior through
dag_processor_manager_log_stdout.
Resolved CVE list
- CVE-2026-5079
- CVE-2026-27140
- CVE-2026-27143
- CVE-2026-27144
- CVE-2026-29181
- CVE-2026-32280
- CVE-2026-32281
- CVE-2026-32283
- CVE-2026-32952
- CVE-2026-33810
- CVE-2026-33814
- CVE-2026-33816
- CVE-2026-34986
- CVE-2026-39821
- CVE-2026-39823
- CVE-2026-39827
- CVE-2026-39829
- CVE-2026-39835
- CVE-2026-39836
- CVE-2026-41506
- CVE-2026-42501
- CVE-2026-44432
- CVE-2026-45022
- CVE-2026-45570
- CVE-2026-46597
Astro Private Cloud 2.0 introduces three key new capabilities: Data Plane Disaster Recovery for business continuity across clusters, Config Governance for fine-grained control of APC and Airflow configuration, and Control Plane Audit Logging for compliance-grade activity tracking.
New features
- Data Plane Disaster Recovery: Astro Private Cloud now offers cross-cluster and cross-region data plane disaster recovery. You can now trigger a failover of all Airflow Deployments in a data plane from a source cluster to a destination cluster. A failover is triggered via a single action through the Astro Private Cloud API or GUI. Two modes are supported: Controlled, which drains in-flight tasks before promoting the destination (for planned maintenance or migrations), and Forced, which promotes the destination immediately when the source is unreachable (for outages). Data Plane DR helps to enable business continuity and meet regulatory requirements (DORA, OCC, MAS, APRA) that mandate a recovery path for production workloads, and replaces lengthy manual rebuilds with an automated platform operation. See Data plane failover.
- Config Governance: You can now turn APC and Airflow features on or off at each level of the APC data model: platform, data plane, Workspace, and Airflow Deployment. Platform administrators set defaults at the platform level, and have the option to allow Workspace and Deployment owners to override settings without impacting other Workspaces or Deployments. Config Governance addresses the problem of different teams, use cases, and workloads requiring different feature sets, configurations, and guardrails. With Config Governance, a single Astro Private Cloud installation can manage use cases from a locked-down regulated workload to a permissive experimental deployment, and let Deployment owners fine-tune within the bounds their administrator has set.
- Control Plane Audit Logging: The Control Plane now emits structured audit events for authentication, authorization, and Airflow Deployment lifecycle actions, including login and logout, permission and role changes, service account creation and revocation, and Deployment create, update, and delete operations. Events are written to the platform log stream alongside existing Control Plane logs, so they can be exported to your existing SIEM or log aggregation tool. Audit logging is a baseline requirement for SOC 2, ISO 27001, PCI-DSS, and the internal controls that banking and insurance customers use. Control Plane audit logs, in addition to the already-available Airflow Deployment audit logs, give compliance and security teams a single, structured source of truth for who did what, when.
Additional improvements
-
Cluster-level metric collection: Node exporter and cAdvisor can now be enabled through built-in Helm flags (
global.nodeExporter.enabled,global.cadvisor.enabled), both disabled by default. When enabled, four additional panels appear on the Metrics tab for each Deployment in the APC UI: CPU Usage, Memory Usage, Network Rx, and Network Tx. Cluster-level metric collection requires ClusterRole. The feature is disabled by default so the default Astro Private Cloud configuration does not require ClusterRole. See Deployment metrics. - Git-sync relay operational metrics: Deployments that use the git-sync relay for Dag deployment can now emit StatsD metrics for sync operations, repository size, and sync performance, giving visibility into git-sync throughput and latency per Deployment. This feature is disabled by default. See Git-sync relay metrics.
-
Data Plane metadata includes custom logging state: The
dataPlanemetadata response now includes the state ofcustomLogging.enabled, making it visible whether custom logging is active for a given Data Plane without requiring a separate configuration lookup. -
Strict schema validation for Helm configuration: APC 2.0 introduces a strict schema validator that rejects unknown or misspelled keys in
values.yamlbefore they reach the cluster, replacing the previous silent-ignore behavior. This catches configuration mistakes at install or upgrade time instead of surfacing them as runtime failures. The validator can be temporarily disabled per-Deployment where a newer feature hasn’t yet been added to the schema (for example, git-sync relay metrics in the initial 2.0 release). - Direct upgrade path from Astronomer Software 0.37 to APC 2.0: Customers still running Astronomer Software 0.37 can now upgrade directly to APC 2.0 without the intermediate hop through APC 1.0. See Upgrade 0.37 to 2.0.
- Configurable Prometheus scrape interval and timeout for federated data planes: The scrape_interval for the federated-dataplanes job is now configurable, and a new scrape_timeout setting has been added. This reduces Prometheus load in Control Plane/Data Plane deployments running a large number of Deployments, which previously hit a fixed 5s scrape interval.
- All images available in Azure Container Registry, as well as Quay and Docker Hub: The APC image set is now mirrored to Azure Container Registry (ACR) alongside Quay and Docker Hub, simplifying installs in Azure-restricted environments.
-
New images: APC 2.0 adds the
ap-external-secretsimage for data plane failover and theap-node-exporterimage for cluster-level metric collection. Both are disabled by default. See Container image reference. - Containerd 2.0 is now supported: The DaemonSet that manages self-signed cert trust for containerd has been updated for GKE 1.33+ (containerd 2.0), and the private CA install instructions are now functional on the latest GKE versions.
Bug fixes
- Fixed an issue where the scheduler and triggerer were not scaled down during an Airflow version downgrade, allowing core components to continue running while the database migration was triggered.
- Fixed an issue where navigating directly to a Deployment URL appended the entire URL to the end of the path, resulting in a broken redirect. The Airflow UI is now accessible when using Deployment URLs directly.
- Fixed an issue where the
paginatedDeployRevisionsGraphQL query returned anINTERNAL_SERVER_ERRORon the Deploy History page, and the release name appeared asnull. - Fixed an issue where git-sync Deployments failed to become healthy because the git-sync container used deprecated environment variable names.
- Fixed an issue where the Grafana plugin failed to initialize because the root filesystem was read-only and dashboard YAML files were missing from the image.
- Fixed an issue where Workspace Users could create new workspaces through the UI despite the UI displaying a permission denied error.
- Fixed an issue where the UI version tooltip displayed an incorrect version after a Helm upgrade due to a version mismatch between the root and sub-chart
Chart.yamlfiles. - Fixed an issue where each Airflow task log line appeared twice in the UI when using KubernetesExecutor with Elasticsearch logging via Vector, caused by both log pipelines consuming the same source and writing to the same sink.
- Fixed an issue where the Elasticsearch host configuration was not automatically generated from data plane metadata, causing the Airflow chart-level property to incorrectly override the Astronomer-owned logging configuration.
- Fixed an issue where documentation links in the APC UI pointed to a broken URL.
- Fixed an issue where hard-deleting a Deployment did not clean up the associated Airflow database and roles in Postgres, blocking the recreation of a Deployment with the same release name.
- Fixed an issue where errored KubernetesExecutor worker Pods were not automatically cleaned up, causing Pods to accumulate in the namespace. Errored worker Pods are now cleaned up by default, with the option to override this behavior through Deployment-level variables.
- Fixed an issue where
dag_processor_managerand Dag parsing logs from the scheduler were not exported to Elasticsearch, preventing operators from filtering these logs in Kibana for root cause analysis. - Fixed an issue where the dag server did not support mounting private CA certificates, causing deploy revision updates to fail with certificate errors in environments with private CAs enabled.
- Fixed an issue where git-sync sidecars in DaemonSet logging Deployments emitted JSON logs with numeric
levelfields, causing Elasticsearchdocument_parsing_exceptionerrors and breaking task log retrieval in the Airflow UI. - Fixed an issue where the APC API
update-runtime-checkjob did not honor HTTP/HTTPS proxy environment variables, preventing the job from reaching the runtime updates endpoint in proxy-configured environments. - Fixed an issue where expected error messages in the APC API were logged at the
ERRORlevel, creating confusion during incident triage. - Fixed an issue where the Airflow UI redirected to an incorrect OAuth URL after SSO authentication when accessed directly via the Deployment URL, appending the Airflow URL to the OAuth callback path.
- Fixed an issue where Prometheus recording rules for container CPU and memory metrics silently failed due to
kube_pod_infoemitting duplicatenodelabels during Pod scheduling transitions, causing data gaps in Grafana dashboards. - Fixed an issue where the deployment configuration UI accepted Scheduler and Worker CPU values that were not multiples of 100 mCPU, which are invalid for Kubernetes-backed deployments. The UI now displays a banner prompting users to enter CPU resources in multiples of 100 mCPU.
Breaking Changes
- Config Governance schema change: The schema used to enable and disable features in
values.yamlhas changed to support the new Platform → Data Plane → Workspace → Deployment hierarchy. In-place upgrades from APC 1.x and 0.37 are supported through migration scripts that translate existing configurations to the new schema. Review the migration guide before upgrading. astroRuntimeEnabledflag removed: Astro Runtime is now the only supported runtime for Airflow deployments (Astronomer Certified has been deprecated). TheastroRuntimeEnabledflag has been removed from houston-api, the APC UI, and the APC Helm charts. Any deployment configs, automation, or GitOps workflows that explicitly setastroRuntimeEnabledmust remove that field before upgrading.- Default cluster name simplified: Clusters auto-created during a 1.x install or upgrade are now named
defaultinstead ofdefault-populated-by-db-bootstrapper. Existing clusters aren’t renamed, but any scripts, IaC, or external tooling that reference the previous name should be updated prior to upgrading.
Known Issues
- Data plane failover may stall if Commander is unavailable for an extended period during a failover: If the Commander component in the Data Plane Kubernetes cluster becomes unavailable for approximately 4–5 minutes during an in-progress failover, the failover can enter a stalled state even after Commander recovers. In this state, some Deployments may not progress, either failing to clean up on the source cluster or failing to come up on the destination cluster. This issue is only observed when Commander itself is unavailable; it does not occur when the entire Data Plane Kubernetes cluster is down. Workaround: Restart the Pilot Deployment in the cluster where Commander was unavailable (either the source or destination cluster, depending on which side experienced the Commander outage). The failover will then resume and complete, marking itself as either successful or failed.
Resolved CVE list
- CVE-2024-45337
- CVE-2025-15467
- CVE-2025-62718
- CVE-2025-68121
- CVE-2026-4519
- CVE-2026-24051
- CVE-2026-27140
- CVE-2026-27144
- CVE-2026-28387
- CVE-2026-28388
- CVE-2026-28389
- CVE-2026-28390
- CVE-2026-29181
- CVE-2026-29785
- CVE-2026-32280
- CVE-2026-32281
- CVE-2026-32282
- CVE-2026-32283
- CVE-2026-32829
- CVE-2026-32887
- CVE-2026-33186
- CVE-2026-33540
- CVE-2026-33810
- CVE-2026-34986
- CVE-2026-35172
- CVE-2026-39883
- CVE-2026-40175
- CVE-2026-41676
- CVE-2026-41678
- CVE-2026-41681
Product lifecycle, support, and compatibility matrix
- For Astro Private Cloud compatibility with Kubernetes, Postgres, and Astro Runtime versions, see Version compatibility.
- For the Astro Private Cloud support lifecycle, see Astro Private Cloud release and lifecycle policy.