Генерация сертификатов с использованием Certbot (как CronJob) в Kubernetes - PullRequest
0 голосов
/ 15 декабря 2018

Я безуспешно пытался создать простую команду «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 Ответ

0 голосов
/ 15 декабря 2018

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

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/

...