公司的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上,没备案直接就会被封站。