Purpose-built for AWS Load Balancer Controller

Put ALB-backed applications into maintenance mode without rewriting their Ingress.

Route AWS ALB Ingress traffic to a maintenance response with a high-priority ALB listener rule while preserving existing application Ingress routing, redirects, and backend rules.

app-maintenance-operator creates a temporary higher-priority ALB IngressGroup overlay. AWS Load Balancer Controller reconciles that generated Ingress into an ALB listener rule that returns an HTTP 503 maintenance page while the original application Ingress stays untouched.

Use it for immediate or scheduled maintenance windows with AWS Load Balancer Controller, ALB IngressGroups, and Kubernetes custom resources.

Quick Start

Target by ALB IngressGroup

Use this when platform teams know the shared AWS Load Balancer Controller group name.

specMaintenance settings
albGroupName<alb-ingress-group-name>
maintenanceModetrue

Target by Ingress name

Use this when application teams know the existing ALB Ingress name.

specMaintenance settings
targetIngress<target-ingress-name>
maintenanceModetrue

Set either albGroupName or targetIngress, not both. Both modes create one generated maintenance Ingress that AWS Load Balancer Controller turns into one high-priority catch-all ALB listener rule.

Problem It Solves

Manual ALB changes are risky

Console-side listener edits and one-off fixed-response rules can drift from Kubernetes and weaken rollback accountability.

Application Ingresses should stay stable

Maintenance mode should not require rewriting application-owned paths, redirects, actions, or backend service rules.

Scheduled windows need automation

Start and end times should be declared, reconciled, and auditable instead of depending on a manual change-window toggle.

Kubernetes-Native Advantages

Declarative maintenance intent

Maintenance custom resources describe the desired state; the controller handles the ALB overlay lifecycle.

Continuous reconciliation

The operator recreates or removes generated resources based on the current spec, schedule, and lifecycle state.

Clean ownership boundaries

Application teams keep their Ingress definitions; platform teams get a controlled maintenance workflow.

Targeting Prerequisites

Before using albGroupName

Use this mode when the ALB IngressGroup name is part of the platform contract.

  • The Maintenance resource is in the same namespace as the group member Ingresses.
  • At least one Ingress uses spec.ingressClassName: alb or kubernetes.io/ingress.class: alb.
  • Group member Ingresses define alb.ingress.kubernetes.io/group.name.
  • HTTPS or custom listener groups define alb.ingress.kubernetes.io/listen-ports.
  • AWS Load Balancer Controller IAM allows ALB listener rule management, including CreateRule, DeleteRule, ModifyRule, SetRulePriorities, DescribeRules, and DescribeListeners.

Before using targetIngress

Use this mode when the application team knows one existing ALB Ingress name.

  • The target Ingress is in the same namespace as the Maintenance resource.
  • The target Ingress is ALB-managed through spec.ingressClassName: alb or the ALB ingress-class annotation.
  • The target Ingress defines alb.ingress.kubernetes.io/group.name.
  • The operator derives the ALB group and creates one generated Ingress for a catch-all ALB listener rule.
  • No maintenance-operator restart is required when changing the Maintenance target; reconciliation handles the update.

Why Teams Use It

No application Ingress mutation

The operator owns a separate maintenance Ingress instead of patching business routing state during an outage window.

ALB-native behavior

It relies on AWS Load Balancer Controller IngressGroup ordering and fixed-response actions.

Operator-controlled lifecycle

Enable, disable, and scheduled windows are handled through a Kubernetes custom resource.

How It Works

Application Ingress Business-owned routing remains unchanged during enable, disable, and scheduled windows.
Maintenance Operator Watches Maintenance resources and creates a managed overlay Ingress.
AWS ALB Uses IngressGroup order to create a higher-priority listener rule for the fixed HTTP 503 maintenance response.

The application Ingress stays business-owned. The operator manages only the temporary overlay Ingress that AWS Load Balancer Controller publishes as the maintenance listener rule.

Targeting Modes

Preference Field When to use it
Target a known ALB IngressGroup spec.albGroupName Best for platform teams and shared ALB groups. This is the clearest AWS Load Balancer Controller workflow.
Target a known application Ingress spec.targetIngress Best for app teams that know the Ingress name. The operator derives the ALB group from that Ingress.

Operational Requirements

Kubernetes v1.25+

The target cluster must support the operator CRD and controller runtime behavior.

AWS Load Balancer Controller

The application Ingresses must be ALB-managed, and the controller IAM role must allow listener rule create, modify, reprioritize, describe, and delete operations.

Existing IngressGroup

At least one application Ingress must already define alb.ingress.kubernetes.io/group.name.

Start in a non-production namespace first. IngressGroup access can affect routing for every Ingress in the same group.

Current Release

Version v1.2.2
Image GHCR multi-arch release image
Scope Cluster-scoped or namespace-scoped install
License Apache-2.0

Documentation