VK Cloud logo

Helm 3 көмегімен cert-manager-пен жұмыс істеу

cert-manager құралының көмегімен Kubernetes кластерлеріндегі сертификаттарды басқаруға болады:

  • Сертификаттау орталығы (certificate authority, CA) рөлін атқаратын көздерге сұраулар жіберу арқылы сертификаттарды, соның ішінде өздігінен қол қойылған (self-signed) сертификаттарды шығару.

    Көздер мысалдары:

    • Venafi сияқты киберқауіпсіздік шешімдерінің провайдерлері;
    • Let’s Encrypt сияқты сертификат провайдерлері;
    • HashiCorp Vault сияқты құпиялар қоймалары;
    • ішінде сертификаттың ашық бөлігі мен жеке кілті бар жергілікті контейнерлер.
  • Қолданылу мерзімі аяқталып жатқан сертификаттарды автоматты түрде қайта шығару.

cert-manager көмегімен шығарылған сертификат басқа Kubernetes ресурстарына қолжетімді болады. Мысалы, оны Ingress үшін пайдалануға болады.

Төменде Helm 3 көмегімен Kubernetes кластерлерінде cert-manager орнату және жаңарту қалай орындалатыны көрсетіледі. Сондай-ақ cert-manager жұмысқа қабілеттілігін тексеру үшін өздігінен қол қойылған сертификат шығарылады.

Дайындық қадамдары

  1. Жасаңыз Kubernetes кластерін өзекті нұсқада, егер бұл әлі жасалмаған болса.

  2. Кластер нұсқасын анықтаңыз.

  3. Кластерге қосылу жоспарланған хостта, егер бұл әлі жасалмаса, kubectl утилитасын орнатып, баптаңыз.

  4. kubectl көмегімен кластерге қосылыңыз.

  5. Кластерге қосылу жоспарланған хостта, егер утилита әлі орнатылмаса, 3.0.0 немесе одан жоғары нұсқадағы Helm-ді орнатыңыз.

    Орнату үшін кластермен үйлесімді Helm нұсқасын таңдаңыз.

1. Репозиторийді қосып, орнату үшін нұсқаны таңдаңыз

  1. cert-manager репозиторийін қосыңыз:

    helm repo add jetstack https://charts.jetstack.io
  2. Чарттар кешін (charts) жаңартыңыз:

    helm repo update
  3. Қолжетімді cert-manager чарттары мен олардың нұсқаларының тізімін алыңыз:

    helm search repo jetstack -l
  4. Кластерге орнатылатын cert-manager нұсқасын таңдаңыз.

    cert-manager және Kubernetes нұсқаларының үйлесімділік кестесі cert-manager ресми құжаттамасында келтірілген.

2. cert-manager орнатыңыз

  1. cert-manager жұмысына қажетті Custom Resource Definitions (CRDs) орнатыңыз.

    CRDs kubectl көмегімен қолмен орнатылады. Бұл әдісті қолдану ұсынылады, өйткені ол ең қауіпсіз.

    Пәрменді орындаңыз:

    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.11.3/cert-manager.crds.yaml
  2. Таңдалған cert-manager нұсқасын орнатыңыз.

    Бұл пәрмен көрсетілген нұсқадағы cert-manager атты релизді cert-manager аттар кеңістігіне (namespace) орнатады. Егер кластерде мұндай кеңістік болмаса, ол автоматты түрде жасалады.

    helm install cert-manager jetstack/cert-manager \  --version v1.11.3 \  --namespace cert-manager \  --create-namespace

    Орнату сәтті аяқталса, Helm хабарламасында мыналар көрсетіледі:

    • STATUS: deployed;
    • NOTES: cert-manager v1.11.3 has been deployed successfully!.

3. cert-manager жұмысқа қабілеттілігін тексеріңіз

  1. cert-manager аттар кеңістігінде қажетті подтардың сәтті жасалғанын және олардың Running күйінде тұрғанын тексеріңіз:

    kubectl get pods -n cert-manager
  2. Тест мақсатында өздігінен қол қойылған сертификат шығарыңыз:

    1. Манифест файлын жасаңыз:

      Бұл манифесте мыналар сипатталған:

      • Issuer және Certificate ресурстары орналастырылатын cert-manager-test аттар кеңістігі;
      • өздігінен қол қойылған сертификаттарды шығаруға жауап беретін Issuer ресурсы;
      • өздігінен қол қойылған сертификат параметрлері бар Certificate ресурсы.
    2. Манифест файлын қолданыңыз.

      kubectl apply -f cert-manager-test-resources.yaml

      Манифесте сипатталған ресурстар жасалады. Сондай-ақ cert-manager басқа қажетті ресурстарды автоматты түрде жасайды.

    3. Барлық қажетті ресурстардың жасалғанын тексеріңіз:

      kubectl get issuers,clusterissuers,certificates,certificaterequests,orders,challenges,secrets -n cert-manager-test

      Шығыста мыналар болуы керек:

      • манифесте сипатталған конфигурациясы бар Issuer және Certificate, READY: True күйінде;
      • CertificateRequest, READY: True күйінде;
      • сертификат деректерін қамтитын Secret.
    4. Сертификат күйін тексеріңіз:

      kubectl describe certificate selfsigned-cert -n cert-manager-test

      Сертификат сәтті шығарылған жағдайда:

      • Күй туралы ақпаратта (Status) Certificate is up to date and has not expired жолы болады.
      • Оқиғалар тізімінде (Events) The certificate has been successfully issued хабарламасы бар оқиға болады.

    Егер сертификат сәтті шығарылса, онда cert-manager дұрыс орнатылған және жұмыс істеп тұр.

4. (Опционалды) cert-manager ресурстарының резервтік көшірмесін жасаңыз

Issuer, ClusterIssuer және Certificate ресурстарының резервтік көшірмесі жасалады. Оған мыналар кірмейді:

  • CertificateRequests ресурстары. Мұндай ресурстарды резервтік көшірмеге қосу ұсынылмайды, өйткені бұл резервтік көшірмеден қалпына келтіруді қиындатуы мүмкін.

  • Тікелей сертификат деректерін сақтайтын және соның ішінде жеке кілтті қамтитын құпиялар.

Резервтік көшірме жасау үшін пәрменді орындаңыз:

kubectl get -o yaml \  --all-namespaces \  issuer,clusterissuer,certificate \> cert-manager-backup.yaml

Кеңейтілген резервтік көшіру және резервтік көшірмеден қалпына келтіру туралы cert-manager ресми құжаттамасынан оқыңыз.

5. cert-manager жаңартыңыз

  1. Орнатылған cert-manager релизінің нұсқасын қараңыз:

    helm list --namespace cert-manager
  2. Чарттар кешін жаңартыңыз:

    helm repo update
  3. Қолжетімді cert-manager чарттары мен олардың нұсқаларының тізімін алыңыз:

    helm search repo jetstack -l
  4. Жаңартуға арналған cert-manager ресми құжаттамасын оқып шығыңыз. Онда жаңарту бойынша ұсынымдар, критикалық өзгерістер (breaking changes) тізімі және басқа да пайдалы ақпарат бар.

    Атап айтқанда, бір уақытта бір минорлық нұсқаға ғана жаңарту ұсынылады (мысалы, 1.11.3 → 1.12.3).

  5. Жаңартылатын нұсқаны таңдаңыз.

    cert-manager және Kubernetes нұсқаларының үйлесімділік кестесі cert-manager ресми құжаттамасында келтірілген.

  6. Кластерде орнатылған CRDs жаңартыңыз.

    Бұл CRDs бұрын қолмен орнатылғандықтан, оларды cert-manager құралының өзін жаңартпас бұрын да қолмен жаңартыңыз.

    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.12.3/cert-manager.crds.yaml
  7. Таңдалған нұсқаға дейін cert-manager релизін жаңартыңыз:

    helm upgrade cert-manager jetstack/cert-manager \  --version v1.12.3 \  --namespace cert-manager

    Жаңарту сәтті аяқталса, Helm хабарламасында мыналар көрсетіледі:

    • Release "cert-manager" has been upgraded. Happy Helming!;
    • STATUS: deployed;
    • NOTES: cert-manager v1.12.3 has been deployed successfully!.

Пайдаланылмайтын ресурстарды жойыңыз

Жұмыс істеп тұрған кластер тарификацияланады және есептеу ресурстарын тұтынады. Егер cert-manager құралы мен оның жұмысын тексеру үшін жасалған Kubernetes ресурстары енді қажет болмаса, оларды жойыңыз:

  1. cert-manager-test-resources.yaml манифестінде сипатталған ресурстарды жойыңыз:

    kubectl delete -f cert-manager-test-resources.yaml
  2. cert-manager және онымен байланысты ресурстарды жойыңыз:

    1. Кластерде cert-manager жасаған ресурстардың енді жоқ екеніне көз жеткізіңіз:

      kubectl get issuers,clusterissuers,certificates,certificaterequests,orders,challenges --all-namespaces

      Егер мұндай ресурстар бар болса, оларды жойыңыз.

    2. cert-manager релизін жойыңыз:

      helm delete cert-manager --namespace cert-manager
    3. cert-manager аттар кеңістігін жойыңыз:

      kubectl delete ns cert-manager
    4. Кластерге cert-manager үшін орнатылған CRDs жойыңыз:

      kubectl delete -f https://github.com/cert-manager/cert-manager/releases/download/v1.12.3/cert-manager.crds.yaml
  3. Тоқтатыңыз жасалған кластерді, оны кейінірек пайдалану үшін, немесе жойыңыз оны біржола.