公司的SAAS平台,本来多租户的证书管理模式预计是这样的:
给每个租户单独设立一个 xyz.alibaba.com 的子域名,然后用cert-manager管理证书,只要annouce一个 xyz.alibaba.com 的ingress出来,就会自动签发证书。
然而研发觉得这样也是很不爽,连annouce ingress也不愿意,就想客户的域名直接解析一个 xyz.客户.com 的 cname 过来,然后就自动签发证书。
这个需求真的是很有意思,也只有caddy能很轻松的这么实现,方法如下:
一、做好一个caddy的deploy和service,前面直接顶一个Loadbalance
二、配置caddy的配置
/etc/caddy/Caddyfile 的内容
{
debug
on_demand_tls {
ask http://localhost:5555/
}
}
https:// {
tls {
on_demand
}
handle {
reverse_proxy https://alibaba.com {
header_up Host alibaba.com
}
}
respond "Welcome to dynamic certificate signing!" 200
}
http://localhost:5555 {
respond 200
}
注意上面,Caddy对这种随便的域名,是要求去问一下后端的服务是否对这个域名进行签发的,这是为了防止滥用。
我们直接做个虚拟服务,回应200即可
这样的做法比较直接了当,当然只适用于国外,国内就麻烦了,未知的域名解析到你的ip上,没备案直接就会被封站。