{"id":29028257,"url":"https://github.com/drone076/cert-manager-webhook-vkcloud","last_synced_at":"2026-04-28T17:01:16.362Z","repository":{"id":297914125,"uuid":"998263582","full_name":"drone076/cert-manager-webhook-vkcloud","owner":"drone076","description":"VK Cloud DNS cert-manager ACME webhook","archived":false,"fork":false,"pushed_at":"2025-06-12T07:27:29.000Z","size":70,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-26T07:06:11.025Z","etag":null,"topics":["cert-manager-webhook","kubernetes","vkcloud"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/drone076.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-08T08:20:11.000Z","updated_at":"2025-06-09T16:02:27.000Z","dependencies_parsed_at":"2025-06-08T10:29:32.253Z","dependency_job_id":null,"html_url":"https://github.com/drone076/cert-manager-webhook-vkcloud","commit_stats":null,"previous_names":["drone076/cert-manager-webhook-vkcloud"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/drone076/cert-manager-webhook-vkcloud","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drone076%2Fcert-manager-webhook-vkcloud","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drone076%2Fcert-manager-webhook-vkcloud/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drone076%2Fcert-manager-webhook-vkcloud/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drone076%2Fcert-manager-webhook-vkcloud/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/drone076","download_url":"https://codeload.github.com/drone076/cert-manager-webhook-vkcloud/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drone076%2Fcert-manager-webhook-vkcloud/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32390067,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-28T14:34:11.604Z","status":"ssl_error","status_checked_at":"2026-04-28T14:32:37.009Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cert-manager-webhook","kubernetes","vkcloud"],"created_at":"2025-06-26T07:06:10.626Z","updated_at":"2026-04-28T17:01:16.342Z","avatar_url":"https://github.com/drone076.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":" # VK Cloud DNS ACME webhook\n \n **cert-manager-webhook-vkcloud** — это [webhook](https://cert-manager.io/docs/configuration/acme/dns01/#webhook) для [cert-manager](https://cert-manager.io), предназначенный для автоматической проверки доменов через DNS REST API **VK Cloud**. \n\n Этот webhook позволяет выписывать TLS-сертификаты через Let's Encrypt (или другой ACME провайдер), используя DNS-01 challenge и автоматически создавая TXT-записи в зоне VK Cloud DNS.\n\n ## Почему standalone?\n\n В отличие от большинства решений, которые требуют зависимости от [`jetstack/cert-manager`](https://github.com/jetstack/cert-manager) и настройки авторизации, этот webhook может быть установлен **без зависимости от jetstack**, как самостоятельный компонент. Это удобно, если:\n\n - Вы хотите минимизировать количество зависимостей.\n - У вас уже установлен cert-manager и вы просто добавляете новый DNS-провайдер.\n - Вы работаете в частной Kubernetes-среде и предпочитаете минимальные инсталляции.\n\n ## Возможности\n\n - Поддержка DNS-01 challenge через REST API VK Cloud\n - Простая интеграция с cert-manager\n - Поддержка нескольких доменов\n - Совместимость с Let's Encrypt и другими ACME-провайдерами\n\n ---\n\n ## Требования\n\n - Kubernetes 1.16+\n - cert-manager v1.6+ (установлен отдельно)\n - Доступ к VK Cloud (логин, пароль, ID проекта, домен)\n\n ---\n\n ## Установка\n\n ### 1. Установите cert-manager (если еще не установлен)\n\n Инструкция:  \n [https://cert-manager.io/docs/installation/](https://cert-manager.io/docs/installation/) \n\n ### 2. Клонируйте репозиторий\n\n ```bash\n git clone https://github.com/drone076/cert-manager-webhook-vkcloud.git \n cd cert-manager-webhook-vkcloud\n ```\n\n ### 3. Установите webhook с помощью Helm\n\n ```bash\n helm install -n cert-manager-webhook-vkcloud ./deploy/cert-manager-webhook-vkcloud --namespace cert-manager -f ./deploy/cert-manager-webhook-vkcloud/values.yaml\n ```\n\n \u003e Обратите внимание: webhook будет запущен как Deployment и зарегистрирован в cert-manager по имени `groupName`, указанному в коде (например: `acme.cloud.vk.com`).\n\n### 4. Удаление с помощью Helm\n\n```bash\nhelm uninstall -n cert-manager cert-manager-webhook-vkcloud\n```\n\n---\n\n ## Настройка\n\n ### 1. Создайте секрет с учетными данными VK Cloud\n\n Сохраните файл `vkcloud-secret.yaml`:\n\n ```yaml\n apiVersion: v1\n kind: Secret\n metadata:\n   name: vkcloud-secret\n   namespace: cert-manager\n type: Opaque\n stringData:\n   os_auth_url: \"https://infra.mail.ru:35357/v3/auth/tokens\" \n   os_username: \"\u003cваш_логин\u003e\"\n   os_password: \"\u003cваш_пароль\u003e\"\n   os_project_id: \"\u003cID_проекта\u003e\"\n   os_domain_name: \"users\"\n ```\n\n Примените его:\n\n ```bash\n kubectl apply -f vkcloud-secret.yaml\n ```\n\n ### 2. Пример ClusterIssuer\n\n Создайте `clusterissuer.yaml`:\n\n ```yaml\n apiVersion: cert-manager.io/v1\n kind: ClusterIssuer\n metadata:\n   name: sampleclusterissuer\n spec:\n   acme:\n     email: your@email.com\n     privateKeySecretRef:\n       name: letsencrypt\n     server: https://acme-v02.api.letsencrypt.org/directory \n     solvers:\n       - dns01:\n           webhook:\n             groupName: acme.cloud.vk.com\n             solverName: cert-manager-webhook-vkcloud\n             config:\n               secretRef:\n                 name: vkcloud-secret\n                 namespace: cert-manager\n        # Добавьте по желанию выбор доменов в этом блоке, если его нет, солвер будет использован по-умолчанию\n        selector:\n          dnsNames:\n          - example.com\n          ...\n ```\n\n Примените:\n\n ```bash\n kubectl apply -f clusterissuer.yaml\n ```\n\n ### 3. Пример Certificate\n\n ```yaml\n apiVersion: cert-manager.io/v1\n kind: Certificate\n metadata:\n   name: example.com-tls\n   namespace: default\n spec:\n   secretName: example.com-tls\n   issuerRef:\n     name: sampleclusterissuer\n     kind: ClusterIssuer\n   dnsNames:\n     - example.com\n ```\n\n ---\n\n ## Как это работает\n\n 1. cert-manager вызывает webhook, указанный в `ClusterIssuer`.\n 2. Webhook аутентифицируется в VK Cloud через API.\n 3. Получает список DNS-зон и находит нужную.\n 4. Создает временную TXT-запись для подтверждения владения доменом.\n 5. После успешной проверки, сертификат выдается.\n 6. TXT-запись удаляется после завершения проверки.\n\n ---\n\n ## Отладка\n\n Смотрите clusterissuer, orders, challenge, cert для соответствующих namespace, например в k9s.\n\n ## Поддерживаемые версии cert-manager\n\n - ✅ cert-manager v1.6+\n - ✅ cert-manager v1.17.2 (рекомендуемая)\n\n ---\n\n ## Примеры конфигураций\n\n ### `vkcloud-secret.yaml`\n\n ```yaml\n apiVersion: v1\n kind: Secret\n metadata:\n   name: vkcloud-secret\n   namespace: cert-manager\n type: Opaque\n stringData:\n   os_auth_url: \"https://infra.mail.ru:35357/v3/auth/tokens\" \n   os_username: \"\u003cваш_логин\u003e\"\n   os_password: \"\u003cваш_пароль\u003e\"\n   os_project_id: \"\u003cID_проекта\u003e\"\n   os_domain_name: \"users\"\n ```\n\n ### `clusterissuer.yaml`\n\n ```yaml\n apiVersion: cert-manager.io/v1\n kind: ClusterIssuer\n metadata:\n   name: sampleclusterissuer\n spec:\n   acme:\n     email: your@email.com\n     privateKeySecretRef:\n       name: letsencrypt\n     server: https://acme-v02.api.letsencrypt.org/directory \n     solvers:\n       - dns01:\n           webhook:\n             groupName: acme.cloud.vk.com\n             solverName: cert-manager-webhook-vkcloud\n             config:\n               secretRef:\n                 name: vkcloud-secret\n                 namespace: cert-manager\n ```\n\n ---\n\n ## FAQ\n\n ### Почему нет зависимости от Jetstack?\n\n Webhook написан так, чтобы работать автономно — он сам реализует необходимый интерфейс для cert-manager, и вам не нужно устанавливать дополнительных CRD или контроллеров. Использование внешнего хука сильно усложняет настройку RBAC, или даже вообще делает ее невозможной вызывая ошибки с ***system:anonymous***\n\n ### Нужен ли Docker?\n\n Да, но образ уже собран и доступен на Docker Hub / GitLab. Вы также можете собрать свой, если потребуется кастомизация.\n\n ### Что делать, если домен не находится?\n\n Убедитесь, что у пользователя в VK Cloud есть права на чтение и изменение DNS-зон, и что домен добавлен в аккаунте. Смотрите ошибки в challenge.\n\n ---\n\n ## Лицензия\n\nGNU General Public License v3.0 — смотрите [LICENSE](LICENSE)\n\n ---\n\n ## Автор\n\n [drone076](https://github.com/drone076) \n\n ---\n\n ## Ссылки\n\n - [VK Cloud Public DNS API](https://cloud.vk.com/docs/ru/networks/dns/publicdns) \n - [cert-manager docs](https://cert-manager.io/docs/) \n - [Helm docs](https://v2.helm.sh/docs/using_helm/) \n\n - [Имидж на DockerHub](https://hub.docker.com/r/drone076/cert-manager-webhook-vkcloud)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdrone076%2Fcert-manager-webhook-vkcloud","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdrone076%2Fcert-manager-webhook-vkcloud","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdrone076%2Fcert-manager-webhook-vkcloud/lists"}