Skip to content

CNTRLPLANE-2012: Wire signer certs to read PKI config via SignerKeyParams#10595

Open
hasbro17 wants to merge 1 commit into
openshift:mainfrom
hasbro17:pki-3-signer-wiring
Open

CNTRLPLANE-2012: Wire signer certs to read PKI config via SignerKeyParams#10595
hasbro17 wants to merge 1 commit into
openshift:mainfrom
hasbro17:pki-3-signer-wiring

Conversation

@hasbro17

@hasbro17 hasbro17 commented Jun 3, 2026

Copy link
Copy Markdown
Contributor

Summary

Part 3 of splitting #10396 into smaller PRs. Depends on #10593 and #10594.

Wires all 11 signer certificates to read PKI configuration for configurable key algorithms.

Problem

6 of these signers previously had zero dependencies — adding InstallConfig as a dependency would break agent-based installer (ABI) codepaths that generate signer certs without an install-config on disk (e.g.
agent create certificates used by set-node-zero.sh, node-joiner add-nodes). It would also pull in standard InstallConfig validation, rejecting configs that are valid under the agent flow's more lenient
OptionalInstallConfig rules (e.g. vSphere without credentials).

Solution

We introduce SignerKeyParams — a WritableAsset with zero dependencies that reads install-config.yaml via AssetBase.LoadFromFile (strict YAML, deprecated field conversion, defaults) and resolves the
effective PKI config via EffectiveSignerPKIConfig(). When no install-config is found, Load() returns (false, nil) so the asset store falls back to the state file between multi-step invocations (e.g.
create manifests followed by create cluster, where install-config.yaml is consumed after the first step). In the agent flow where neither file nor state exists, Generate() leaves PKIConfig nil
(RSA-2048).

SignerKeyParams is explicitly added to the Manifests and agent target asset lists so that its PKIConfig is persisted to the state file, ensuring correct key algorithms in multi-step flows where
install-config.yaml is consumed between commands.

6 previously zero-dep signers — now depend on SignerKeyParams:

  • AdminKubeConfigSignerCertKey
  • KubeAPIServerLocalhostSignerCertKey
  • KubeAPIServerServiceNetworkSignerCertKey
  • KubeAPIServerLBSignerCertKey
  • RootCA
  • KubeletBootstrapCertSigner

5 signers that already depended on InstallConfig — now use EffectiveSignerPKIConfig() to resolve the effective PKI config including feature gate defaults:

  • KubeAPIServerToKubeletSignerCertKey
  • AggregatorCA
  • AggregatorSignerCertKey
  • KubeControlPlaneSignerCertKey
  • KubeletCSRSignerCertKey

With TechPreview enabled and no explicit pki config, all signer certs are generated with RSA-4096 (the current DefaultPKIProfile default). Without TechPreview, all certs remain RSA-2048.

PR chain

  1. CNTRLPLANE-2012: Add PKI config types, validation, and CR manifest generation #10593 — 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
  3. This PR — Wire signer certs + SignerKeyParams
  4. Documentation

@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
@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 3 of splitting #10396 into smaller PRs. Depends on #10593 and #10594.

Wires all 11 signer certificates to read PKI configuration for configurable key algorithms

Problem

The challenge is that 6 of these signers previously had zero dependencies — adding InstallConfig as a dependency
would break agent-based installer (ABI) codepaths that generate signer certs without an install-config on disk (e.g. agent create certificates used by set-node-zero.sh, node-joiner add-nodes). It would
also pull in standard InstallConfig validation, rejecting configs that are valid under the agent flow's more lenient OptionalInstallConfig rules (e.g. vSphere without credentials).

Solution

To solve this, we introduce SignerKeyParams — a WritableAsset with zero dependencies that reads install-config.yaml directly from disk, extracts only the PKI and FeatureSet fields, and resolves the
effective PKI config via EffectiveSignerPKIConfig(). When no install-config is present, it defaults to nil (RSA-2048).

6 previously zero-dep signers — now depend on SignerKeyParams:

  • AdminKubeConfigSignerCertKey
  • KubeAPIServerLocalhostSignerCertKey
  • KubeAPIServerLBSignerCertKey
  • RootCA
  • KubeletBootstrapCertSigner

5 signers that already depended on InstallConfig — now use EffectiveSignerPKIConfig() to resolve the effective PKI config including feature gate defaults:

  • KubeAPIServerToKubeletSignerCertKey
  • AggregatorCA
  • AggregatorSignerCertKey
  • KubeControlPlaneSignerCertKey
  • KubeletCSRSignerCertKey

With TechPreview enabled and no explicit pki config, all signer certs are generated with RSA-4096 (the current DefaultPKIProfile default). Without TechPreview, all certs remain RSA-2048.

PR chain

  1. CNTRLPLANE-2012: Add PKI config types, validation, and CR manifest generation #10593 — 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
  3. This PR — 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.

@coderabbitai

coderabbitai Bot commented Jun 3, 2026

Copy link
Copy Markdown

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds a feature-gated pki install-config surface, generates a PKI manifest from the resolved signer settings, generalizes TLS key generation for RSA and ECDSA, and updates signer asset call sites and tests to pass PKI config through.

Changes

Configurable PKI and TLS generation

Layer / File(s) Summary
PKI schema and validation
data/data/install.openshift.io_installconfigs.yaml, pkg/types/installconfig.go, pkg/types/pki/validation.go, pkg/types/validation/*, pkg/explain/printer_test.go
Adds the feature-gated pki install-config schema, public PKI types, field validation, and the matching feature-gate and printer updates.
Default signer config and manifest output
pkg/types/pki/defaults.go, pkg/types/pki/defaults_test.go, pkg/asset/tls/signerkey_params.go, pkg/asset/manifests/pki.go, pkg/asset/manifests/operators.go, pkg/asset/manifests/pki_test.go
Adds default PKI profile helpers, resolves effective signer PKI config from install-config.yaml, and emits cluster-pki-02-config.yaml through the operator manifest asset.
PEM and certificate helpers
pkg/asset/tls/utils.go, pkg/asset/tls/keypair.go, pkg/asset/tls/tls.go, pkg/asset/tls/utils_test.go, pkg/asset/tls/tls_test.go
Updates key generation, PEM conversion, and self-signed certificate creation for RSA and ECDSA keys, with unit coverage for the new code paths.
Certificate asset wrappers
pkg/asset/tls/certkey.go, pkg/asset/tls/boundsasigningkey.go, pkg/asset/imagebased/configimage/ingressoperatorsigner.go, pkg/asset/tls/certkey_test.go
Updates signed and self-signed cert assets to use the new key handling, adds RSA-only parsing for bound service account keys, and checks PEM encoding errors in the ingress operator signer asset.
Signer asset wiring
pkg/asset/tls/root.go, pkg/asset/tls/kubecontrolplane.go, pkg/asset/tls/kubelet.go, pkg/asset/tls/apiserver.go, pkg/asset/tls/adminkubeconfig.go, pkg/asset/tls/aggregator.go, pkg/asset/tls/ironictls.go, pkg/asset/ignition/machine/*_test.go
Updates signer assets to read SignerKeyParams, remove explicit key usages, pass PKI config into self-signed generation, and adjust ignition tests for the new root CA parents.

Sequence Diagram(s)

PKI manifest generation

sequenceDiagram
  participant Manifests
  participant PKIConfiguration
  participant InstallConfig
  participant EffectiveSignerPKIConfig
  participant DefaultPKIProfile
  Manifests->>PKIConfiguration: Generate(...)
  PKIConfiguration->>InstallConfig: load installconfig.InstallConfig
  PKIConfiguration->>EffectiveSignerPKIConfig: resolve signer PKIConfig
  EffectiveSignerPKIConfig->>DefaultPKIProfile: derive default signer values
  Manifests->>PKIConfiguration: Files()
Loading

Signer certificate generation

sequenceDiagram
  participant RootCA
  participant SignerKeyParams
  participant SelfSignedCertKey
  participant GenerateSelfSignedCertificate
  participant PrivateKeyToPem
  RootCA->>SignerKeyParams: read PKIConfig
  RootCA->>SelfSignedCertKey: Generate(..., PKIConfig)
  SelfSignedCertKey->>GenerateSelfSignedCertificate: create key and certificate
  SelfSignedCertKey->>PrivateKeyToPem: encode generated key
Loading

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~90+ minutes


Important

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

❌ Failed checks (1 error, 1 warning)

Check name Status Explanation Resolution
No-Weak-Crypto ❌ Error FAIL: the PR touches code paths that use sha1.Sum (pkg/asset/tls/tls.go:237), which is on the weak-crypto denylist. Replace SHA-1-based subject-key-id hashing with an approved alternative or add an explicit exception if SHA-1 is intentional.
Docstring Coverage ⚠️ Warning Docstring coverage is 56.60% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (13 passed)
Check name Status Explanation
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 No Ginkgo titles were added; the new tests use static t.Run names like PKI config present with TechPreviewNoUpgrade - passes and RSA 4096.
Test Structure And Quality ✅ Passed No Ginkgo tests were added or changed; the modified tests are standard Go unit tests, so the Ginkgo-specific quality checks are not applicable.
Microshift Test Compatibility ✅ Passed PR changes are unit tests and assets only; no new Ginkgo/e2e specs or MicroShift-unsupported APIs/features were added in the touched files.
Single Node Openshift (Sno) Test Compatibility ✅ Passed No new Ginkgo e2e tests were added; the changed tests are plain Go unit tests under pkg/* using testing.T, with no SNO-unsafe assumptions.
Topology-Aware Scheduling Compatibility ✅ Passed Only PKI/crypto plumbing was added; I found no new pod specs, replicas, affinities, tolerations, node selectors, or topology-spread constraints.
Ote Binary Stdout Contract ✅ Passed No stdout writes or suite hooks were added in main/init/TestMain/BeforeSuite paths; the only fmt.Println is inside a unit test body.
Ipv6 And Disconnected Network Test Compatibility ✅ Passed PASS: The modified tests are plain testing.T unit tests; no Ginkgo It/Describe/When, IPv4 literals, or external-host/network calls were found in the changed files.
Container-Privileges ✅ Passed Touched files are PKI/TLS/schema changes; targeted searches found no privileged:true, hostPID/Network/IPC, SYS_ADMIN, allowPrivilegeEscalation:true, or runAsUser:0 in the PR paths.
No-Sensitive-Data-In-Logs ✅ Passed No new logs print secrets; added debug/warn messages only emit generic parse/generation errors, and new PKI files contain no logging.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly matches the main change: wiring signer certs to read PKI config through SignerKeyParams.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

@hasbro17

hasbro17 commented Jun 3, 2026

Copy link
Copy Markdown
Contributor Author

/hold

Blocked by #10593 and #10594

Also need to retest and check the ABI codepaths for the SignerKeyParams dependency (Integration tests should show that) and see if the new signers generate correctly.

@openshift-ci openshift-ci Bot added the do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. label Jun 3, 2026
@hasbro17

hasbro17 commented Jun 3, 2026

Copy link
Copy Markdown
Contributor Author

/test e2e-aws-ovn-pki-default-techpreview
/test e2e-aws-ovn-pki-rsa-techpreview

@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: 1

🤖 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 `@pkg/types/pki/defaults.go`:
- Around line 36-53: EffectiveSignerPKIConfig currently returns ic.PKI before
checking the ConfigurablePKI feature gate, allowing user PKI to be honored even
when the gate is off; change the logic in EffectiveSignerPKIConfig so it first
checks ic.Enabled(features.FeatureGateConfigurablePKI) and if the gate is
disabled return nil, and only when the gate is enabled honor ic.PKI (return it)
or fall back to the default SignerCertificates config; update references in
EffectiveSignerPKIConfig to enforce the gate-first behavior.
🪄 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: b8a25289-d43e-4637-8509-4498d6ba55cf

📥 Commits

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

⛔ Files ignored due to path filters (1)
  • pkg/types/zz_generated.deepcopy.go is excluded by !**/zz_generated*
