Во-первых, знайте, что ваше Job
определение является действительным, но значение spec.template.metadata.labels.app: certbot-generate
не не совпадает с вашим Service
определением spec.selector.app: certbot-generator
: один certbot-generate
, второй certbot-generator
.Таким образом, модуль, выполняемый контроллером задания, никогда не добавляется в качестве конечной точки к службе.
Настройте одну или другую, но они должны совпадать, и это может просто сработать:)
ХотяЯ не уверен, что использование Service
с селектором, предназначенным для короткоживущих модулей с контроллера Job
, не будет работать, ни с простым Pod
, как вы тестировали.Модуль certbot-randomId
, созданный заданием (или любым другим простым модулем, который вы создаете), занимает в общей сложности около 15 секунд для запуска / сбоя, а проверка HTTP запускается через несколько секунд после запуска: для меня не ясно, чтобыло бы достаточно времени, чтобы kubernetes уже работал между службой и модулем.
Мы можем с уверенностью предположить, что Service
действительно работает, потому что вы упомянули, что тестировали разрешение DNS, поэтому вы можете легко убедитьсяэто не проблема синхронизации, добавив sleep 10
(или больше!), чтобы дать больше времени для добавления модуля в качестве конечной точки к службе и соответствующим образом проксировать до вызова HTTP, запускаемого certbot,Просто измените вашу команду Job
и аргументы для:
command: ["/bin/sh"]
args: ["-c", "sleep 10 && certbot certonly --noninteractive --agree-tos --staging --standalone -d staging.ishankhare.com -m me@ishankhare.com"]
И здесь, это также может сработать:)
При этом, я горячо рекомендую вамиспользовать cert-manager , который вы можете легко установить с помощью стабильной диаграммы Хелма : вводимый им пользовательский ресурс Certificate
сохранит ваш сертификат в Secret
, что упрощает повторное использование с любого ресурса K8s, а также автоматически выполняет обновление, так что вы можете просто забыть обо всем этом.