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
- Увійдіть в 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:
доступ безпосередньо за 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.
налаштування субдомену через домен 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 знову, додавши/змінивши наступний розділ:
Оновіть 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:
додаток доступний через https і налаштований субдомен
Не забудьте поставити лайк, якщо вам сподобалась ця стаття :). Бажаю успіхів у DevOps!
Перекладено з: Deploy your application with k8s, ingress and certificate