Skip to content

Commit b134e97

Browse files
deployment: enforce hostname max length 64 characters
1 parent 105f2c8 commit b134e97

File tree

2 files changed

+26
-8
lines changed

2 files changed

+26
-8
lines changed

deployments/sequencer/app/service.py

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -481,16 +481,31 @@ def _get_volumes(self) -> typing.List[k8s.Volume]:
481481

482482
def _get_ingress(self) -> k8s.KubeIngress:
483483
domain = self.service_topology.ingress["domain"]
484-
self.host = f"{self.node.id}.{self.namespace}.{domain}"
485-
dns_names = self.host
486-
rules = [self._get_ingress_rule(self.host)]
484+
default_dns_name = f"{self.node.id}.{self.namespace}.{domain}"
485+
dns_name = self.service_topology.ingress.get("dns_name", None)
486+
if dns_name is not None:
487+
if dns_name.endswith("."):
488+
raise ValueError(f"dns_name '{dns_name}' should not end with a dot.")
489+
elif dns_name.endswith(domain):
490+
raise ValueError(
491+
f"dns_name '{dns_name}' should not end with the domain '{domain}'."
492+
)
493+
self.dns_name = f"{dns_name}.{domain}"
494+
else:
495+
self.dns_name = default_dns_name
496+
if len(self.dns_name) > 64:
497+
raise ValueError(
498+
f"Host name '{self.dns_name}' exceeds the maximum length of 64 characters."
499+
)
500+
dns_names = self.dns_name
501+
rules = [self._get_ingress_rule(self.dns_name)]
487502
tls = self._get_ingress_tls()
488503

489504
annotations = {
490505
"kubernetes.io/tls-acme": "true",
491-
"external-dns.alpha.kubernetes.io/hostname": self.host,
506+
"external-dns.alpha.kubernetes.io/hostname": self.dns_name,
492507
"external-dns.alpha.kubernetes.io/ingress-hostname-source": "annotation-only",
493-
"cert-manager.io/common-name": self.host,
508+
"cert-manager.io/common-name": self.dns_name,
494509
"cert-manager.io/issue-temporary-certificate": "true",
495510
"cert-manager.io/issuer": "letsencrypt-prod",
496511
"acme.cert-manager.io/http01-edit-in-place": "true",
@@ -504,7 +519,7 @@ def _get_ingress(self) -> k8s.KubeIngress:
504519
elif self.service_topology.ingress.get("alternative_names", []):
505520
alternative_names = self.service_topology.ingress["alternative_names"]
506521
for alt_name in alternative_names:
507-
if alt_name != self.host:
522+
if alt_name != self.dns_name:
508523
dns_names += f",{alt_name}"
509524
rules.append(self._get_ingress_rule(alt_name))
510525
annotations.update({"cert-manager.io/dns-names": dns_names})
@@ -540,11 +555,11 @@ def _get_ingress_rule(self, host: str) -> k8s.IngressRule:
540555
)
541556

542557
def _get_ingress_tls(self) -> typing.List[k8s.IngressTls]:
543-
hosts = [self.host]
558+
hosts = [self.dns_name]
544559
if self.service_topology.ingress.get("alternative_names", []):
545560
alternative_names = self.service_topology.ingress["alternative_names"]
546561
for alt_name in alternative_names:
547-
if alt_name != self.host:
562+
if alt_name != self.dns_name:
548563
hosts.append(alt_name)
549564
return [k8s.IngressTls(hosts=hosts, secret_name=f"{self.node.id}-tls")]
550565

deployments/sequencer/schemas/deployment_config_schema.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@
4646
"alternative_names": {
4747
"type": "array",
4848
"items": { "type": "string" }
49+
},
50+
"dns_name": {
51+
"type": "string"
4952
}
5053
},
5154
"required": ["domain", "internal", "rules"]

0 commit comments

Comments
 (0)