Skip to content

Commit 5396096

Browse files
authored
Merge pull request ceph#65806 from rkachach/fix_issue_73384
mgr/cephadm: add the VIP to the internal mgmt-gateway cert SAN list Reviewed-by: Adam King <[email protected]>
2 parents e7aa7da + e17fb64 commit 5396096

File tree

3 files changed

+62
-7
lines changed

3 files changed

+62
-7
lines changed

src/pybind/mgr/cephadm/services/cephadmservice.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -323,9 +323,9 @@ def get_dependencies(cls, mgr: "CephadmOrchestrator",
323323
def __init__(self, mgr: "CephadmOrchestrator"):
324324
self.mgr: "CephadmOrchestrator" = mgr
325325

326-
def get_self_signed_certificates_with_label(self, svc_spec: ServiceSpec, daemon_spec: CephadmDaemonDeploySpec, label: str) -> TLSCredentials:
326+
def get_self_signed_certificates_with_label(self, svc_spec: ServiceSpec, daemon_spec: CephadmDaemonDeploySpec, label: str, ip_addr: Optional[str] = None) -> TLSCredentials:
327327
svc_name = svc_spec.service_name()
328-
ip = self.mgr.inventory.get_addr(daemon_spec.host)
328+
ip = ip_addr or self.mgr.inventory.get_addr(daemon_spec.host)
329329
host_fqdn = self.mgr.get_fqdn(daemon_spec.host)
330330
tls_creds = self.mgr.cert_mgr.get_self_signed_tls_credentials(svc_name, host_fqdn, label)
331331
if not tls_creds:

src/pybind/mgr/cephadm/services/mgmt_gateway.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,8 @@ def generate_config(self, daemon_spec: CephadmDaemonDeploySpec) -> Tuple[Dict[st
120120
'enable_oauth2_proxy': bool(oauth2_proxy_endpoints),
121121
}
122122

123-
tls_creds = self.get_self_signed_certificates_with_label(svc_spec, daemon_spec, INTERNAL_CERT_LABEL)
123+
ip = self.get_mgmt_gw_ip(svc_spec, daemon_spec)
124+
tls_creds = self.get_self_signed_certificates_with_label(svc_spec, daemon_spec, INTERNAL_CERT_LABEL, ip)
124125
daemon_config = {
125126
"files": {
126127
"nginx.conf": self.mgr.template.render(self.SVC_TEMPLATE_PATH, main_context),

src/pybind/mgr/cephadm/tests/test_services.py

Lines changed: 58 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4990,7 +4990,7 @@ class TestMgmtGateway:
49904990
@patch("cephadm.services.cephadmservice.CephadmService.get_certificates",
49914991
lambda instance, dspec, ips=None: TLSCredentials(ceph_generated_cert, ceph_generated_key))
49924992
@patch("cephadm.services.mgmt_gateway.MgmtGatewayService.get_self_signed_certificates_with_label",
4993-
lambda instance, svc_spec, dspec, label: TLSCredentials(ceph_generated_cert, ceph_generated_key))
4993+
lambda instance, svc_spec, dspec, label, ip: TLSCredentials(ceph_generated_cert, ceph_generated_key))
49944994
@patch("cephadm.module.CephadmOrchestrator.get_mgr_ip", lambda _: '::1')
49954995
@patch('cephadm.cert_mgr.CertMgr.get_root_ca', lambda instance: cephadm_root_ca)
49964996
@patch("cephadm.services.mgmt_gateway.get_dashboard_endpoints", lambda _: (["ceph-node-2:8443", "ceph-node-2:8443"], "https"))
@@ -5236,7 +5236,7 @@ def get_services_endpoints(name):
52365236
@patch("cephadm.services.cephadmservice.CephadmService.get_certificates",
52375237
lambda instance, dspec, ips=None: TLSCredentials(ceph_generated_cert, ceph_generated_key))
52385238
@patch("cephadm.services.mgmt_gateway.MgmtGatewayService.get_self_signed_certificates_with_label",
5239-
lambda instance, svc_spec, dspec, label: TLSCredentials(ceph_generated_cert, ceph_generated_key))
5239+
lambda instance, svc_spec, dspec, label, ip: TLSCredentials(ceph_generated_cert, ceph_generated_key))
52405240
@patch("cephadm.module.CephadmOrchestrator.get_mgr_ip", lambda _: '::1')
52415241
@patch('cephadm.cert_mgr.CertMgr.get_root_ca', lambda instance: cephadm_root_ca)
52425242
@patch("cephadm.services.mgmt_gateway.get_dashboard_endpoints", lambda _: (["ceph-node-2:8443", "ceph-node-2:8443"], "https"))
@@ -5574,12 +5574,66 @@ def get_services_endpoints(name):
55745574
use_current_daemon_image=False,
55755575
)
55765576

5577+
@patch("cephadm.serve.CephadmServe._run_cephadm")
5578+
@patch("cephadm.services.mgmt_gateway.MgmtGatewayService.get_service_endpoints")
5579+
@patch("cephadm.services.mgmt_gateway.MgmtGatewayService.get_service_discovery_endpoints")
5580+
@patch("cephadm.services.mgmt_gateway.MgmtGatewayService.get_self_signed_certificates_with_label")
5581+
@patch("cephadm.services.cephadmservice.CephadmService.get_certificates",
5582+
lambda instance, dspec, ips=None: TLSCredentials(ceph_generated_cert, ceph_generated_key))
5583+
@patch("cephadm.module.CephadmOrchestrator.get_mgr_ip", lambda _: '::1')
5584+
@patch('cephadm.cert_mgr.CertMgr.get_root_ca', lambda instance: cephadm_root_ca)
5585+
@patch("cephadm.services.mgmt_gateway.get_dashboard_endpoints",
5586+
lambda _: (["ceph-node-2:8443", "ceph-node-2:8443"], "https"))
5587+
def test_mgmt_gateway_internal_cert_san_includes_vip(
5588+
self,
5589+
get_self_signed_mock,
5590+
get_service_discovery_endpoints_mock,
5591+
get_service_endpoints_mock,
5592+
_run_cephadm,
5593+
cephadm_module: CephadmOrchestrator,
5594+
):
5595+
vip = "10.0.0.200"
5596+
5597+
def get_services_endpoints(name):
5598+
if name == 'prometheus':
5599+
return ["192.168.100.100:9095", "192.168.100.101:9095"]
5600+
if name == 'grafana':
5601+
return ["ceph-node-2:3000", "ceph-node-2:3000"]
5602+
if name == 'alertmanager':
5603+
return ["192.168.100.100:9093", "192.168.100.102:9093"]
5604+
if name == 'oauth2-proxy':
5605+
return []
5606+
return []
5607+
5608+
_run_cephadm.side_effect = async_side_effect(('{}', '', 0))
5609+
get_service_endpoints_mock.side_effect = get_services_endpoints
5610+
get_service_discovery_endpoints_mock.return_value = ["ceph-node-0:8765", "ceph-node-2:8765"]
5611+
get_self_signed_mock.return_value = TLSCredentials(ceph_generated_cert, ceph_generated_key)
5612+
5613+
server_port = 5555
5614+
spec = MgmtGatewaySpec(
5615+
port=server_port,
5616+
virtual_ip=vip, # HA mode
5617+
ssl_cert=ceph_generated_cert,
5618+
ssl_key=ceph_generated_key,
5619+
)
5620+
5621+
with with_host(cephadm_module, 'ceph-node'):
5622+
with with_service(cephadm_module, spec):
5623+
# Ensure VIP was used when minting the internal cert (so it goes into SANs)
5624+
# get_self_signed_certificates_with_label(svc_spec, daemon_spec, label, ip)
5625+
args, _ = get_self_signed_mock.call_args
5626+
assert args[2] == 'internal'
5627+
assert args[3] == vip
5628+
deployed = json.loads(_run_cephadm.call_args.kwargs['stdin'])
5629+
assert deployed['config_blobs']['files']['nginx_internal.crt'] == ceph_generated_cert
5630+
55775631
@patch("cephadm.serve.CephadmServe._run_cephadm")
55785632
@patch("cephadm.services.mgmt_gateway.MgmtGatewayService.get_service_endpoints")
55795633
@patch("cephadm.services.cephadmservice.CephadmService.get_certificates",
55805634
lambda instance, dspec, ips=None: TLSCredentials(ceph_generated_cert, ceph_generated_key))
55815635
@patch("cephadm.services.mgmt_gateway.MgmtGatewayService.get_self_signed_certificates_with_label",
5582-
lambda instance, svc_spec, dspec, label: TLSCredentials(ceph_generated_cert, ceph_generated_key))
5636+
lambda instance, svc_spec, dspec, label, ip: TLSCredentials(ceph_generated_cert, ceph_generated_key))
55835637
@patch("cephadm.module.CephadmOrchestrator.get_mgr_ip", lambda _: '::1')
55845638
@patch('cephadm.cert_mgr.CertMgr.get_root_ca', lambda instance: cephadm_root_ca)
55855639
@patch("cephadm.services.mgmt_gateway.get_dashboard_endpoints", lambda _: (["ceph-node-2:8443", "ceph-node-2:8443"], "https"))
@@ -5593,7 +5647,7 @@ def test_oauth2_proxy_service(self, get_service_endpoints_mock, _run_cephadm, ce
55935647
@patch("cephadm.services.oauth2_proxy.OAuth2ProxyService.get_certificates",
55945648
lambda instance, dspec, ips=None: TLSCredentials(ceph_generated_cert, ceph_generated_key))
55955649
@patch("cephadm.services.mgmt_gateway.MgmtGatewayService.get_self_signed_certificates_with_label",
5596-
lambda instance, svc_spec, dspec, label: TLSCredentials(ceph_generated_cert, ceph_generated_key))
5650+
lambda instance, svc_spec, dspec, label, ip: TLSCredentials(ceph_generated_cert, ceph_generated_key))
55975651
@patch("cephadm.module.CephadmOrchestrator.get_mgr_ip", lambda _: '::1')
55985652
@patch('cephadm.cert_mgr.CertMgr.get_root_ca', lambda instance: cephadm_root_ca)
55995653
@patch("cephadm.services.mgmt_gateway.get_dashboard_endpoints", lambda _: (["ceph-node-2:8443", "ceph-node-2:8443"], "https"))

0 commit comments

Comments
 (0)