Я сейчас создаю сервис, который использует acme / autocert.Чтобы использовать этот сервис с более чем 1 репликой, мне пришлось написать постоянный интерфейс кеша, такой как DirCache.Затем я заметил, что после перезапуска службы все действительные сертификаты в Cache игнорируются при запуске.Следующая последовательность происходит постоянно:
- Кэш положить acme_account + ключ (даже если он существует в кэше)
- Кэш получить acme_account + ключ
- Получить кэшmy.domain.net (возвращает кэшированный сертификат)
- Кэш get acme_account + ключ
- Кэш положил my.domain.net + токен
- Кэш положил HASH + http-01
- Удаление кэша HASH + http-01
- Удаление кэша my.domain.net + токен
- Кэш положить my.domain.net (поставить новый сертификат)
Это правильное поведение?Потому что каждая реплика создаст свой собственный сертификат, а постоянный кэш невозможен при этих обстоятельствах
Вот мой менеджер фабрики
func NewManager(d *db.DynamoDB, staging bool) *Manager {
manager := &Manager{
CertCache: NewPersistentCertCache(d),
}
directoryURL := acme.LetsEncryptURL
if staging {
directoryURL = LetsEncryptStagingURL
log.Infof("Using CA staging environment")
}
log.Infof("CA URI %s", directoryURL)
client := &acme.Client{
DirectoryURL: directoryURL,
}
manager.AcmeManager = &autocert.Manager{
Prompt: autocert.AcceptTOS,
HostPolicy: manager.AllowHostPolicy,
Cache: manager.CertCache,
Client: client,
}
return manager
}