Розгортання вашого додатка з використанням k8s, ingress та сертифіката.

text

Я буду використовувати AKS (Azure Kubernetes Service), щоб продемонструвати, як це зробити. Якщо ви використовуєте Kubernetes в AWS або GCP, принцип буде той самий.

Це посилання на https://viblo.asia/p/bao-mat-nginx-ingress-voi-cert-manager-tren-kubernetes-MkNLrbYwLgA, але трохи змінене для використання з AKS.

Усі маніфести k8s, згадані в цій статті, опубліковані тут: https://github.com/duymap/devops/tree/main/k8s-ingress-cert

  1. Увійдіть в Azure
az login

2. Увійдіть у кластер k8s

az aks get-credentials - resource-group  - name 

3. Створіть секрет (для середовища Docker, щоб розгорнути в k8s)

kubectl apply -f ./secret.yml

4. Розгорніть додатки

kubectl apply -f ./deployment.yml
  • Перевірте поди: kubectl get pods. Результат буде виглядати так:
NAME READY STATUS RESTARTS AGE  
backend-6997b6d44-lbqmn 1/1 Running 1 (76m ago) 77m  
db-6d99dfccdc-rzgsv 1/1 Running 0 77m  
frontend-68f56f8cf-ggwcn 1/1 Running 0 77m
  • Перевірте сервіси: kubectl get svc. Результат буде виглядати так:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE  
backend ClusterIP 10.0.96.33  80/TCP 79m  
db ClusterIP 10.0.15.148  80/TCP 79m  
frontend LoadBalancer 10.0.211.214 20.28.47.135 80:30398/TCP 79m  
kubernetes ClusterIP 10.0.0.1  443/TCP 106m
  • Тепер перевірте доступ за зовнішнім IP 20.28.47.135:

pic

доступ безпосередньо за IP

5. Встановіть ingress-nginx контролер

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.12.0-beta.0/deploy/static/provider/cloud/deploy.yaml
  • Перевірте, чи встановлений ingress-nginx контролер: kubectl get svc -n ingress-nginx. Результат буде виглядати так:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE  
ingress-nginx-controller LoadBalancer 10.0.170.192 20.28.40.188 80:31685/TCP,443:32703/TCP 75m  
ingress-nginx-controller-admission ClusterIP 10.0.127.65  443/TCP 75m
  • Створіть субдомен для IP "20.28.40.188". Перейдіть в портал Azure, знайдіть "Public IP", виберіть публічний IP "20.28.40.188", в розділі "Configuration" введіть субдомен "todo.australiacentral.cloudapp.azure.com". Цей крок можна повторно використовувати для субдомену, створеного Azure. Але ви також можете створити власний субдомен, створивши запис A у налаштуваннях DNS.

pic

налаштування субдомену через домен Azure

6. Оновіть файл ingress.yml, замінивши __ на “todo.australiacentral.cloudapp.azure.com”, збережіть його

7. Застосуйте ingress.yml:

kubectl apply -f ./ingress.yml

8. Вам потрібно встановити cert-manager (https://cert-manager.io/), який є плагіном для k8s, щоб видавати сертифікати та автоматично оновлювати їх кожні 3 місяці. Він використовує letsencrypt:

kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.16.2/cert-manager.yaml
  • Перевірте, чи успішно встановлений cert-manager: kubectl get pods -n cert-manager. Результат буде виглядати так:
NAME READY STATUS RESTARTS AGE  
cert-manager-57d855897b-gcdpb 1/1 Running 0 74m  
cert-manager-cainjector-5c7f79b84b-dsrbs 1/1 Running 0 74m  
cert-manager-webhook-657b9f664c-qwzmd 1/1 Running 0 74m

9. Відкрийте issuer.yml, в розділі email оновіть `` на ваш реальний email. Потім застосуйте його:

kubectl apply -f ./issuer.yml
  • Перевірте, чи готовий issuer: kubectl get issuer. Результат буде виглядати так:
NAME READY AGE  
letsencrypt-prod True 58s

10.
text
Оновіть файл ingress.yml знову, додавши/змінивши наступний розділ:

pic

Оновіть ingress з tls і сертифікатом

  • Потім застосуйте його знову:
kubectl apply -f ./ingress.yml
  • Почекайте трохи і перевірте ingress за допомогою kubectl get ing, результат буде виглядати так:
NAME CLASS HOSTS ADDRESS PORTS AGE  
todo nginx todo.australiacentral.cloudapp.azure.com 20.28.40.188 80, 443 81m
  • Тепер ви побачите, що ingress доступний через порт 443, що означає використання SSL.

11. Виконайте міграцію для бекенду. Це необхідно, оскільки ми використовуємо існуючий образ бекенду. Для вашого власного бекенду, ви можете обробити це за допомогою додатка під час його ініціалізації, тому вам може не знадобитися виконувати цей крок, якщо ваш бекенд вже обробляє це під час ініціалізації:

kubectl exec -it  - sh  
yarn prisma migrate deploy

Фух, тепер ви, нарешті, отримали додаток, який працює, і доступний через https:

pic

додаток доступний через https і налаштований субдомен

Не забудьте поставити лайк, якщо вам сподобалась ця стаття :). Бажаю успіхів у DevOps!

Перекладено з: Deploy your application with k8s, ingress and certificate

Leave a Reply

Your email address will not be published. Required fields are marked *