Skip to content

Cleanup README#2

Merged
umago merged 1 commit into
openstack-lightspeed:mainfrom
umago:README
Oct 15, 2025
Merged

Cleanup README#2
umago merged 1 commit into
openstack-lightspeed:mainfrom
umago:README

Conversation

@umago
Copy link
Copy Markdown
Contributor

@umago umago commented Oct 15, 2025

No description provided.

Signed-off-by: Lucas Alvares Gomes <lucasagomes@gmail.com>
@umago umago merged commit 939c58b into openstack-lightspeed:main Oct 15, 2025
@umago umago deleted the README branch October 17, 2025 10:00
lpiwowar added a commit to lpiwowar/operator that referenced this pull request May 27, 2026
There were multiple issues with how the operator handled certificates:

1) The lightspeed-stack pod used REQUESTS_CA_BUNDLE and SSL_CERT_FILE
   environment variables, which bypassed the system-configured
   certificates.

2) When a user provided a custom CA certificate, it was expected under
   the cert.crt key in their ConfigMap. This was undocumented and the
   required key name was not obvious.

3) PostgresDB appeared to be configured for mTLS because ssl_ca_file
   was set in postgres.conf and the openshift-service-ca.crt was
   mounted into the PostgresDB pod. This created a false sense of mTLS
   being in place, but with the default pg_hba.conf, client certificate
   verification [1] is not enabled. Neither OGX [3][4] nor Lightspeed
   Stack [5] supports providing client certificates to PostgresDB.

4) PostgresDB SSL connection settings were configured for OGX even
   though they have no effect. OGX does not support configuring the
   SSL mode for its PostgresDB connection [3][4], so the PostgresDB
   certificate verification cannot be strictly enforced on the OGX
   side (the default is "prefer" [2], which does not enforce
   certificate verification and can fall back to unencrypted
   communication). OGX uses a non-strict config mode, so unrecognized
   options are silently ignored.

This commit simplifies certificate handling with the following changes:

- Introduce a single combined CA bundle ConfigMap
  (openstack-lightspeed-combined-ca-bundle) containing the system CAs,
  user-provided CA certificates from the OpenStackLightspeed CRD,
  kube-root-ca.crt, and openshift-service-ca.crt. This bundle is
  mounted into all containers in the lightspeed-stack-deployment pod,
  eliminating the need for REQUESTS_CA_BUNDLE and SSL_CERT_FILE.

- When a user specifies a ConfigMap with custom CA certificates,
  iterate over all keys, validate that each holds a valid certificate,
  and append it to the combined CA bundle (resolves openstack-lightspeed#2).

- Stop mounting openshift-service-ca into the Postgres pod and remove
  ssl_ca_file from postgres.conf. These gave a false sense of client
  certificate validation; actually enforcing it requires configuring
  pg_hba.conf [1], and neither OGX [3][4] nor Lightspeed Stack [5]
  currently supports providing client certificates.

- Remove ssl_mode, ca_cert_path, and gss_encmode from
  storage.backends.postgres_backend in ogx_config.yaml. These options
  are not supported by OGX [3][4] and gave a false sense of SSL being
  configured.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

[1]
https://www.postgresql.org/docs/current/ssl-tcp.html#SSL-CLIENT-CERTIFICATES
[2]
https://magicstack.github.io/asyncpg/current/api/index.html#asyncpg.connection.connect
[3]
https://github.com/ogx-ai/ogx/blob/34d7901/src/ogx/core/storage/datatypes.py#L200
[4]
https://github.com/ogx-ai/ogx/blob/34d7901/src/ogx/core/storage/sqlstore/sqlalchemy_sqlstore.py#L125
[5]
https://github.com/lightspeed-core/lightspeed-stack/blob/7503ebd/src/models/config.py#L181
lpiwowar added a commit to lpiwowar/operator that referenced this pull request May 27, 2026
There were multiple issues with how the operator handled certificates:

1) The lightspeed-stack pod used REQUESTS_CA_BUNDLE and SSL_CERT_FILE
   environment variables, which bypassed the system-configured
   certificates.

