USHIFT-6925: Introduce Curves to Ingress and FIPs detection#6622
USHIFT-6925: Introduce Curves to Ingress and FIPs detection#6622eslutsky wants to merge 3 commits intoopenshift:mainfrom
Conversation
Introduce detectFIPS() to check whether the cluster is running in FIPS mode via the FIPS_ENABLED env var or /proc/sys/crypto/fips_enabled. The result is stored in the package-level isFIPSEnabled variable for use by subsequent FIPS-aware configuration logic. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
On FIPS-enabled clusters, remove non-FIPS-compliant TLS 1.3 cipher suites (e.g. TLS_CHACHA20_POLY1305_SHA256) from ROUTER_CIPHERSUITES. HAProxy would fail TLS handshakes when a client offers a non-FIPS cipher that is listed in ssl-default-bind-ciphersuites but excluded by the OS FIPS policy. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Set ROUTER_CURVES on the ingress router deployment to configure TLS supportedGroups. Non-FIPS clusters use X25519MLKEM768:X25519:P-256:P-384:P-521 (including post-quantum ML-KEM). FIPS clusters use P-256:P-384:P-521 only, since ML-KEM and X25519 are not supported by OpenSSL FIPS 140-3. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
Skipping CI for Draft Pull Request. |
|
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: eslutsky The full list of commands accepted by this bot can be found here. The pull request process is described here DetailsNeeds approval from an approver in each of these files:
Approvers can indicate their approval by writing |
WalkthroughThe PR adds FIPS mode detection and conditions TLS configuration on FIPS enablement. When FIPS is active, cipher suites and curves are restricted to FIPS-approved algorithms; non-FIPS mode preserves existing selections. The resulting curve list is passed to the router deployment template. ChangesFIPS-Aware TLS Configuration
Sequence DiagramsequenceDiagram
participant System as System / Environment
participant Controller as Controller Logic
participant TLS as TLS Configuration
participant Template as Deployment Template
System->>Controller: Check FIPS_ENABLED env or /proc/sys/crypto/fips_enabled
Controller->>Controller: Set isFIPSEnabled flag
Controller->>TLS: generateIngressParams()
alt FIPS Enabled
TLS->>TLS: Filter ciphers to fipsApprovedTLS13Ciphers
TLS->>TLS: Remove ML-KEM, X25519 from curve list
else FIPS Disabled
TLS->>TLS: Keep full cipher and curve lists
end
TLS->>Controller: Return tlsCurves value
Controller->>Template: Render with RouterTLSCurves parameter
Template->>Template: Inject ROUTER_CURVES env var
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Important Pre-merge checks failedPlease resolve all errors before merging. Addressing warnings is optional. ❌ Failed checks (1 warning, 1 inconclusive)
✅ Passed checks (10 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Tip 💬 Introducing Slack Agent: The best way for teams to turn conversations into code.Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.
Built for teams:
One agent for your entire SDLC. Right inside Slack. Comment |
There was a problem hiding this comment.
🧹 Nitpick comments (1)
pkg/components/controllers.go (1)
30-31: 💤 Low valuePackage-level FIPS detection executes at init time.
This is evaluated once when the package loads. Acceptable for production but makes unit testing harder—tests cannot easily inject different FIPS states. Consider exposing a test hook or making
isFIPSEnableda function if testability becomes a concern.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@pkg/components/controllers.go` around lines 30 - 31, The package currently initializes a package-level variable isFIPSEnabled by calling detectFIPS() at load time which hinders tests; change this to either (A) replace the variable with a function IsFIPSEnabled() that calls detectFIPS() (and update all call sites that reference isFIPSEnabled), or (B) keep a backed variable but add a test hook SetFIPSEnabledForTest(value bool) and use lazy evaluation (e.g., sync.Once) so tests can override it; update references to use the new function or the setter and ensure detectFIPS remains the production implementation.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Nitpick comments:
In `@pkg/components/controllers.go`:
- Around line 30-31: The package currently initializes a package-level variable
isFIPSEnabled by calling detectFIPS() at load time which hinders tests; change
this to either (A) replace the variable with a function IsFIPSEnabled() that
calls detectFIPS() (and update all call sites that reference isFIPSEnabled), or
(B) keep a backed variable but add a test hook SetFIPSEnabledForTest(value bool)
and use lazy evaluation (e.g., sync.Once) so tests can override it; update
references to use the new function or the setter and ensure detectFIPS remains
the production implementation.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository YAML (base), Central YAML (inherited)
Review profile: CHILL
Plan: Enterprise
Run ID: b3f7424d-471c-407c-ae3a-c14164ec1e36
📒 Files selected for processing (2)
assets/components/openshift-router/deployment.yamlpkg/components/controllers.go
|
/test all |
|
@eslutsky: This pull request references USHIFT-6925 which is a valid jira issue. Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "5.0.0" version, but no target version was set. DetailsIn response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository. |
|
@eslutsky: all tests passed! Full PR test history. Your PR dashboard. DetailsInstructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here. |
Summary by CodeRabbit