Skip to content

CNTRLPLANE-2012: Add PKI config types, validation, and CR manifest generation#10593

Open
hasbro17 wants to merge 1 commit into
openshift:mainfrom
hasbro17:pki-1-types-and-manifest
Open

CNTRLPLANE-2012: Add PKI config types, validation, and CR manifest generation#10593
hasbro17 wants to merge 1 commit into
openshift:mainfrom
hasbro17:pki-1-types-and-manifest

Conversation

@hasbro17

@hasbro17 hasbro17 commented Jun 3, 2026

Copy link
Copy Markdown
Contributor

Summary

Part 1 of splitting #10396 into smaller, independently reviewable PRs.

This PR adds the configurable PKI API surface behind the ConfigurablePKI feature gate:

  • Types: PKIConfig, CertificateConfig, KeyConfig and related types on InstallConfig.PKI
  • Validation: ValidatePKIConfig() validates algorithm, key size, and curve parameters (FIPS-aware)
  • Feature gate: ConfigurablePKI registered as a TechPreview gate
  • CRD schema: install-config.yaml schema updated with pki field
  • PKI CR manifest: When the gate is active, generates a config.openshift.io/v1alpha1 PKI custom resource (cluster-pki-02-config.yaml) for day-2 operator certificate rotation
  • Defaults: DefaultPKIProfile() uses RSA-4096 until day-2 operators (CKAO, CKMO) support ECDSA rotation

No certificate generation changes — all certs remain RSA-2048. Non-TechPreview clusters are completely unaffected.

PR chain

  1. This PR — PKI types, validation, CRD, feature gate, PKI CR manifest
  2. CNTRLPLANE-2012: Refactor TLS cert generation to support configurable key algorithms #10594 —TLS engine refactoring (configurable key algorithm support)
  3. CNTRLPLANE-2012: Wire signer certs to read PKI config via SignerKeyParams #10595 — Wire signer certs + SignerKeyParams
  4. Documentation

Summary by CodeRabbit

  • New Features

    • Add a configurable PKI section to InstallConfig for signer certificate parameters (RSA or ECDSA); installer emits PKI manifests when the ConfigurablePKI feature is enabled.
    • CLI long-field output now documents the PKI section.
  • Tests

    • Added unit and integration tests for PKI defaults, conversion, validation rules, manifest generation, and feature-gate behavior.

@openshift-ci-robot

openshift-ci-robot commented Jun 3, 2026

Copy link
Copy Markdown
Contributor

@hasbro17: This pull request references CNTRLPLANE-2012 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 either version "5.0." or "openshift-5.0.", but it targets "openshift-4.22" instead.

Details

In response to this:

Summary

Part 1 of splitting #10396 into smaller, independently reviewable PRs.

This PR adds the configurable PKI API surface behind the ConfigurablePKI feature gate:

  • Types: PKIConfig, CertificateConfig, KeyConfig and related types on InstallConfig.PKI
  • Validation: ValidatePKIConfig() validates algorithm, key size, and curve parameters (FIPS-aware)
  • Feature gate: ConfigurablePKI registered as a TechPreview gate
  • CRD schema: install-config.yaml schema updated with pki field
  • PKI CR manifest: When the gate is active, generates a config.openshift.io/v1alpha1 PKI custom resource (cluster-pki-02-config.yaml) for day-2 operator certificate rotation
  • Defaults: DefaultPKIProfile() uses RSA-4096 until day-2 operators (CKAO, CKMO) support ECDSA rotation

No certificate generation changes — all certs remain RSA-2048. Non-TechPreview clusters are completely unaffected.

PR chain

  1. This PR — PKI types, validation, CRD, feature gate, PKI CR manifest
  2. TLS engine refactoring (configurable key algorithm support)
  3. Wire signer certs + SignerKeyParams
  4. Documentation

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.

@openshift-ci-robot openshift-ci-robot added the jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. label Jun 3, 2026
@coderabbitai

coderabbitai Bot commented Jun 3, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: a80fc678-8d09-4db7-8e34-84f60cfd7d5e

📥 Commits

Reviewing files that changed from the base of the PR and between 6f6a58a and 3d195a4.

⛔ Files ignored due to path filters (1)
  • pkg/types/zz_generated.deepcopy.go is excluded by !**/zz_generated*
📒 Files selected for processing (17)
  • data/data/install.openshift.io_installconfigs.yaml
  • pkg/asset/manifests/operators.go
  • pkg/asset/manifests/pki.go
  • pkg/asset/manifests/pki_test.go
  • pkg/explain/printer_test.go
  • pkg/types/defaults/installconfig.go
  • pkg/types/installconfig.go
  • pkg/types/pki/conversion.go
  • pkg/types/pki/conversion_test.go
  • pkg/types/pki/defaults.go
  • pkg/types/pki/defaults_test.go
  • pkg/types/pki/validation.go
  • pkg/types/pki/validation_test.go
  • pkg/types/validation/featuregate_test.go
  • pkg/types/validation/featuregates.go
  • pkg/types/validation/installconfig.go
  • pkg/types/validation/installconfig_test.go
✅ Files skipped from review due to trivial changes (2)
  • pkg/types/defaults/installconfig.go
  • pkg/explain/printer_test.go
🚧 Files skipped from review as they are similar to previous changes (12)
  • pkg/types/pki/conversion.go
  • pkg/types/validation/installconfig_test.go
  • pkg/asset/manifests/pki_test.go
  • pkg/types/validation/installconfig.go
  • pkg/asset/manifests/operators.go
  • pkg/types/validation/featuregates.go
  • pkg/types/pki/validation_test.go
  • pkg/types/installconfig.go
  • pkg/asset/manifests/pki.go
  • pkg/types/pki/validation.go
  • data/data/install.openshift.io_installconfigs.yaml
  • pkg/types/validation/featuregate_test.go

Walkthrough

Adds feature-gated configurable PKI: InstallConfig types and CRD schema, defaults and conversion to upstream PKI profile, validation and feature-gate wiring, a manifest asset to emit a PKI CR, and tests/print output updates.

Changes

Configurable PKI Support

Layer / File(s) Summary
PKI Type Contracts
pkg/types/installconfig.go
InstallConfig gains optional PKI field with nested types: PKIConfigCertificateConfigKeyConfig (RSA/ECDSA union). KeyAlgorithm enum (RSA, ECDSA) and ECDSACurve enum (P256, P384, P521) define allowed values; kubebuilder XValidation enforces algorithm/subfield mutual exclusivity.
CRD Schema Enforcement
data/data/install.openshift.io_installconfigs.yaml
CRD schema for pki section mirrors the type contract with signerCertificates.key.algorithm, required RSA key size or ECDSA curve, and x-kubernetes-validations rules enforcing correct key object presence by algorithm.
PKI Defaults and Conversion
pkg/types/pki/defaults.go, pkg/types/pki/conversion.go, pkg/types/pki/*_test.go
DefaultPKIProfile() returns RSA-4096 for defaults and signer certs; CertificateConfigToUpstream() maps installer-local certificate config to upstream PKI CR types. Unit tests validate defaults and conversion YAML output.
PKI Validation Rules
pkg/types/pki/validation.go, pkg/types/pki/validation_test.go
ValidatePKIConfig/ValidateKeyConfig require algorithm, enforce RSA/ECDSA mutual exclusivity, validate RSA key sizes (2048–8192, multiple of 1024) and ECDSA curves (P256/P384/P521). Tests cover valid and invalid key configs.
Feature-gate Enforcement
pkg/types/validation/featuregates.go, pkg/types/validation/featuregate_test.go
PKI field is marked for ConfigurablePKI feature-gate validation; tests verify behavior when the gate is missing or present under different feature set combinations.
InstallConfig Validation Integration
pkg/types/validation/installconfig.go, pkg/types/validation/installconfig_test.go
ValidateInstallConfig invokes PKI validation when c.PKI is set and the ConfigurablePKI gate is enabled. Tests include valid ECDSA signer config and failure cases for unsupported algorithm and invalid RSA key size.
PKI Manifest Generation
pkg/asset/manifests/pki.go, pkg/asset/manifests/pki_test.go, pkg/asset/manifests/operators.go
PKIConfiguration asset generates manifests/cluster-pki-02-config.yaml PKI CR when the feature gate is enabled (default or custom PKIProfile). Integrated into Manifests dependencies and file collection; tests verify gating and CR contents.
User-Facing Explain Output & Minor Formatting
pkg/explain/printer_test.go, pkg/types/defaults/installconfig.go
InstallConfig explain output updated to include a pki <object> FIELDS block; a single formatting blank-line was added in installconfig defaults.

🎯 3 (Moderate) | ⏱️ ~25 minutes

🚥 Pre-merge checks | ✅ 13 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 41.18% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Test Structure And Quality ❓ Inconclusive Custom check specifies Ginkgo test code, but PR uses standard Go testing with t.Run patterns. Check instructions (BeforeEach, Eventually, Consistently) are Ginkgo-specific, not applicable here. Clarify if check applies to standard Go tests. If yes: tests are good—table-driven with no cluster interactions, proper error handling, some have assertion messages.
✅ Passed checks (13 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title directly and specifically summarizes the main change: adding PKI configuration types, validation logic, and Custom Resource manifest generation for the OpenShift installer.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Stable And Deterministic Test Names ✅ Passed All test case names are stable and deterministic with static descriptive strings. No dynamic values, timestamps, UUIDs, or Ginkgo framework patterns found.
Microshift Test Compatibility ✅ Passed No Ginkgo e2e tests were added; all new/modified tests are standard Go unit tests using testing.T, making this check not applicable.
Single Node Openshift (Sno) Test Compatibility ✅ Passed No Ginkgo e2e tests added in this PR. Only standard Go unit tests were added/modified, making the SNO compatibility check not applicable.
Topology-Aware Scheduling Compatibility ✅ Passed PR adds PKI configuration types, validation, and custom resource manifest generation. No deployment manifests, pod specs, or scheduling constraints are introduced.
Ote Binary Stdout Contract ✅ Passed No process-level stdout writes found in new PKI code. All validation, asset generation, and types use pure functions returning error lists or data, without klog/fmt.Print/os.Stdout.
Ipv6 And Disconnected Network Test Compatibility ✅ Passed PR adds no Ginkgo e2e tests. All new tests are Go unit tests using standard testing.T pattern, not Ginkgo (no Describe/It/Context patterns found).
No-Weak-Crypto ✅ Passed PR uses only strong algorithms: RSA 2048-8192 bits, ECDSA P256/P384/P521. No weak algorithms, custom crypto, or insecure comparisons detected.
Container-Privileges ✅ Passed PR adds PKI config types and CR manifest generation; no privileged container settings (privileged, hostPID, hostNetwork, hostIPC, SYS_ADMIN, allowPrivilegeEscalation) introduced.
No-Sensitive-Data-In-Logs ✅ Passed New PKI-related code contains zero logging statements, and PKI config contains only non-sensitive metadata (algorithm names, key sizes, curve names), not secrets or PII.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 golangci-lint (2.12.2)

Error: can't load config: unsupported version of the configuration: "" See https://golangci-lint.run/docs/product/migration-guide for migration instructions
The command is terminated due to an error: can't load config: unsupported version of the configuration: "" See https://golangci-lint.run/docs/product/migration-guide for migration instructions


Comment @coderabbitai help to get the list of available commands and usage tips.

@openshift-ci openshift-ci Bot requested review from barbacbd and tthvo June 3, 2026 18:34
@openshift-ci

openshift-ci Bot commented Jun 3, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign barbacbd for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🧹 Nitpick comments (2)
pkg/types/pki/validation.go (1)

12-116: ⚡ Quick win

Make the fips flag meaningful or remove it for now.

fips is threaded through every PKI validator here but never read, so FIPS-enabled installs currently accept the exact same algorithms, key sizes, and curves as non-FIPS installs. That leaves the validator contract misleading and the FIPS-specific path effectively unimplemented.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pkg/types/pki/validation.go` around lines 12 - 116, The fips boolean is never
used — either remove it from the PKI validator signatures or make it enforce
FIPS-safe choices; implement the latter: use the existing fips parameter in
ValidateKeyConfig, validateRSAKeyConfig, and validateECDSAKeyConfig to tighten
accepted values when fips==true (e.g. in validateRSAKeyConfig, require a larger
minimum RSA keySize when fips is true such as >=3072 and still multiples of
1024; in validateECDSAKeyConfig, disallow non-FIPS curves like P521 when fips is
true and limit to P256/P384; and in ValidateKeyConfig ensure the
Forbidden/Required checks still apply under the fips branch), keeping the same
function names (ValidatePKIConfig, ValidateKeyConfig, validateRSAKeyConfig,
validateECDSAKeyConfig) so callers remain consistent.
pkg/asset/manifests/pki_test.go (1)

140-142: 💤 Low value

Consider verifying the Custom field is nil/empty in Default mode.

The test correctly checks that the mode is Default, but doesn't verify that the Custom field is nil or empty. While checking the mode is sufficient, explicitly asserting pkiCR.Spec.CertificateManagement.Custom is empty would make the test more thorough.

Optional test enhancement
 			if tc.expectMode != configv1alpha1.PKICertificateManagementModeCustom {
+				assert.Empty(t, pkiCR.Spec.CertificateManagement.Custom)
 				return
 			}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pkg/asset/manifests/pki_test.go` around lines 140 - 142, The test currently
returns early when tc.expectMode !=
configv1alpha1.PKICertificateManagementModeCustom; add an explicit assertion for
the Default case to verify pkiCR.Spec.CertificateManagement.Custom is nil/empty.
Locate the check around tc.expectMode and after confirming the mode is Default,
assert that pkiCR.Spec.CertificateManagement.Custom is nil or has zero length
(using t.Fatalf/t.Errorf or your test assertion helper) to make the test more
thorough.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@data/data/install.openshift.io_installconfigs.yaml`:
- Around line 5088-5098: The description for installConfig.pki currently states
signerCertificates affects "all installer-generated certificate authority (CA)
certificates" which is incorrect for this PR; update the text in the YAML
properties for signerCertificates (and any parent description referencing
installConfig.pki and ConfigurablePKI) to clearly state that the PKI block is
emitted for day-2 rotation/rotation operations and does not change
installer-time certificate generation, and mention the feature gate
ConfigurablePKI as controlling emission for rotation only so oc explain
consumers are not misled.

In `@pkg/types/pki/defaults.go`:
- Around line 41-50: EffectiveSignerPKIConfig() is hardcoding RSA-4096 signer
defaults instead of deriving them from the single source of truth
DefaultPKIProfile(); update EffectiveSignerPKIConfig() to construct its returned
*types.PKIConfig by reading DefaultPKIProfile().SignerCertificates (and nested
Key/Key.RSA fields) rather than re-encoding literal RSA-4096 values so future
changes to DefaultPKIProfile() automatically propagate to the signer path.

In `@pkg/types/validation/installconfig_test.go`:
- Around line 3121-3134: The test case "invalid PKI signer with unsupported
algorithm" is missing the TechPreview feature gate for ConfigurablePKI; update
the installConfig builder (the anonymous func returning *types.InstallConfig) to
set c.FeatureSet = configv1.TechPreviewNoUpgrade so the PKI field validation
executes, or alternatively change expectedError to the feature-gate validation
message you use elsewhere (i.e., assert a feature-gate error) — adjust either
the installConfig() setup or expectedError to consistently reflect whether
ConfigurablePKI is enabled; check symbols: types.InstallConfig, c.PKI
(types.PKIConfig), and c.FeatureSet (configv1.TechPreviewNoUpgrade).
- Around line 3136-3150: The test case creates an InstallConfig via the inline
installConfig func that sets c.PKI but does not enable the tech-preview feature
gate; to match the other PKI tests and exercise the PKI validation path, update
that inline function (the one calling validInstallConfig() and setting c.PKI /
types.PKIConfig) to also set c.FeatureSet = configv1.TechPreviewNoUpgrade (same
as in the test around line 3108) so the PKI field validation is executed; update
imports if needed to reference configv1.TechPreviewNoUpgrade.

In `@pkg/types/validation/installconfig.go`:
- Around line 288-290: ValidateInstallConfig currently validates c.PKI via
pkivalidation.ValidatePKIConfig(c.PKI, field.NewPath("pki"), c.FIPS) before
feature-gate checks, causing duplicate/noisy errors when ConfigurablePKI is
disabled; change the flow so PKI content validation only runs if the
ConfigurablePKI feature is enabled (i.e. after or guarded by
ValidateFeatureSet/feature-gate check), by wrapping the existing c.PKI
validation block with the feature-gate condition or moving that call to after
ValidateFeatureSet so that ValidatePKIConfig is invoked only when the
ConfigurablePKI gate allows it.

---

Nitpick comments:
In `@pkg/asset/manifests/pki_test.go`:
- Around line 140-142: The test currently returns early when tc.expectMode !=
configv1alpha1.PKICertificateManagementModeCustom; add an explicit assertion for
the Default case to verify pkiCR.Spec.CertificateManagement.Custom is nil/empty.
Locate the check around tc.expectMode and after confirming the mode is Default,
assert that pkiCR.Spec.CertificateManagement.Custom is nil or has zero length
(using t.Fatalf/t.Errorf or your test assertion helper) to make the test more
thorough.

In `@pkg/types/pki/validation.go`:
- Around line 12-116: The fips boolean is never used — either remove it from the
PKI validator signatures or make it enforce FIPS-safe choices; implement the
latter: use the existing fips parameter in ValidateKeyConfig,
validateRSAKeyConfig, and validateECDSAKeyConfig to tighten accepted values when
fips==true (e.g. in validateRSAKeyConfig, require a larger minimum RSA keySize
when fips is true such as >=3072 and still multiples of 1024; in
validateECDSAKeyConfig, disallow non-FIPS curves like P521 when fips is true and
limit to P256/P384; and in ValidateKeyConfig ensure the Forbidden/Required
checks still apply under the fips branch), keeping the same function names
(ValidatePKIConfig, ValidateKeyConfig, validateRSAKeyConfig,
validateECDSAKeyConfig) so callers remain consistent.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 1ba2c9a4-d566-448c-9f76-1b7ae60ac656

📥 Commits

Reviewing files that changed from the base of the PR and between d3fba60 and f1faa3f.

⛔ Files ignored due to path filters (1)
  • pkg/types/zz_generated.deepcopy.go is excluded by !**/zz_generated*
📒 Files selected for processing (16)
  • data/data/install.openshift.io_installconfigs.yaml
  • pkg/asset/manifests/operators.go
  • pkg/asset/manifests/pki.go
  • pkg/asset/manifests/pki_test.go
  • pkg/explain/printer_test.go
  • pkg/types/defaults/installconfig.go
  • pkg/types/installconfig.go
  • pkg/types/pki/conversion.go
  • pkg/types/pki/defaults.go
  • pkg/types/pki/defaults_test.go
  • pkg/types/pki/validation.go
  • pkg/types/pki/validation_test.go
  • pkg/types/validation/featuregate_test.go
  • pkg/types/validation/featuregates.go
  • pkg/types/validation/installconfig.go
  • pkg/types/validation/installconfig_test.go

Comment thread data/data/install.openshift.io_installconfigs.yaml
Comment thread pkg/types/pki/defaults.go Outdated
Comment thread pkg/types/validation/installconfig_test.go
Comment thread pkg/types/validation/installconfig_test.go
Comment thread pkg/types/validation/installconfig.go Outdated
Comment on lines +14 to +16
RSA: configv1alpha1.RSAKeyConfig{KeySize: local.Key.RSA.KeySize},
ECDSA: configv1alpha1.ECDSAKeyConfig{Curve: configv1alpha1.ECDSACurve(local.Key.ECDSA.Curve)},
},

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we have a test run the output through yaml.Marshall and confirms only one is set? Or, check Algorithm before setting only one of either RSA/ECDSA? I think this is ok thanks to omitzero, but a test or explicitly check might add clarity.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Makes sense, I'll add a new test in conversion_test.go to marshal the converted output and confirm only the relevant key config appears (RSA output omits ecdsa:, ECDSA output omits rsa:). So if our omitzero reliance breaks we'll know.

Comment thread pkg/types/pki/defaults.go
// ECDSA certificate rotation. Once operator support lands, switch to ECDSA P-384
// signers and ECDSA P-256 defaults to match the upstream library-go profile:
// https://github.com/openshift/library-go/blob/12d8376369b7c5b76f688d01089882ca28e351c3/pkg/pki/profile.go#L11-L26
func DefaultPKIProfile() configv1alpha1.PKIProfile {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider removing this entire file from this PR. Just return the config below in PKIConfiguration.Generate for now. I have comments about EffectiveSignerPKIConfig , but it moke no sense if its not being called yet.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For DefaultPKIProfile() the manifest generator uses it now, and PR 3 will use it via EffectiveSignerPKIConfig(). Defining it in the manifest generator and then extracting it later is just code churn for no gain.

It's the single source of truth for the default profile, shared between the manifest generator (this PR) and the TLS layer so I'd rather define it more explicitly for when the time comes to change it or migrate off from it to something defined in openshift/api as Ben alluded to. Or if we end up sharing the defaults from library-go.

Happy to move EffectiveSignerPKIConfig() and related tests to PR 3 though.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done, moved EffectiveSignerPKIConfig() to PR 3.

Add the configurable PKI API surface to InstallConfig behind the
ConfigurablePKI feature gate. When the gate is active, the installer
generates a config.openshift.io/v1alpha1 PKI custom resource manifest
that day-2 operators use for certificate rotation parameters.

The default PKI profile uses RSA-4096 until all day-2 operators (CKAO,
CKMO, etc.) support ECDSA rotation. When pki is not specified in
install-config the PKI CR uses mode: Default. When pki is specified the
PKI CR uses mode: Custom with DefaultPKIProfile as the base and user
signerCertificates overrides layered on top.

No certificate generation changes are included — all certs remain
RSA-2048. Non-TechPreview clusters are completely unaffected.

Assisted-by: Claude Code (Opus 4.6)
@hasbro17 hasbro17 force-pushed the pki-1-types-and-manifest branch from 6f6a58a to 3d195a4 Compare June 8, 2026 18:45
@openshift-ci

openshift-ci Bot commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

@hasbro17: The following tests failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name Commit Details Required Rerun command
ci/prow/golint 3d195a4 link true /test golint
ci/prow/gofmt 3d195a4 link true /test gofmt

Full PR test history. Your PR dashboard.

Details

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 kubernetes-sigs/prow repository. I understand the commands that are listed here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

jira/valid-reference Indicates that this PR references a valid Jira ticket of any type.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants