Генерация сертификатов с использованием Certbot (как CronJob) в Kubernetes

Я безуспешно пытался создать простую команду "run" с использованием kubectl, в результате чего контейнер запускался и передавался (частично) в качестве аргументов для первоначального создания моих сертификатов (что я первоначально сделаю вручную через PowerShell) и мог сделать с некоторыми входными данными. от сообщества.

Моя среда:

  • (Локально) Windows 10 с PowerShell
  • (Удаленный) Azure Kubernetes Cluster

Мои усилия состоят из двух ключевых команд, первой из которых является создание переопределений (в JSON) для контейнера (в первую очередь, чтобы я мог смонтировать общие файловые ресурсы Azure, где я хочу хранить сертификаты):

$override= '{ "spec": { "template": { "spec": { "containers": [ { "name": "certbot", "image": "certbot/certbot", "stdin": true, "tty": true, "volumeMounts": [{ "name": "certdata", "mountPath": "/etc/letsencrypt" }] } ], "volumes": [{ "name": "certdata", "persistentVolumeClaim": { "claimName": "azure-fileshare" } }] } } } }' | ConvertTo-Json

Затем следует команда kubectl run, которая будет использоваться в качестве основы для CronJob (создание CronJob само по себе является моей следующей задачей, как только я получу эту работу правильно):

kubectl run -i --rm --tty certbot --namespace=prod --overrides=$override --image=certbot/certbot -- certonly --manual

Я пробовал несколько вариантов, и этот подход кажется самым чистым. Тем не менее, в настоящее время я получаю следующий ответ от Kubernetes:

Error attaching, falling back to logs: unable to upgrade connection: container certbot not found in pod certbot-9df67bd65-w96rq_prod
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Certbot doesn't know how to automatically configure the web server on this system. However, it can still get a certificate for you. Please run "certbot certonly" to do so. You'll need to manually configure your web server to use the resulting certificate.

Последняя часть предупреждения указывает на то, что certbot не получает ни одного из аргументов (в данном случае "certonly" и "--manual"), но я не могу понять, в чем именно я ошибаюсь. Я чувствую, что вменяемый проверил команды как с документами Kubernetes, так и с certbot и не вижу никаких очевидных проблем.

Кто-нибудь может указать Гремлин здесь?

Примечание. Я успешно протестировал этот подход с использованием Docker локально и сейчас пытаюсь воссоздать его в Azure.

1 ответ

Решение

Для этого вам не нужно создавать изображение из изображения, просто создайте модуль, например:

apiVersion: v1
kind: Pod
metadata:
  name: certbot
spec:
  containers:
  - name: certbot
    image: certbot/certbot
    command: ["/bin/sh"] << this overrides entrypoint
  restartPolicy: Never

https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/

Другие вопросы по тегам