@@ -481,16 +481,31 @@ def _get_volumes(self) -> typing.List[k8s.Volume]:
481
481
482
482
def _get_ingress (self ) -> k8s .KubeIngress :
483
483
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 )]
487
502
tls = self ._get_ingress_tls ()
488
503
489
504
annotations = {
490
505
"kubernetes.io/tls-acme" : "true" ,
491
- "external-dns.alpha.kubernetes.io/hostname" : self .host ,
506
+ "external-dns.alpha.kubernetes.io/hostname" : self .dns_name ,
492
507
"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 ,
494
509
"cert-manager.io/issue-temporary-certificate" : "true" ,
495
510
"cert-manager.io/issuer" : "letsencrypt-prod" ,
496
511
"acme.cert-manager.io/http01-edit-in-place" : "true" ,
@@ -504,7 +519,7 @@ def _get_ingress(self) -> k8s.KubeIngress:
504
519
elif self .service_topology .ingress .get ("alternative_names" , []):
505
520
alternative_names = self .service_topology .ingress ["alternative_names" ]
506
521
for alt_name in alternative_names :
507
- if alt_name != self .host :
522
+ if alt_name != self .dns_name :
508
523
dns_names += f",{ alt_name } "
509
524
rules .append (self ._get_ingress_rule (alt_name ))
510
525
annotations .update ({"cert-manager.io/dns-names" : dns_names })
@@ -540,11 +555,11 @@ def _get_ingress_rule(self, host: str) -> k8s.IngressRule:
540
555
)
541
556
542
557
def _get_ingress_tls (self ) -> typing .List [k8s .IngressTls ]:
543
- hosts = [self .host ]
558
+ hosts = [self .dns_name ]
544
559
if self .service_topology .ingress .get ("alternative_names" , []):
545
560
alternative_names = self .service_topology .ingress ["alternative_names" ]
546
561
for alt_name in alternative_names :
547
- if alt_name != self .host :
562
+ if alt_name != self .dns_name :
548
563
hosts .append (alt_name )
549
564
return [k8s .IngressTls (hosts = hosts , secret_name = f"{ self .node .id } -tls" )]
550
565
0 commit comments