]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/cephadm: add certificate support and service spec for node-proxy 67093/head
authorGuillaume Abrioux <gabrioux@ibm.com>
Tue, 27 Jan 2026 14:50:46 +0000 (15:50 +0100)
committerGuillaume Abrioux <gabrioux@ibm.com>
Tue, 27 Jan 2026 15:10:33 +0000 (16:10 +0100)
This adds the proper certificate management and service spec support
for the node-proxy service.

It enables proper SSL certificate handling for node-proxy
daemons deployed via cephadm.

Fixes: https://tracker.ceph.com/issues/74587
Signed-off-by: Guillaume Abrioux <gabrioux@ibm.com>
src/pybind/mgr/cephadm/module.py
src/pybind/mgr/cephadm/services/node_proxy.py
src/python-common/ceph/deployment/service_spec.py

index aec32f1fb7b0c664354bcfde985ff249225c7a43..91789c8673b4b9446fb9f8928582b326f50d86cd 100644 (file)
@@ -3825,6 +3825,7 @@ Then run the following:
                 'jaeger-agent': PlacementSpec(host_pattern='*'),
                 'jaeger-collector': PlacementSpec(count=1),
                 'jaeger-query': PlacementSpec(count=1),
+                'node-proxy': PlacementSpec(host_pattern='*'),
                 SMBService.TYPE: PlacementSpec(count=1),
             }
             spec.placement = defaults[spec.service_type]
index 299a606c58b77644b8d7f6966b4bc7b8c33dfcce..a760c223352de7ab74ba4bfabcd3c9f1fddedfec 100644 (file)
@@ -26,6 +26,7 @@ class NodeProxy(CephService):
         if not self.mgr.http_server.agent:
             raise OrchestratorError('Cannot deploy node-proxy before creating cephadm endpoint')
 
+        super().register_for_certificates(daemon_spec)
         keyring = self.get_keyring_with_caps(self.get_auth_entity(daemon_id, host=host), [])
         daemon_spec.keyring = keyring
         self.mgr.node_proxy_cache.update_keyring(host, keyring)
index 932044741ca6b704fbe1ed9e6630b7a3616b05be..0dd5a286d8924c04f7c79bef6e0a15b636d537c7 100644 (file)
@@ -873,6 +873,7 @@ class ServiceSpec(object):
         'alertmanager': {'user_cert_allowed': False, 'scope': 'host', 'requires_ca_cert': False},
         'ceph-exporter': {'user_cert_allowed': False, 'scope': 'host', 'requires_ca_cert': False},
         'node-exporter': {'user_cert_allowed': False, 'scope': 'host', 'requires_ca_cert': False},
+        'node-proxy': {'user_cert_allowed': False, 'scope': 'host', 'requires_ca_cert': False},
         # 'loki'        : {'user_cert_allowed': False, 'scope': 'host'},
         # 'promtail'    : {'user_cert_allowed': False, 'scope': 'host'},
         # 'jaeger-agent': {'user_cert_allowed': False, 'scope': 'host'},
@@ -912,6 +913,7 @@ class ServiceSpec(object):
             'jaeger-collector': TracingSpec,
             'jaeger-query': TracingSpec,
             'jaeger-tracing': TracingSpec,
+            'node-proxy': NodeProxySpec,
             SMBSpec.service_type: SMBSpec,
         }.get(service_type, cls)
         if ret == ServiceSpec and not service_type:
@@ -3890,4 +3892,15 @@ class SMBSpec(ServiceSpec):
         return obj
 
 
+class NodeProxySpec(ServiceSpec):
+    def __init__(self,
+                 service_type: str,
+                 placement: Optional[PlacementSpec] = None,
+                 ) -> None:
+        assert service_type == 'node-proxy'
+        super(NodeProxySpec, self).__init__('node-proxy', placement=placement)
+        self.ssl: bool = True
+        self.validate()
+
+
 yaml.add_representer(SMBSpec, ServiceSpec.yaml_representer)