2) When a user provided a custom CA certificate, it was expected under
   the cert.crt key in their ConfigMap. This was undocumented and the
   required key name was not obvious.

3) PostgresDB appeared to be configured for mTLS because ssl_ca_file
   was set in postgres.conf and the openshift-service-ca.crt was
   mounted into the PostgresDB pod. This created a false sense of mTLS
   being in place, but with the default pg_hba.conf, client certificate
   verification [1] is not enabled. Neither OGX [3][4] nor Lightspeed
   Stack [5] supports providing client certificates to PostgresDB.

4) PostgresDB SSL connection settings were configured for OGX even
   though they have no effect. OGX does not support configuring the
   SSL mode for its PostgresDB connection [3][4], so the PostgresDB
   certificate verification cannot be strictly enforced on the OGX
   side (the default is "prefer" [2], which does not enforce
   certificate verification and can fall back to unencrypted
   communication). OGX uses a non-strict config mode, so unrecognized
   options are silently ignored.

This commit simplifies certificate handling with the following changes:

- Introduce a single combined CA bundle ConfigMap
  (openstack-lightspeed-combined-ca-bundle) containing the system CAs,
  user-provided CA certificates from the OpenStackLightspeed CRD,
  kube-root-ca.crt, and openshift-service-ca.crt. This bundle is
  mounted into all containers in the lightspeed-stack-deployment pod,
  eliminating the need for REQUESTS_CA_BUNDLE and SSL_CERT_FILE.

- When a user specifies a ConfigMap with custom CA certificates,
  iterate over all keys, validate that each holds a valid certificate,
  and append it to the combined CA bundle (resolves openstack-lightspeed#2).

- Stop mounting openshift-service-ca into the Postgres pod and remove
  ssl_ca_file from postgres.conf. These gave a false sense of client
  certificate validation; actually enforcing it requires configuring
  pg_hba.conf [1], and neither OGX [3][4] nor Lightspeed Stack [5]
  currently supports providing client certificates.

- Remove ssl_mode, ca_cert_path, and gss_encmode from
  storage.backends.postgres_backend in ogx_config.yaml. These options
  are not supported by OGX [3][4] and gave a false sense of SSL being
  configured.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

[1]
https://www.postgresql.org/docs/current/ssl-tcp.html#SSL-CLIENT-CERTIFICATES
[2]
https://magicstack.github.io/asyncpg/current/api/index.html#asyncpg.connection.connect
[3]
https://github.com/ogx-ai/ogx/blob/34d7901/src/ogx/core/storage/datatypes.py#L200
[4]
https://github.com/ogx-ai/ogx/blob/34d7901/src/ogx/core/storage/sqlstore/sqlalchemy_sqlstore.py#L125
[5]
https://github.com/lightspeed-core/lightspeed-stack/blob/7503ebd/src/models/config.py#L181
lpiwowar added a commit to lpiwowar/operator that referenced this pull request May 27, 2026
There were multiple issues with how the operator handled certificates:

1) The lightspeed-stack pod used REQUESTS_CA_BUNDLE and SSL_CERT_FILE
   environment variables, which bypassed the system-configured
   certificates.

2) When a user provided a custom CA certificate, it was expected under
   the cert.crt key in their ConfigMap. This was undocumented and the
   required key name was not obvious.

3) PostgresDB appeared to be configured for mTLS because ssl_ca_file
   was set in postgres.conf and the openshift-service-ca.crt was
   mounted into the PostgresDB pod. This created a false sense of mTLS
   being in place, but with the default pg_hba.conf, client certificate
   verification [1] is not enabled. Neither OGX [3][4] nor Lightspeed
   Stack [5] supports providing client certificates to PostgresDB.

4) PostgresDB SSL connection settings were configured for OGX even
   though they have no effect. OGX does not support configuring the
   SSL mode for its PostgresDB connection [3][4], so the PostgresDB
   certificate verification cannot be strictly enforced on the OGX
   side (the default is "prefer" [2], which does not enforce
   certificate verification and can fall back to unencrypted
   communication). OGX uses a non-strict config mode, so unrecognized
   options are silently ignored.

This commit simplifies certificate handling with the following changes:

- Introduce a single combined CA bundle ConfigMap
  (openstack-lightspeed-combined-ca-bundle) containing the system CAs,
  user-provided CA certificates from the OpenStackLightspeed CRD,
  kube-root-ca.crt, and openshift-service-ca.crt. This bundle is
  mounted into all containers in the lightspeed-stack-deployment pod,
  eliminating the need for REQUESTS_CA_BUNDLE and SSL_CERT_FILE.

- When a user specifies a ConfigMap with custom CA certificates,
  iterate over all keys, validate that each holds a valid certificate,
  and append it to the combined CA bundle (resolves openstack-lightspeed#2).

- Stop mounting openshift-service-ca into the Postgres pod and remove
  ssl_ca_file from postgres.conf. These gave a false sense of client
  certificate validation; actually enforcing it requires configuring
  pg_hba.conf [1], and neither OGX [3][4] nor Lightspeed Stack [5]
  currently supports providing client certificates.

- Remove ssl_mode, ca_cert_path, and gss_encmode from
  storage.backends.postgres_backend in ogx_config.yaml. These options
  are not supported by OGX [3][4] and gave a false sense of SSL being
  configured.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

[1]
https://www.postgresql.org/docs/current/ssl-tcp.html#SSL-CLIENT-CERTIFICATES
[2]
https://magicstack.github.io/asyncpg/current/api/index.html#asyncpg.connection.connect
[3]
https://github.com/ogx-ai/ogx/blob/34d7901/src/ogx/core/storage/datatypes.py#L200
[4]
https://github.com/ogx-ai/ogx/blob/34d7901/src/ogx/core/storage/sqlstore/sqlalchemy_sqlstore.py#L125
[5]
https://github.com/lightspeed-core/lightspeed-stack/blob/7503ebd/src/models/config.py#L181
lpiwowar added a commit to lpiwowar/operator that referenced this pull request May 27, 2026
There were multiple issues with how the operator handled certificates:

1) The lightspeed-stack pod used REQUESTS_CA_BUNDLE and SSL_CERT_FILE
   environment variables, which bypassed the system-configured
   certificates.

2) When a user provided a custom CA certificate, it was expected under
   the cert.crt key in their ConfigMap. This was undocumented and the
   required key name was not obvious.

3) PostgresDB appeared to be configured for mTLS because ssl_ca_file
   was set in postgres.conf and the openshift-service-ca.crt was
   mounted into the PostgresDB pod. This created a false sense of mTLS
   being in place, but with the default pg_hba.conf, client certificate
   verification [1] is not enabled. Neither OGX [3][4] nor Lightspeed
   Stack [5] supports providing client certificates to PostgresDB.

4) PostgresDB SSL connection settings were configured for OGX even
   though they have no effect. OGX does not support configuring the
   SSL mode for its PostgresDB connection [3][4], so the PostgresDB
   certificate verification cannot be strictly enforced on the OGX
   side (the default is "prefer" [2], which does not enforce
   certificate verification and can fall back to unencrypted
   communication). OGX uses a non-strict config mode, so unrecognized
   options are silently ignored.

This commit simplifies certificate handling with the following changes:

- Introduce a single combined CA bundle ConfigMap
  (openstack-lightspeed-combined-ca-bundle) containing the system CAs,
  user-provided CA certificates from the OpenStackLightspeed CRD,
  kube-root-ca.crt, and openshift-service-ca.crt. This bundle is
  mounted into all containers in the lightspeed-stack-deployment pod,
  eliminating the need for REQUESTS_CA_BUNDLE and SSL_CERT_FILE.

- When a user specifies a ConfigMap with custom CA certificates,
  iterate over all keys, validate that each holds a valid certificate,
  and append it to the combined CA bundle (resolves openstack-lightspeed#2).

- Stop mounting openshift-service-ca into the Postgres pod and remove
  ssl_ca_file from postgres.conf. These gave a false sense of client
  certificate validation; actually enforcing it requires configuring
  pg_hba.conf [1], and neither OGX [3][4] nor Lightspeed Stack [5]
  currently supports providing client certificates.

- Remove ssl_mode, ca_cert_path, and gss_encmode from
  storage.backends.postgres_backend in ogx_config.yaml. These options
  are not supported by OGX [3][4] and gave a false sense of SSL being
  configured.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

[1]
https://www.postgresql.org/docs/current/ssl-tcp.html#SSL-CLIENT-CERTIFICATES
[2]
https://magicstack.github.io/asyncpg/current/api/index.html#asyncpg.connection.connect
[3]
https://github.com/ogx-ai/ogx/blob/34d7901/src/ogx/core/storage/datatypes.py#L200
[4]
https://github.com/ogx-ai/ogx/blob/34d7901/src/ogx/core/storage/sqlstore/sqlalchemy_sqlstore.py#L125
[5]
https://github.com/lightspeed-core/lightspeed-stack/blob/7503ebd/src/models/config.py#L181
lpiwowar added a commit to lpiwowar/operator that referenced this pull request May 27, 2026
There were multiple issues with how the operator handled certificates:

1) The lightspeed-stack pod used REQUESTS_CA_BUNDLE and SSL_CERT_FILE
   environment variables, which bypassed the system-configured
   certificates.

2) When a user provided a custom CA certificate, it was expected under
   the cert.crt key in their ConfigMap. This was undocumented and the
   required key name was not obvious.

3) PostgresDB appeared to be configured for mTLS because ssl_ca_file
   was set in postgres.conf and the openshift-service-ca.crt was
   mounted into the PostgresDB pod. This created a false sense of mTLS
   being in place, but with the default pg_hba.conf, client certificate
   verification [1] is not enabled. Neither OGX [3][4] nor Lightspeed
   Stack [5] supports providing client certificates to PostgresDB.

4) PostgresDB SSL connection settings were configured for OGX even
   though they have no effect. OGX does not support configuring the
   SSL mode for its PostgresDB connection [3][4], so the PostgresDB
   certificate verification cannot be strictly enforced on the OGX
   side (the default is "prefer" [2], which does not enforce
   certificate verification and can fall back to unencrypted
   communication). OGX uses a non-strict config mode, so unrecognized
   options are silently ignored.

This commit simplifies certificate handling with the following changes:

- Introduce a single combined CA bundle ConfigMap
  (openstack-lightspeed-combined-ca-bundle) containing the system CAs,
  user-provided CA certificates from the OpenStackLightspeed CRD,
  kube-root-ca.crt, and openshift-service-ca.crt. This bundle is
  mounted into all containers in the lightspeed-stack-deployment pod,
  eliminating the need for REQUESTS_CA_BUNDLE and SSL_CERT_FILE.

- When a user specifies a ConfigMap with custom CA certificates,
  iterate over all keys, validate that each holds a valid certificate,
  and append it to the combined CA bundle (resolves openstack-lightspeed#2).

- Stop mounting openshift-service-ca into the Postgres pod and remove
  ssl_ca_file from postgres.conf. These gave a false sense of client
  certificate validation; actually enforcing it requires configuring
  pg_hba.conf [1], and neither OGX [3][4] nor Lightspeed Stack [5]
  currently supports providing client certificates.

- Remove ssl_mode, ca_cert_path, and gss_encmode from
  storage.backends.postgres_backend in ogx_config.yaml. These options
  are not supported by OGX [3][4] and gave a false sense of SSL being
  configured.

[1]
https://www.postgresql.org/docs/current/ssl-tcp.html#SSL-CLIENT-CERTIFICATES
[2]
https://magicstack.github.io/asyncpg/current/api/index.html#asyncpg.connection.connect
[3]
https://github.com/ogx-ai/ogx/blob/34d7901/src/ogx/core/storage/datatypes.py#L200
[4]
https://github.com/ogx-ai/ogx/blob/34d7901/src/ogx/core/storage/sqlstore/sqlalchemy_sqlstore.py#L125
[5]
https://github.com/lightspeed-core/lightspeed-stack/blob/7503ebd/src/models/config.py#L181

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
lpiwowar added a commit to lpiwowar/operator that referenced this pull request May 28, 2026
There were multiple issues with how the operator handled certificates:

1) The lightspeed-stack pod used REQUESTS_CA_BUNDLE and SSL_CERT_FILE
   environment variables, which bypassed the system-configured
   certificates.

2) When a user provided a custom CA certificate, it was expected under
   the cert.crt key in their ConfigMap. This was undocumented and the
   required key name was not obvious.

3) PostgresDB appeared to be configured for mTLS because ssl_ca_file
   was set in postgres.conf and the openshift-service-ca.crt was
   mounted into the PostgresDB pod. This created a false sense of mTLS
   being in place, but with the default pg_hba.conf, client certificate
   verification [1] is not enabled. Neither OGX [3][4] nor Lightspeed
   Stack [5] supports providing client certificates to PostgresDB.

4) PostgresDB SSL connection settings were configured for OGX even
   though they have no effect. OGX does not support configuring the
   SSL mode for its PostgresDB connection [3][4], so the PostgresDB
   certificate verification cannot be strictly enforced on the OGX
   side (the default is "prefer" [2], which does not enforce
   certificate verification and can fall back to unencrypted
   communication). OGX uses a non-strict config mode, so unrecognized
   options are silently ignored.

5) The operator did not watch for changes to ConfigMaps. When the
   content of the CA bundle ConfigMap was updated, the operator did
   not automatically reconcile.

6) Not a bug strictly speaking, but Lightspeed Stack used ssl_mode
   "require" when it could have used "verify-full", which checks both
   that the certificate is signed by a trusted CA and that the server
   hostname matches the CN field in the certificate.

This commit simplifies certificate handling with the following changes:

- Introduce a single combined CA bundle ConfigMap
  (openstack-lightspeed-combined-ca-bundle) containing the system CAs,
  user-provided CA certificates from the OpenStackLightspeed CRD,
  kube-root-ca.crt, and openshift-service-ca.crt. This bundle is
  mounted into all containers in the lightspeed-stack-deployment pod,
  eliminating the need for REQUESTS_CA_BUNDLE and SSL_CERT_FILE.

- When a user specifies a ConfigMap with custom CA certificates,
  iterate over all keys, validate that each holds a valid certificate,
  and append it to the combined CA bundle (resolves openstack-lightspeed#2).

- Stop mounting openshift-service-ca into the Postgres pod and remove
  ssl_ca_file from postgres.conf. These gave a false sense of client
  certificate validation; actually enforcing it requires configuring
  pg_hba.conf [1], and neither OGX [3][4] nor Lightspeed Stack [5]
  currently supports providing client certificates.

- Remove ssl_mode, ca_cert_path, and gss_encmode from
  storage.backends.postgres_backend in ogx_config.yaml. These options
  are not supported by OGX [3][4] and gave a false sense of SSL being
  configured.

- Add a Watch() on ConfigMaps to the reconciler so that whenever a
  user updates the CA bundle ConfigMap, the reconcile loop runs
  automatically.

- Configure Lightspeed Stack with ssl_mode "verify-full" for its
  PostgreSQL connection, ensuring both CA trust and hostname
  verification.

[1]
https://www.postgresql.org/docs/current/ssl-tcp.html#SSL-CLIENT-CERTIFICATES
[2]
https://magicstack.github.io/asyncpg/current/api/index.html#asyncpg.connection.connect
[3]
https://github.com/ogx-ai/ogx/blob/34d7901/src/ogx/core/storage/datatypes.py#L200
[4]
https://github.com/ogx-ai/ogx/blob/34d7901/src/ogx/core/storage/sqlstore/sqlalchemy_sqlstore.py#L125
[5]
https://github.com/lightspeed-core/lightspeed-stack/blob/7503ebd/src/models/config.py#L181

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
lpiwowar added a commit to lpiwowar/operator that referenced this pull request May 28, 2026
There were multiple issues with how the operator handled certificates:

1) The lightspeed-stack pod used REQUESTS_CA_BUNDLE and SSL_CERT_FILE
   environment variables, which bypassed the system-configured
   certificates.

2) When a user provided a custom CA certificate, it was expected under
   the cert.crt key in their ConfigMap. This was undocumented and the
   required key name was not obvious.

3) PostgresDB appeared to be configured for mTLS because ssl_ca_file
   was set in postgres.conf and the openshift-service-ca.crt was
   mounted into the PostgresDB pod. This created a false sense of mTLS
   being in place, but with the default pg_hba.conf, client certificate
   verification [1] is not enabled. Neither OGX [3][4] nor Lightspeed
   Stack [5] supports providing client certificates to PostgresDB.

4) PostgresDB SSL connection settings were configured for OGX even
   though they have no effect. OGX does not support configuring the
   SSL mode for its PostgresDB connection [3][4], so the PostgresDB
   certificate verification cannot be strictly enforced on the OGX
   side (the default is "prefer" [2], which does not enforce
   certificate verification and can fall back to unencrypted
   communication). OGX uses a non-strict config mode, so unrecognized
   options are silently ignored.

5) The operator did not watch for changes to ConfigMaps. When the
   content of the CA bundle ConfigMap was updated, the operator did
   not automatically reconcile.

6) Not a bug strictly speaking, but Lightspeed Stack used ssl_mode
   "require" when it could have used "verify-full", which checks both
   that the certificate is signed by a trusted CA and that the server
   hostname matches the CN field in the certificate.

This commit simplifies certificate handling with the following changes:

- Introduce a single combined CA bundle ConfigMap
  (openstack-lightspeed-combined-ca-bundle) containing the system CAs,
  user-provided CA certificates from the OpenStackLightspeed CRD,
  kube-root-ca.crt, and openshift-service-ca.crt. This bundle is
  mounted into all containers in the lightspeed-stack-deployment pod,
  eliminating the need for REQUESTS_CA_BUNDLE and SSL_CERT_FILE.

- When a user specifies a ConfigMap with custom CA certificates,
  iterate over all keys, validate that each holds a valid certificate,
  and append it to the combined CA bundle (resolves openstack-lightspeed#2).

- Stop mounting openshift-service-ca into the Postgres pod and remove
  ssl_ca_file from postgres.conf. These gave a false sense of client
  certificate validation; actually enforcing it requires configuring
  pg_hba.conf [1], and neither OGX [3][4] nor Lightspeed Stack [5]
  currently supports providing client certificates.

- Remove ssl_mode, ca_cert_path, and gss_encmode from
  storage.backends.postgres_backend in ogx_config.yaml. These options
  are not supported by OGX [3][4] and gave a false sense of SSL being
  configured.

- Add a Watch() on ConfigMaps to the reconciler so that whenever a
  user updates the CA bundle ConfigMap, the reconcile loop runs
  automatically.

- Configure Lightspeed Stack with ssl_mode "verify-full" for its
  PostgreSQL connection, ensuring both CA trust and hostname
  verification.

[1]
https://www.postgresql.org/docs/current/ssl-tcp.html#SSL-CLIENT-CERTIFICATES
[2]
https://magicstack.github.io/asyncpg/current/api/index.html#asyncpg.connection.connect
[3]
https://github.com/ogx-ai/ogx/blob/34d7901/src/ogx/core/storage/datatypes.py#L200
[4]
https://github.com/ogx-ai/ogx/blob/34d7901/src/ogx/core/storage/sqlstore/sqlalchemy_sqlstore.py#L125
[5]
https://github.com/lightspeed-core/lightspeed-stack/blob/7503ebd/src/models/config.py#L181

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
lpiwowar added a commit to lpiwowar/operator that referenced this pull request May 29, 2026
There were multiple issues with how the operator handled certificates:

1) The lightspeed-stack pod used REQUESTS_CA_BUNDLE and SSL_CERT_FILE
   environment variables, which bypassed the system-configured
   certificates.

2) When a user provided a custom CA certificate, it was expected under
   the cert.crt key in their ConfigMap. This was undocumented and the
   required key name was not obvious.

3) PostgresDB appeared to be configured for mTLS because ssl_ca_file
   was set in postgres.conf and the openshift-service-ca.crt was
   mounted into the PostgresDB pod. This created a false sense of mTLS
   being in place, but with the default pg_hba.conf, client certificate
   verification [1] is not enabled. Neither OGX [3][4] nor Lightspeed
   Stack [5] supports providing client certificates to PostgresDB.

4) PostgresDB SSL connection settings were configured for OGX even
   though they have no effect. OGX does not support configuring the
   SSL mode for its PostgresDB connection [3][4], so the PostgresDB
   certificate verification cannot be strictly enforced on the OGX
   side (the default is "prefer" [2], which does not enforce
   certificate verification and can fall back to unencrypted
   communication). OGX uses a non-strict config mode, so unrecognized
   options are silently ignored.

5) The operator did not watch for changes to ConfigMaps. When the
   content of the CA bundle ConfigMap was updated, the operator did
   not automatically reconcile.

6) Not a bug strictly speaking, but Lightspeed Stack used ssl_mode
   "require" when it could have used "verify-full", which checks both
   that the certificate is signed by a trusted CA and that the server
   hostname matches the CN field in the certificate.

This commit simplifies certificate handling with the following changes:

- Introduce a single combined CA bundle ConfigMap
  (openstack-lightspeed-combined-ca-bundle) containing the system CAs,
  user-provided CA certificates from the OpenStackLightspeed CRD,
  kube-root-ca.crt, and openshift-service-ca.crt. This bundle is
  mounted into all containers in the lightspeed-stack-deployment pod,
  eliminating the need for REQUESTS_CA_BUNDLE and SSL_CERT_FILE.

- When a user specifies a ConfigMap with custom CA certificates,
  iterate over all keys, validate that each holds a valid certificate,
  and append it to the combined CA bundle (resolves openstack-lightspeed#2).

- Stop mounting openshift-service-ca into the Postgres pod and remove
  ssl_ca_file from postgres.conf. These gave a false sense of client
  certificate validation; actually enforcing it requires configuring
  pg_hba.conf [1], and neither OGX [3][4] nor Lightspeed Stack [5]
  currently supports providing client certificates.

- Remove ssl_mode, ca_cert_path, and gss_encmode from
  storage.backends.postgres_backend in ogx_config.yaml. These options
  are not supported by OGX [3][4] and gave a false sense of SSL being
  configured.

- Add a Watch() on ConfigMaps to the reconciler so that whenever a
  user updates the CA bundle ConfigMap, the reconcile loop runs
  automatically.

- Configure Lightspeed Stack with ssl_mode "verify-full" for its
  PostgreSQL connection, ensuring both CA trust and hostname
  verification.

[1]
https://www.postgresql.org/docs/current/ssl-tcp.html#SSL-CLIENT-CERTIFICATES
[2]
https://magicstack.github.io/asyncpg/current/api/index.html#asyncpg.connection.connect
[3]
https://github.com/ogx-ai/ogx/blob/34d7901/src/ogx/core/storage/datatypes.py#L200
[4]
https://github.com/ogx-ai/ogx/blob/34d7901/src/ogx/core/storage/sqlstore/sqlalchemy_sqlstore.py#L125
[5]
https://github.com/lightspeed-core/lightspeed-stack/blob/7503ebd/src/models/config.py#L181

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
lpiwowar added a commit to lpiwowar/operator that referenced this pull request May 29, 2026
There were multiple issues with how the operator handled certificates:

1) The lightspeed-stack pod used REQUESTS_CA_BUNDLE and SSL_CERT_FILE
   environment variables, which bypassed the system-configured
   certificates.

2) When a user provided a custom CA certificate, it was expected under
   the cert.crt key in their ConfigMap. This was undocumented and the
   required key name was not obvious.

3) PostgresDB appeared to be configured for mTLS because ssl_ca_file
   was set in postgres.conf and the openshift-service-ca.crt was
   mounted into the PostgresDB pod. This created a false sense of mTLS
   being in place, but with the default pg_hba.conf, client certificate
   verification [1] is not enabled. Neither OGX [3][4] nor Lightspeed
   Stack [5] supports providing client certificates to PostgresDB.

4) PostgresDB SSL connection settings were configured for OGX even
   though they have no effect. OGX does not support configuring the
   SSL mode for its PostgresDB connection [3][4], so the PostgresDB
   certificate verification cannot be strictly enforced on the OGX
   side (the default is "prefer" [2], which does not enforce
   certificate verification and can fall back to unencrypted
   communication). OGX uses a non-strict config mode, so unrecognized
   options are silently ignored.

5) The operator did not watch for changes to ConfigMaps. When the
   content of the CA bundle ConfigMap was updated, the operator did
   not automatically reconcile.

6) Not a bug strictly speaking, but Lightspeed Stack used ssl_mode
   "require" when it could have used "verify-full", which checks both
   that the certificate is signed by a trusted CA and that the server
   hostname matches the CN field in the certificate.

This commit simplifies certificate handling with the following changes:

- Introduce a single CA bundle ConfigMap
  (openstack-lightspeed-ca-bundle) containing the system CAs,
  user-provided CA certificates from the OpenStackLightspeed CRD,
  kube-root-ca.crt, and openshift-service-ca.crt. This bundle is
  mounted into all containers in the lightspeed-stack-deployment pod,
  eliminating the need for REQUESTS_CA_BUNDLE and SSL_CERT_FILE.

- When a user specifies a ConfigMap with custom CA certificates,
  iterate over all keys, validate that each holds a valid certificate,
  and append it to the CA bundle (resolves openstack-lightspeed#2).

- Stop mounting openshift-service-ca into the Postgres pod and remove
  ssl_ca_file from postgres.conf. These gave a false sense of client
  certificate validation; actually enforcing it requires configuring
  pg_hba.conf [1], and neither OGX [3][4] nor Lightspeed Stack [5]
  currently supports providing client certificates.

- Remove ssl_mode, ca_cert_path, and gss_encmode from
  storage.backends.postgres_backend in ogx_config.yaml. These options
  are not supported by OGX [3][4] and gave a false sense of SSL being
  configured.

- Add a Watch() on ConfigMaps to the reconciler so that whenever a
  user updates the CA bundle ConfigMap, the reconcile loop runs
  automatically.

- Configure Lightspeed Stack with ssl_mode "verify-full" for its
  PostgreSQL connection, ensuring both CA trust and hostname
  verification.

[1]
https://www.postgresql.org/docs/current/ssl-tcp.html#SSL-CLIENT-CERTIFICATES
[2]
https://magicstack.github.io/asyncpg/current/api/index.html#asyncpg.connection.connect
[3]
https://github.com/ogx-ai/ogx/blob/34d7901/src/ogx/core/storage/datatypes.py#L200
[4]
https://github.com/ogx-ai/ogx/blob/34d7901/src/ogx/core/storage/sqlalchemy_sqlstore.py#L125
[5]
https://github.com/lightspeed-core/lightspeed-stack/blob/7503ebd/src/models/config.py#L181

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant