GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — feat: Integrate cluster TLS profile with graceful fallback by ugiordan · Pull Request #6567 · feast-dev/feast

Conversation

@ugiordan

@ugiordan ugiordan commented Jun 29, 2026 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Contributor

Summary

Integrate the feast-operator with the cluster-wide TLS security profile from apiservers.config.openshift.io/cluster, with graceful fallback for non-OpenShift clusters.

On OpenShift clusters, the operator reads the admin-configured TLS profile (MinVersion, CipherSuites) and applies it to webhook and metrics servers. On vanilla Kubernetes (EKS, GKE, AKS), it falls back to hardened Intermediate defaults (TLS 1.2, ECDHE AEAD ciphers).

Also removes the enableHTTP2 flag since CVE-2023-44487 (HTTP/2 Rapid Reset) is fixed in Go 1.21.3+ and feast uses Go 1.25+.

Changes

  • cmd/main.go: Fetch TLS profile at startup, apply to webhook and metrics servers, register SecurityProfileWatcher for profile changes, always enable HTTP/2 with NextProtos
  • config/rbac/role.yaml: Add RBAC for config.openshift.io/apiservers get/list/watch
  • go.mod/go.sum: Add controller-runtime-common dependency
  • internal/controller/featurestore_controller.go: Remove enableHTTP2 conditional, always set NextProtos

Non-OpenShift behavior

Graceful fallback via IsNoMatchError/IsNotFound handling. No behavior change for vanilla Kubernetes deployments. No new hard dependencies on OpenShift APIs.

Test plan

  • Build passes
  • Existing tests pass

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@ugiordan @claude
feat(operator): integrate cluster TLS profile for OCP 5.0 compliance
9b4bb30
Read the cluster TLS profile from apiservers.config.openshift.io/cluster
at startup. Apply MinVersion, CipherSuites, and NextProtos to webhook
and metrics server TLS configs. Fail closed on unexpected errors.
Use Intermediate defaults on non-OpenShift clusters.

This ensures the feast-operator honors the cluster-wide TLS security
profile, which is required for OCP 5.0. The implementation gracefully
falls back to hardened defaults (TLS 1.2, ECDHE ciphers) on
non-OpenShift clusters, so it does not break vanilla Kubernetes
deployments.

Signed-off-by: Ugo Giordano <[email protected]>
Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Signed-off-by: Ugo Giordano <[email protected]>
@ugiordan
ugiordan requested a review from a team as a code owner June 29, 2026 14:35
@ntkathole ntkathole changed the title feat(operator): integrate cluster TLS profile for OCP 5.0 compliance feat: Integrate cluster TLS profile for OCP 5.0 compliance Jun 29, 2026
@ntkathole ntkathole added the ok-to-test label Jun 29, 2026
@ugiordan ugiordan mentioned this pull request Jun 29, 2026
feat: integrate with cluster TLS security profile opendatahub-io/feast#146
Closed
5 tasks
@ugiordan ugiordan changed the title feat: Integrate cluster TLS profile for OCP 5.0 compliance feat(operator): integrate cluster TLS profile with graceful fallback Jun 29, 2026
ntkathole
ntkathole approved these changes Jun 29, 2026
View reviewed changes
@ntkathole ntkathole changed the title feat(operator): integrate cluster TLS profile with graceful fallback feat: Integrate cluster TLS profile with graceful fallback Jun 29, 2026
@ntkathole
ntkathole merged commit 43263a6 into feast-dev:master Jun 29, 2026
38 of 40 checks passed

Uh oh!

There was an error while loading. Please reload this page.

@ugiordan ugiordan mentioned this pull request Jul 7, 2026
feat: Apply Intermediate TLS defaults on API fallback and handle transient errors #6587
Merged
ugiordan added a commit to ugiordan/feast that referenced this pull request Jul 7, 2026
@ugiordan @claude
feat: apply Intermediate TLS defaults on API fallback and handle tran…
e3c4048
…sient errors

Follow-up to feast-dev#6567. Two fixes:

1. Move NewTLSConfigFromProfile outside the if/else so it runs on all
   code paths. Previously, error paths skipped TLS configuration entirely,
   leaving the operator running with Go's bare defaults (no MinVersion,
   no cipher restrictions). Now all error paths explicitly fall back to
   the Intermediate TLS profile.

2. Handle transient API errors (ServiceUnavailable, Timeout,
   TooManyRequests) gracefully instead of crashing with os.Exit(1).
   These set tlsProfileFetched=true so the SecurityProfileWatcher
   self-heals when the API recovers.

Also adds a 10-second context timeout on bootstrap API calls and applies
the same transient error handling to the TLS adherence policy fetch.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Signed-off-by: Ugo Giordano <[email protected]>
ugiordan added a commit to ugiordan/feast that referenced this pull request Jul 7, 2026
@ugiordan @claude
feat: apply Intermediate TLS defaults on API fallback and handle tran…
429ac39
…sient errors

Follow-up to feast-dev#6567. Two fixes:

1. Move NewTLSConfigFromProfile outside the if/else so it runs on all
   code paths. Previously, error paths skipped TLS configuration entirely,
   leaving the operator running with Go's bare defaults (no MinVersion,
   no cipher restrictions). Now all error paths explicitly fall back to
   the Intermediate TLS profile.

2. Handle transient API errors (ServiceUnavailable, Timeout,
   TooManyRequests) gracefully instead of crashing with os.Exit(1).
   These set tlsProfileFetched=true so the SecurityProfileWatcher
   self-heals when the API recovers.

Also adds a 10-second context timeout on bootstrap API calls and applies
the same transient error handling to the TLS adherence policy fetch.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Signed-off-by: Ugo Giordano <[email protected]>
ugiordan added a commit to ugiordan/feast that referenced this pull request Jul 7, 2026
@ugiordan @claude
feat: apply Intermediate TLS defaults on API fallback and handle tran…
846c5a6
…sient errors

Follow-up to feast-dev#6567. Two fixes:

1. Move NewTLSConfigFromProfile outside the if/else so it runs on all
   code paths. Previously, error paths skipped TLS configuration entirely,
   leaving the operator running with Go's bare defaults (no MinVersion,
   no cipher restrictions). Now all error paths explicitly fall back to
   the Intermediate TLS profile.

2. Handle transient API errors (ServiceUnavailable, Timeout,
   TooManyRequests) gracefully instead of crashing with os.Exit(1).
   These set tlsProfileFetched=true so the SecurityProfileWatcher
   self-heals when the API recovers.

Also adds a 10-second context timeout on bootstrap API calls and applies
the same transient error handling to the TLS adherence policy fetch.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Signed-off-by: Ugo Giordano <[email protected]>
ugiordan added a commit to ugiordan/feast that referenced this pull request Jul 7, 2026
@ugiordan @claude
feat: apply Intermediate TLS defaults on API fallback and handle tran…
60296ac
…sient errors

Follow-up to feast-dev#6567. Two fixes:

1. Move NewTLSConfigFromProfile outside the if/else so it runs on all
   code paths. Previously, error paths skipped TLS configuration entirely,
   leaving the operator running with Go's bare defaults (no MinVersion,
   no cipher restrictions). Now all error paths explicitly fall back to
   the Intermediate TLS profile.

2. Handle transient API errors (ServiceUnavailable, Timeout,
   TooManyRequests) gracefully instead of crashing with os.Exit(1).
   These set tlsProfileFetched=true so the SecurityProfileWatcher
   self-heals when the API recovers.

Also adds a 10-second context timeout on bootstrap API calls and applies
the same transient error handling to the TLS adherence policy fetch.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Signed-off-by: Ugo Giordano <[email protected]>
ugiordan added a commit to ugiordan/feast that referenced this pull request Jul 8, 2026
@ugiordan @claude
feat: apply Intermediate TLS defaults on API fallback and handle tran…
1375b6f
…sient errors

Follow-up to feast-dev#6567. Two fixes:

1. Move NewTLSConfigFromProfile outside the if/else so it runs on all
   code paths. Previously, error paths skipped TLS configuration entirely,
   leaving the operator running with Go's bare defaults (no MinVersion,
   no cipher restrictions). Now all error paths explicitly fall back to
   the Intermediate TLS profile.

2. Handle transient API errors (ServiceUnavailable, Timeout,
   TooManyRequests) gracefully instead of crashing with os.Exit(1).
   These set tlsProfileFetched=true so the SecurityProfileWatcher
   self-heals when the API recovers.

Also adds a 10-second context timeout on bootstrap API calls and applies
the same transient error handling to the TLS adherence policy fetch.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Signed-off-by: Ugo Giordano <[email protected]>
ugiordan added a commit to ugiordan/feast that referenced this pull request Jul 9, 2026
@ugiordan @claude
feat: apply Intermediate TLS defaults on API fallback and handle tran…
748ecc5
…sient errors

Follow-up to feast-dev#6567. Two fixes:

1. Move NewTLSConfigFromProfile outside the if/else so it runs on all
   code paths. Previously, error paths skipped TLS configuration entirely,
   leaving the operator running with Go's bare defaults (no MinVersion,
   no cipher restrictions). Now all error paths explicitly fall back to
   the Intermediate TLS profile.

2. Handle transient API errors (ServiceUnavailable, Timeout,
   TooManyRequests) gracefully instead of crashing with os.Exit(1).
   These set tlsProfileFetched=true so the SecurityProfileWatcher
   self-heals when the API recovers.

Also adds a 10-second context timeout on bootstrap API calls and applies
the same transient error handling to the TLS adherence policy fetch.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Signed-off-by: Ugo Giordano <[email protected]>
ntkathole pushed a commit to ugiordan/feast that referenced this pull request Jul 14, 2026
@ugiordan @claude @ntkathole
feat: apply Intermediate TLS defaults on API fallback and handle tran…
fe29daa
…sient errors

Follow-up to feast-dev#6567. Two fixes:

1. Move NewTLSConfigFromProfile outside the if/else so it runs on all
   code paths. Previously, error paths skipped TLS configuration entirely,
   leaving the operator running with Go's bare defaults (no MinVersion,
   no cipher restrictions). Now all error paths explicitly fall back to
   the Intermediate TLS profile.

2. Handle transient API errors (ServiceUnavailable, Timeout,
   TooManyRequests) gracefully instead of crashing with os.Exit(1).
   These set tlsProfileFetched=true so the SecurityProfileWatcher
   self-heals when the API recovers.

Also adds a 10-second context timeout on bootstrap API calls and applies
the same transient error handling to the TLS adherence policy fetch.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Signed-off-by: Ugo Giordano <[email protected]>
@ugiordan ugiordan mentioned this pull request Jul 16, 2026
fix: handle transient errors and IsServerTimeout in TLS profile resolution opendatahub-io/feast#160
Closed
ugiordan added a commit to ugiordan/feast that referenced this pull request Jul 16, 2026
@ugiordan @claude
feat: apply Intermediate TLS defaults on API fallback and handle tran…
b22a53a
…sient errors

Follow-up to feast-dev#6567. Two fixes:

1. Move NewTLSConfigFromProfile outside the if/else so it runs on all
   code paths. Previously, error paths skipped TLS configuration entirely,
   leaving the operator running with Go's bare defaults (no MinVersion,
   no cipher restrictions). Now all error paths explicitly fall back to
   the Intermediate TLS profile.

2. Handle transient API errors (ServiceUnavailable, Timeout,
   TooManyRequests) gracefully instead of crashing with os.Exit(1).
   These set tlsProfileFetched=true so the SecurityProfileWatcher
   self-heals when the API recovers.

Also adds a 10-second context timeout on bootstrap API calls and applies
the same transient error handling to the TLS adherence policy fetch.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Signed-off-by: Ugo Giordano <[email protected]>
ugiordan added a commit to ugiordan/feast that referenced this pull request Jul 24, 2026
@ugiordan
fix: handle transient API errors and improve TLS profile fallback
4636f78
Follow-up to feast-dev#6567. Fixes two issues in the TLS profile integration:

1. Else-only pattern: NewTLSConfigFromProfile was only called in the
   success branch of the TLS profile fetch. On any error path
   (non-OpenShift cluster, resource not found), no TLS config was
   applied, leaving the operator running with Go's bare defaults
   (no MinVersion, no cipher restrictions). This PR moves
   NewTLSConfigFromProfile outside the if/else and explicitly falls
   back to Intermediate on all error paths.

2. No transient error handling: The error switch only handled
   IsNotFound and IsNoMatchError. Transient API errors
   (ServiceUnavailable, Timeout, ServerTimeout, TooManyRequests,
   context.DeadlineExceeded) hit the default case and crashed the
   operator with os.Exit(1). This PR adds a dedicated case for these
   errors with a graceful Intermediate fallback. tlsProfileFetched is
   set to true so the SecurityProfileWatcher self-heals when the API
   recovers.

Signed-off-by: Ugo Giordano <[email protected]>
ugiordan added a commit to ugiordan/feast that referenced this pull request Jul 29, 2026
@ugiordan
fix: handle transient API errors and improve TLS profile fallback
7f2abf8
Follow-up to feast-dev#6567. Fixes two issues in the TLS profile integration:

1. Else-only pattern: NewTLSConfigFromProfile was only called in the
   success branch of the TLS profile fetch. On any error path
   (non-OpenShift cluster, resource not found), no TLS config was
   applied, leaving the operator running with Go's bare defaults
   (no MinVersion, no cipher restrictions). This PR moves
   NewTLSConfigFromProfile outside the if/else and explicitly falls
   back to Intermediate on all error paths.

2. No transient error handling: The error switch only handled
   IsNotFound and IsNoMatchError. Transient API errors
   (ServiceUnavailable, Timeout, ServerTimeout, TooManyRequests,
   context.DeadlineExceeded) hit the default case and crashed the
   operator with os.Exit(1). This PR adds a dedicated case for these
   errors with a graceful Intermediate fallback. tlsProfileFetched is
   set to true so the SecurityProfileWatcher self-heals when the API
   recovers.

Signed-off-by: Ugo Giordano <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@ntkathole ntkathole ntkathole approved these changes

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

ok-to-test

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

2 participants

@ugiordan @ntkathole
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.