📒 Files selected for processing (39)
  • data/data/install.openshift.io_installconfigs.yaml
  • pkg/asset/ignition/machine/arbiter_ignition_customizations_test.go
  • pkg/asset/ignition/machine/arbiter_test.go
  • pkg/asset/ignition/machine/master_ignition_customizations_test.go
  • pkg/asset/ignition/machine/master_test.go
  • pkg/asset/ignition/machine/worker_ignition_customizations_test.go
  • pkg/asset/ignition/machine/worker_test.go
  • pkg/asset/imagebased/configimage/ingressoperatorsigner.go
  • pkg/asset/manifests/operators.go
  • pkg/asset/manifests/pki.go
  • pkg/asset/manifests/pki_test.go
  • pkg/asset/tls/adminkubeconfig.go
  • pkg/asset/tls/aggregator.go
  • pkg/asset/tls/apiserver.go
  • pkg/asset/tls/boundsasigningkey.go
  • pkg/asset/tls/certkey.go
  • pkg/asset/tls/certkey_test.go
  • pkg/asset/tls/ironictls.go
  • pkg/asset/tls/keypair.go
  • pkg/asset/tls/kubecontrolplane.go
  • pkg/asset/tls/kubelet.go
  • pkg/asset/tls/root.go
  • pkg/asset/tls/signerkey_params.go
  • pkg/asset/tls/tls.go
  • pkg/asset/tls/tls_test.go
  • pkg/asset/tls/utils.go
  • pkg/asset/tls/utils_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 pkg/types/pki/defaults.go Outdated
@hasbro17
hasbro17 force-pushed the pki-3-signer-wiring branch from 0e262ca to 2ab8c63 Compare June 3, 2026 22:45
@hasbro17

hasbro17 commented Jun 3, 2026

Copy link
Copy Markdown
Contributor Author

/test e2e-aws-ovn-pki-default-techpreview
/test e2e-aws-ovn-pki-rsa-techpreview

@hasbro17

hasbro17 commented Jun 4, 2026

Copy link
Copy Markdown
Contributor Author

Okay the e2e tests pass now:
https://prow.ci.openshift.org/view/gs/test-platform-results/pr-logs/pull/openshift_installer/10595/pull-ci-openshift-installer-main-e2e-aws-ovn-pki-rsa-techpreview/2062305090953285632

So the SignerKeyParams helps walk the line between IPI and ABI for those signers.

@hasbro17
hasbro17 force-pushed the pki-3-signer-wiring branch 2 times, most recently from 0a3fbe6 to 9d66374 Compare June 8, 2026 18:45
@hasbro17

hasbro17 commented Jun 8, 2026

Copy link
Copy Markdown
Contributor Author

/test e2e-aws-ovn-pki-default-techpreview
/test e2e-aws-ovn-pki-rsa-techpreview

@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: 1

🤖 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 `@pkg/asset/manifests/pki.go`:
- Around line 42-48: The Generate method on PKIConfiguration exits early when
the FeatureGateConfigurablePKI is disabled but doesn't clear previously
generated state; ensure you reset p.FileList (e.g., set to nil or an empty
slice) before the early return in PKIConfiguration.Generate so stale PKI
manifests aren't retained across runs when the feature gate is off.
🪄 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: 2313bdbb-b13e-49c2-89f3-c0d815a13343

📥 Commits

Reviewing files that changed from the base of the PR and between 0a3fbe6 and 9d66374.

⛔ Files ignored due to path filters (1)
  • pkg/types/zz_generated.deepcopy.go is excluded by !**/zz_generated*
📒 Files selected for processing (40)
  • data/data/install.openshift.io_installconfigs.yaml
  • pkg/asset/ignition/machine/arbiter_ignition_customizations_test.go
  • pkg/asset/ignition/machine/arbiter_test.go
  • pkg/asset/ignition/machine/master_ignition_customizations_test.go
  • pkg/asset/ignition/machine/master_test.go
  • pkg/asset/ignition/machine/worker_ignition_customizations_test.go
  • pkg/asset/ignition/machine/worker_test.go
  • pkg/asset/imagebased/configimage/ingressoperatorsigner.go
  • pkg/asset/manifests/operators.go
  • pkg/asset/manifests/pki.go
  • pkg/asset/manifests/pki_test.go
  • pkg/asset/tls/adminkubeconfig.go
  • pkg/asset/tls/aggregator.go
  • pkg/asset/tls/apiserver.go
  • pkg/asset/tls/boundsasigningkey.go
  • pkg/asset/tls/certkey.go
  • pkg/asset/tls/certkey_test.go
  • pkg/asset/tls/ironictls.go
  • pkg/asset/tls/keypair.go
  • pkg/asset/tls/kubecontrolplane.go
  • pkg/asset/tls/kubelet.go
  • pkg/asset/tls/root.go
  • pkg/asset/tls/signerkey_params.go
  • pkg/asset/tls/tls.go
  • pkg/asset/tls/tls_test.go
  • pkg/asset/tls/utils.go
  • pkg/asset/tls/utils_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 (5)
  • pkg/asset/ignition/machine/arbiter_test.go
  • pkg/explain/printer_test.go
  • pkg/types/defaults/installconfig.go
  • pkg/asset/manifests/pki_test.go
  • pkg/types/validation/featuregates.go
🚧 Files skipped from review as they are similar to previous changes (30)
  • pkg/asset/imagebased/configimage/ingressoperatorsigner.go
  • pkg/asset/tls/ironictls.go
  • pkg/asset/tls/utils_test.go
  • pkg/asset/ignition/machine/worker_test.go
  • pkg/asset/ignition/machine/master_test.go
  • pkg/types/validation/featuregate_test.go
  • pkg/asset/ignition/machine/arbiter_ignition_customizations_test.go
  • pkg/types/validation/installconfig_test.go
  • pkg/types/validation/installconfig.go
  • pkg/types/pki/validation.go
  • pkg/types/pki/defaults.go
  • pkg/types/pki/defaults_test.go
  • pkg/asset/tls/boundsasigningkey.go
  • pkg/types/installconfig.go
  • data/data/install.openshift.io_installconfigs.yaml
  • pkg/asset/tls/keypair.go
  • pkg/asset/tls/kubecontrolplane.go
  • pkg/asset/tls/apiserver.go
  • pkg/asset/tls/certkey.go
  • pkg/asset/tls/tls_test.go
  • pkg/asset/tls/adminkubeconfig.go
  • pkg/asset/tls/signerkey_params.go
  • pkg/asset/tls/kubelet.go
  • pkg/asset/tls/aggregator.go
  • pkg/asset/ignition/machine/worker_ignition_customizations_test.go
  • pkg/asset/tls/utils.go
  • pkg/asset/tls/root.go
  • pkg/asset/tls/certkey_test.go
  • pkg/types/pki/validation_test.go
  • pkg/asset/tls/tls.go

Comment thread pkg/asset/manifests/pki.go
@hasbro17
hasbro17 force-pushed the pki-3-signer-wiring branch from 9d66374 to fcfc32e Compare June 25, 2026 17:39
@hasbro17

Copy link
Copy Markdown
Contributor Author

/test e2e-aws-ovn-pki-default-techpreview
/test e2e-aws-ovn-pki-rsa-techpreview

@hasbro17
hasbro17 force-pushed the pki-3-signer-wiring branch 4 times, most recently from d217ac0 to c665423 Compare June 30, 2026 05:02
@hasbro17
hasbro17 force-pushed the pki-3-signer-wiring branch from c665423 to e4030fd Compare July 8, 2026 17:16
@hasbro17

hasbro17 commented Jul 8, 2026

Copy link
Copy Markdown
Contributor Author

/test e2e-aws-ovn-pki-default-techpreview
/test e2e-aws-ovn-pki-rsa-techpreview

@hasbro17
hasbro17 force-pushed the pki-3-signer-wiring branch from e4030fd to de6f285 Compare July 9, 2026 17:52
@tthvo

tthvo commented Jul 9, 2026

Copy link
Copy Markdown
Member

/hold cancel

@openshift-ci openshift-ci Bot removed the do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. label Jul 9, 2026
@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Tests from second stage were triggered manually. Pipeline can be controlled only manually, until HEAD changes. Use command to trigger second stage.

@tthvo

tthvo commented Jul 21, 2026

Copy link
Copy Markdown
Member

/retest

1 similar comment
@sanchezl

Copy link
Copy Markdown
Contributor

/retest

@tthvo

tthvo commented Jul 22, 2026

Copy link
Copy Markdown
Member

/retest

Comment thread pkg/asset/targets/targets.go Outdated
&clusterapi.Cluster{},
// Persist PKI config to the state file so that signer certs
// generated in a subsequent create cluster use the correct
// key algorithm after install-config.yaml has been consumed.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

These comments feels like overkill. If you document it only in the commit message then anybody who wonders why it is here will still be able to find out.

Comment thread cmd/openshift-install/agent.go Outdated
// Persist PKI config to the state file so that signer certs
// generated in a subsequent agent create image use the correct
// key algorithm after install-config.yaml has been consumed.
&tls.SignerKeyParams{},

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This one is not necessary. Install-config is not an input to this command.

@tthvo

tthvo commented Jul 22, 2026

Copy link
Copy Markdown
Member

/hold

There are new outstanding reviews 👀

@openshift-ci openshift-ci Bot added the do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. label Jul 22, 2026
@hasbro17
hasbro17 force-pushed the pki-3-signer-wiring branch from 663b47b to ef3e716 Compare July 22, 2026 16:51
@openshift-ci openshift-ci Bot removed the lgtm Indicates that a PR is ready to be merged. label Jul 22, 2026
Introduce SignerKeyParams, a WritableAsset with zero dependencies that
reads install-config.yaml via AssetBase.LoadFromFile (strict YAML,
deprecated field conversion, defaults) and extracts the effective PKI
configuration via EffectiveSignerPKIConfig(). When no install-config
is present, Load() returns (false, nil) so the asset store falls back to
the state file between multi-step invocations (e.g. create manifests
followed by create cluster, where install-config.yaml is consumed after
the first step). In the agent flow where neither file nor state exists,
Generate() leaves PKIConfig nil (RSA-2048).

SignerKeyParams is explicitly added to the Manifests and agent
target asset lists so that its PKIConfig is persisted to the state
file, ensuring correct key algorithms in multi-step flows where
install-config.yaml is consumed between commands.

Signers that previously had zero dependencies now depend on
SignerKeyParams instead of InstallConfig, avoiding validation that
would reject configs valid in the agent flow. Signers that already
depended on InstallConfig use EffectiveSignerPKIConfig() to resolve
the effective PKI config including feature gate defaults.

With TechPreview enabled and no explicit pki config, all signer certs
are generated with RSA-4096 (the current DefaultPKIProfile default).

Assisted-by: Claude Code (Opus 4.6)
@hasbro17
hasbro17 force-pushed the pki-3-signer-wiring branch from ef3e716 to 0b7b63e Compare July 22, 2026 17:04
@tthvo

tthvo commented Jul 22, 2026

Copy link
Copy Markdown
Member

/test e2e-agent-compact-ipv4-iso-no-registry
/test e2e-agent-sno-ipv6
/test e2e-agent-ha-dualstack
/test e2e-aws-ovn-techpreview
/test e2e-azure-ovn-techpreview
/test e2e-aws-ovn-pki-default-techpreview
/test e2e-aws-ovn-pki-rsa-techpreview
/test e2e-aws-ovn

@openshift-ci

openshift-ci Bot commented Jul 22, 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/e2e-metal-ovn-two-node-arbiter c665423 link false /test e2e-metal-ovn-two-node-arbiter
ci/prow/e2e-metal-single-node-live-iso c665423 link false /test e2e-metal-single-node-live-iso
ci/prow/e2e-metal-ipi-ovn-dualstack c665423 link false /test e2e-metal-ipi-ovn-dualstack
ci/prow/e2e-metal-ipi-ovn c665423 link false /test e2e-metal-ipi-ovn
ci/prow/e2e-azure-nat-gateway-single-zone 0d8bb38 link true /test e2e-azure-nat-gateway-single-zone
ci/prow/e2e-aws-ovn-pki-default-techpreview 0b7b63e link false /test e2e-aws-ovn-pki-default-techpreview
ci/prow/e2e-azure-ovn-techpreview 0b7b63e link false /test e2e-azure-ovn-techpreview

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.

@zaneb

zaneb commented Jul 23, 2026

Copy link
Copy Markdown
Member

/lgtm
/hold cancel

@openshift-ci openshift-ci Bot removed the do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. label Jul 23, 2026
@openshift-ci openshift-ci Bot added the lgtm Indicates that a PR is ready to be merged. label Jul 23, 2026
@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Tests from second stage were triggered manually. Pipeline can be controlled only manually, until HEAD changes. Use command to trigger second stage.

@hasbro17

Copy link
Copy Markdown
Contributor Author

CI Verification Summary:

Job results

Job Build Result Related to PR?
e2e-azure-ovn-techpreview 2079988549255434240 FAILED No
e2e-aws-ovn-pki-default-techpreview 2079988539159744512 FAILED Expected

Analysis

e2e-azure-ovn-techpreview — NOT caused by this PR

The cluster installed successfully with TechPreviewNoUpgrade featureSet — all pre-phase steps and installation passed. This means the PR's new TechPreview behavior (RSA-4096 signers via EffectiveSignerPKIConfig) executed correctly.

The single blocking failure is [sig-network-edge][Feature:Router] The HAProxy router with Dynamic Config Manager should maintain steady PID usage after scale-out and scale-in operations — a router PID stability test unrelated to PKI. The 11 informing failures are 10 [Feature:NetworkSegmentation] OVN flakes plus 1 cluster-config-operator status check. None involve TLS, certificates, signers, or PKI.

Result: 2364 pass, 1 blocking fail (router PID), 11 informing fail (OVN + CCO), 2193 skip.

e2e-aws-ovn-pki-default-techpreview — Expected failure

The cluster installed successfully. The PKI verification step correctly detected that all 7 installer-managed signers are using RSA-4096 instead of ECDSA P-384:

FAIL   | root-ca                                       | expected ECDSA P-384, got RSA-4096
FAIL   | kube-apiserver-to-kubelet-signer              | expected ECDSA P-384, got RSA-4096
FAIL   | kube-apiserver-localhost-signer               | expected ECDSA P-384, got RSA-4096
FAIL   | kube-apiserver-service-network-signer         | expected ECDSA P-384, got RSA-4096
FAIL   | kube-apiserver-lb-signer                      | expected ECDSA P-384, got RSA-4096
FAIL   | kube-control-plane-signer                     | expected ECDSA P-384, got RSA-4096
FAIL   | aggregator-signer                             | expected ECDSA P-384, got RSA-4096
PASS   | etcd-signer
PASS   | etcd-metrics-signer
PASS   | PKI CR (mode=Default)

This is expected. The test expects DefaultPKIProfile() to return ECDSA P-384 (matching the upstream library-go profile), but it intentionally returns RSA-4096 until all day-2 operators (CKAO, CKMO, etc.) support ECDSA certificate rotation. Once operator support lands, DefaultPKIProfile() will switch to ECDSA P-384/P-256 and this test will pass.

Notable improvement from the previous run: both etcd-signer and etcd-metrics-signer now PASS, confirming that the etcd operator fix (cluster-etcd-operator#1648) and the CI test name fix (openshift/release#82191) are working.

Conclusion

  • No failures are caused by this PR. The installer's signer wiring works correctly — TechPreview clusters install successfully with RSA-4096 signers.
  • The e2e-azure-ovn-techpreview failure is unrelated networking test flakiness (router PID stability, OVN network segmentation).
  • The pki-default-techpreview failure is expected until DefaultPKIProfile() switches from RSA-4096 to ECDSA P-384.
  • Both etcd signer checks now pass, confirming the external fixes from the previous run are merged.

@tthvo

tthvo commented Jul 23, 2026

Copy link
Copy Markdown
Member

/test e2e-aws-ovn-fips

@tthvo

tthvo commented Jul 23, 2026

Copy link
Copy Markdown
Member

/test e2e-metal-assisted
/payload-job periodic-ci-openshift-release-main-nightly-5.0-e2e-aws-ovn-single-node-techpreview
/payoad-job periodic-ci-openshift-openshift-tests-private-release-5.0-multi-nightly-aws-eusc-ipi-fips-tp-arm-f7
/payload-job periodic-ci-openshift-openshift-tests-private-release-5.0-amd64-nightly-aws-usgov-ipi-custom-dns-mini-perm-tp-f7

@openshift-ci

openshift-ci Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

@tthvo: trigger 2 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command

  • periodic-ci-openshift-release-main-nightly-5.0-e2e-aws-ovn-single-node-techpreview
  • periodic-ci-openshift-openshift-tests-private-release-5.0-amd64-nightly-aws-usgov-ipi-custom-dns-mini-perm-tp-f7

See details on https://pr-payload-tests.ci.openshift.org/runs/ci/8ffd5070-86e2-11f1-93bc-ba626c5e1ade-0

@tthvo

tthvo commented Jul 23, 2026

Copy link
Copy Markdown
Member

/payload-job periodic-ci-openshift-openshift-tests-private-release-5.0-amd64-nightly-aws-c2s-ipi-disc-priv-fips-f28-tp-longduration-cloud

@openshift-ci

openshift-ci Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

@tthvo: trigger 1 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command

  • periodic-ci-openshift-openshift-tests-private-release-5.0-amd64-nightly-aws-c2s-ipi-disc-priv-fips-f28-tp-longduration-cloud

See details on https://pr-payload-tests.ci.openshift.org/runs/ci/f040b760-86e2-11f1-908e-2997670f77fa-0

@tthvo

tthvo commented Jul 23, 2026

Copy link
Copy Markdown
Member

/test e2e-aws-eusc-techpreview

@tthvo

tthvo commented Jul 23, 2026

Copy link
Copy Markdown
Member

/payload-job periodic-ci-openshift-openshift-tests-private-release-5.0-amd64-nightly-vsphere-short-cert-rotation-f7
/payload-job periodic-ci-openshift-openshift-tests-private-release-5.0-amd64-nightly-vsphere-ipi-proxy-fips-regen-cert-f14

@openshift-ci

openshift-ci Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

@tthvo: trigger 2 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command

  • periodic-ci-openshift-openshift-tests-private-release-5.0-amd64-nightly-vsphere-short-cert-rotation-f7
  • periodic-ci-openshift-openshift-tests-private-release-5.0-amd64-nightly-vsphere-ipi-proxy-fips-regen-cert-f14

See details on https://pr-payload-tests.ci.openshift.org/runs/ci/dec86810-86e3-11f1-8f7e-9a6867363117-0

@tthvo

tthvo commented Jul 23, 2026

Copy link
Copy Markdown
Member

/payload-job periodic-ci-openshift-openshift-tests-private-release-5.0-amd64-nightly-vsphere-short-cert-rotation-f7
/payload-job periodic-ci-openshift-openshift-tests-private-release-5.0-amd64-nightly-vsphere-ipi-proxy-fips-regen-cert-f14

@openshift-ci

openshift-ci Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

@tthvo: trigger 2 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command

  • periodic-ci-openshift-openshift-tests-private-release-5.0-amd64-nightly-vsphere-short-cert-rotation-f7
  • periodic-ci-openshift-openshift-tests-private-release-5.0-amd64-nightly-vsphere-ipi-proxy-fips-regen-cert-f14

See details on https://pr-payload-tests.ci.openshift.org/runs/ci/b2a12640-86ee-11f1-87c1-6f93223ce9a6-0

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

Labels

approved Indicates a PR has been approved by an approver from all required OWNERS files. jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. lgtm Indicates that a PR is ready to be merged.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants