我有Traefik与Consul KV商店一起运行。如何从Consul中的极限证书存储中删除记录,或强制仅对一个域/前端进行续订?
问题:不知何故,其中一个前端域名已使用错误的证书保存。它引用了来自不同域的证书(也是Traefik的前端)。
我能够通过获取traefik/acme/account/object
密钥的consul值来检查acme json,解码并解压缩它,这是来自Certs
数组的记录:
{
"Domains":{
"Main":"my.domain1.com",
"SANs":null
},
"Certificate":{
"Domain":"my.domain2.com",
"CertURL":"https://acme-v02.api.letsencrypt.org/acme/cert/idfordomain2",
"CertStableURL":"https://acme-v02.api.letsencrypt.org/acme/cert/idfordomain2",
"PrivateKey":"...",
"Certificate":"..."
}
}
正如您所看到的,my.domain2.com的证书已根据my.domain1.com的记录保存,因此这会导致浏览器中的证书警告无效。我想清除整个记录,以便Traefik获得新的证书。我正在使用Consul并将其保存为二进制文件,所以我不能只编辑json。
最简单的方法是使用consul CLI实用程序。该实用程序还用于运行服务器,理想情况下,您应使用与用于服务器的版本相同的版本。确保导出环境变量:CONSUL_HTTP_ADDR
- 指向consul服务器,默认为http://127.0.0.1:8500
和CONSUL_HTTP_TOKEN
- 如果启用了服务器上的ACL,则为ACL令牌,因为它应该在生产环境中。
然后你只需运行以下命令
consul kv put traefik/acme/account/object @traefik.json
其中trafik.json
是具有更新值的json文件,您希望在Consul KV商店中更改。
或者您可以使用HTTP API:Consul Create/Update Key
curl -X PUT --data @traefik.json http://<your-server-url>:<port>/v1/kv/traefik/acme/account/object
如果您的服务器启用了ACL,则需要向curl
请求添加以下标头,并向您发出<your-acl-token>
:-H "X-Consul-Token: <your-acl-token>"