diff --git a/features.md b/features.md
index a334f3209d5..cc9ae130edf 100644
--- a/features.md
+++ b/features.md
@@ -69,7 +69,6 @@
| HyperShiftOnlyDynamicResourceAllocation| Enabled | | Enabled | | Enabled | | Enabled | |
| ImageModeStatusReporting| | | Enabled | Enabled | | | Enabled | Enabled |
| IngressComponentRouteLabels| | | Enabled | Enabled | | | Enabled | Enabled |
-| IngressControllerMultipleHAProxyVersions| | | Enabled | Enabled | | | Enabled | Enabled |
| IrreconcilableMachineConfig| | | Enabled | Enabled | | | Enabled | Enabled |
| KMSEncryption| | | Enabled | Enabled | | | Enabled | Enabled |
| MachineAPIMigration| | | Enabled | Enabled | | | Enabled | Enabled |
@@ -108,6 +107,7 @@
| GatewayAPIWithoutOLM| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | Enabled |
| ImageStreamImportMode| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | Enabled |
| IngressControllerDynamicConfigurationManager| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | Enabled |
+| IngressControllerMultipleHAProxyVersions| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | Enabled |
| InsightsConfig| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | Enabled |
| InsightsOnDemandDataGather| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | Enabled |
| KMSv1| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | Enabled |
diff --git a/features/features.go b/features/features.go
index 9b2d7b272d1..2c31a79a5af 100644
--- a/features/features.go
+++ b/features/features.go
@@ -679,7 +679,7 @@ var (
contactPerson("miciah").
productScope(ocpSpecific).
enhancementPR("https://github.com/openshift/enhancements/pull/1965").
- enable(inDevPreviewNoUpgrade(), inTechPreviewNoUpgrade()).
+ enable(inDefault(), inOKD(), inDevPreviewNoUpgrade(), inTechPreviewNoUpgrade()).
mustRegister()
FeatureGateMinimumKubeletVersion = newFeatureGate("MinimumKubeletVersion").
diff --git a/operator/v1/zz_generated.crd-manifests/0000_50_ingress_00_ingresscontrollers-Default.crd.yaml b/operator/v1/zz_generated.crd-manifests/0000_50_ingress_00_ingresscontrollers-Default.crd.yaml
index 42328359543..85ff60dbf83 100644
--- a/operator/v1/zz_generated.crd-manifests/0000_50_ingress_00_ingresscontrollers-Default.crd.yaml
+++ b/operator/v1/zz_generated.crd-manifests/0000_50_ingress_00_ingresscontrollers-Default.crd.yaml
@@ -924,6 +924,32 @@ spec:
required:
- type
type: object
+ haproxyVersion:
+ description: |-
+ haproxyVersion specifies the HAProxy version to use for this
+ IngressController.
+
+ OpenShift 5.0 introduces HAProxy 3.2 as its default version and supports
+ HAProxy 2.8 from OpenShift 4.22 for migration purposes. When an OpenShift
+ release introduces a new default HAProxy version, that HAProxy version
+ becomes available as a pinnable value in subsequent OpenShift releases,
+ providing a smooth migration path for administrators who want to defer
+ HAProxy upgrades.
+
+ Valid values for OpenShift 5.0:
+ - Unset (default): Uses HAProxy 3.2 (the default for OpenShift 5.0)
+ - "3.2": Explicitly pins HAProxy 3.2 for preservation during cluster
+ upgrades to future OpenShift releases
+ - "2.8": Uses HAProxy 2.8 from OpenShift 4.22 (migration support, will
+ be dropped in the next OpenShift release)
+
+ If a specific HAProxy version is set and would become unsupported in a
+ target cluster upgrade, a preflight check will block the cluster upgrade
+ until this field is updated to unset or a supported version.
+ enum:
+ - "2.8"
+ - "3.2"
+ type: string
httpCompression:
description: |-
httpCompression defines a policy for HTTP traffic compression.
@@ -2561,6 +2587,20 @@ spec:
domain:
description: domain is the actual domain in use.
type: string
+ effectiveHAProxyVersion:
+ description: |-
+ effectiveHAProxyVersion reports the HAProxy version currently in use by
+ this IngressController. This reflects the resolved value of the
+ spec.haproxyVersion field. When omitted, the effective value has not yet
+ been resolved by the operator or the feature is not enabled for this cluster.
+
+ Examples for OpenShift 5.0:
+ - "3.2": Using HAProxy 3.2
+ - "2.8": Using HAProxy 2.8
+ enum:
+ - "2.8"
+ - "3.2"
+ type: string
endpointPublishingStrategy:
description: endpointPublishingStrategy is the actual strategy in
use.
diff --git a/operator/v1/zz_generated.crd-manifests/0000_50_ingress_00_ingresscontrollers-OKD.crd.yaml b/operator/v1/zz_generated.crd-manifests/0000_50_ingress_00_ingresscontrollers-OKD.crd.yaml
index 90b250d4a66..8220b5b91e4 100644
--- a/operator/v1/zz_generated.crd-manifests/0000_50_ingress_00_ingresscontrollers-OKD.crd.yaml
+++ b/operator/v1/zz_generated.crd-manifests/0000_50_ingress_00_ingresscontrollers-OKD.crd.yaml
@@ -924,6 +924,32 @@ spec:
required:
- type
type: object
+ haproxyVersion:
+ description: |-
+ haproxyVersion specifies the HAProxy version to use for this
+ IngressController.
+
+ OpenShift 5.0 introduces HAProxy 3.2 as its default version and supports
+ HAProxy 2.8 from OpenShift 4.22 for migration purposes. When an OpenShift
+ release introduces a new default HAProxy version, that HAProxy version
+ becomes available as a pinnable value in subsequent OpenShift releases,
+ providing a smooth migration path for administrators who want to defer
+ HAProxy upgrades.
+
+ Valid values for OpenShift 5.0:
+ - Unset (default): Uses HAProxy 3.2 (the default for OpenShift 5.0)
+ - "3.2": Explicitly pins HAProxy 3.2 for preservation during cluster
+ upgrades to future OpenShift releases
+ - "2.8": Uses HAProxy 2.8 from OpenShift 4.22 (migration support, will
+ be dropped in the next OpenShift release)
+
+ If a specific HAProxy version is set and would become unsupported in a
+ target cluster upgrade, a preflight check will block the cluster upgrade
+ until this field is updated to unset or a supported version.
+ enum:
+ - "2.8"
+ - "3.2"
+ type: string
httpCompression:
description: |-
httpCompression defines a policy for HTTP traffic compression.
@@ -2561,6 +2587,20 @@ spec:
domain:
description: domain is the actual domain in use.
type: string
+ effectiveHAProxyVersion:
+ description: |-
+ effectiveHAProxyVersion reports the HAProxy version currently in use by
+ this IngressController. This reflects the resolved value of the
+ spec.haproxyVersion field. When omitted, the effective value has not yet
+ been resolved by the operator or the feature is not enabled for this cluster.
+
+ Examples for OpenShift 5.0:
+ - "3.2": Using HAProxy 3.2
+ - "2.8": Using HAProxy 2.8
+ enum:
+ - "2.8"
+ - "3.2"
+ type: string
endpointPublishingStrategy:
description: endpointPublishingStrategy is the actual strategy in
use.
diff --git a/payload-manifests/featuregates/featureGate-4-10-Hypershift-Default.yaml b/payload-manifests/featuregates/featureGate-4-10-Hypershift-Default.yaml
index ec8522bd04e..ef6936dbd87 100644
--- a/payload-manifests/featuregates/featureGate-4-10-Hypershift-Default.yaml
+++ b/payload-manifests/featuregates/featureGate-4-10-Hypershift-Default.yaml
@@ -161,9 +161,6 @@
{
"name": "IngressComponentRouteLabels"
},
- {
- "name": "IngressControllerMultipleHAProxyVersions"
- },
{
"name": "IrreconcilableMachineConfig"
},
@@ -340,6 +337,9 @@
{
"name": "IngressControllerDynamicConfigurationManager"
},
+ {
+ "name": "IngressControllerMultipleHAProxyVersions"
+ },
{
"name": "InsightsConfig"
},
diff --git a/payload-manifests/featuregates/featureGate-4-10-Hypershift-OKD.yaml b/payload-manifests/featuregates/featureGate-4-10-Hypershift-OKD.yaml
index 70c900d6eeb..39861c608ff 100644
--- a/payload-manifests/featuregates/featureGate-4-10-Hypershift-OKD.yaml
+++ b/payload-manifests/featuregates/featureGate-4-10-Hypershift-OKD.yaml
@@ -163,9 +163,6 @@
{
"name": "IngressComponentRouteLabels"
},
- {
- "name": "IngressControllerMultipleHAProxyVersions"
- },
{
"name": "IrreconcilableMachineConfig"
},
@@ -342,6 +339,9 @@
{
"name": "IngressControllerDynamicConfigurationManager"
},
+ {
+ "name": "IngressControllerMultipleHAProxyVersions"
+ },
{
"name": "InsightsConfig"
},
diff --git a/payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-Default.yaml b/payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-Default.yaml
index 4016cb15783..c9bf9008953 100644
--- a/payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-Default.yaml
+++ b/payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-Default.yaml
@@ -164,9 +164,6 @@
{
"name": "IngressComponentRouteLabels"
},
- {
- "name": "IngressControllerMultipleHAProxyVersions"
- },
{
"name": "IrreconcilableMachineConfig"
},
@@ -331,6 +328,9 @@
{
"name": "IngressControllerDynamicConfigurationManager"
},
+ {
+ "name": "IngressControllerMultipleHAProxyVersions"
+ },
{
"name": "InsightsConfig"
},
diff --git a/payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-OKD.yaml b/payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-OKD.yaml
index 94c9ac3c3ac..629b480ddfa 100644
--- a/payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-OKD.yaml
+++ b/payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-OKD.yaml
@@ -166,9 +166,6 @@
{
"name": "IngressComponentRouteLabels"
},
- {
- "name": "IngressControllerMultipleHAProxyVersions"
- },
{
"name": "IrreconcilableMachineConfig"
},
@@ -333,6 +330,9 @@
{
"name": "IngressControllerDynamicConfigurationManager"
},
+ {
+ "name": "IngressControllerMultipleHAProxyVersions"
+ },
{
"name": "InsightsConfig"
},