(Я также написал это на моем блог . Было бы здорово, если вы проверили это. Хотя сейчас нет ничего там.)
Я недавно пришлось бороться через это на работе, и я хотел поделиться своей документацией в случае, если она может помочь кому-то в будущем. Это очень, очень сухое пост, но оно должно охватывать большую часть основ.
Один из наших разработчиков только что создал новое микросервис в Голанг
И нам нужно было развернуть его в кластере Kubernetes, чтобы воспользоваться возможностями масштабирования. Служба должна быть доступна через Интернет и быть защищена SSL CERT. На данный момент приложение может быть запущена с использованием Docker-Compose
и полностью готов к развернутую.
Где вы видите <Что-то> является признаком того, что переменная будет использоваться. Вам нужно будет отслеживать их на протяжении всего процесса, так как многие используются неоднократно.
Зависимости
Следующие инструменты должны быть установлены и функционально на вашем компьютере.
Обработать:
Создать ресурсную группу
Чтобы создать группу ресурсов:
az group create --name--location
Создать кластер
az aks create \ --resource-group\ --name \ --node-count 1 \ --enable-addons monitoring \ --generate-ssh-keys
Эта команда займет несколько минут (иногда ~ 10), чтобы запустить и в конце вернется вывод формата JSON с настройками для кластера. Скопируйте и сохраните эту информацию Отказ
Подключиться к кластеру
az aks get-credentials --resource-group--name
Как только это завершено, убедитесь, что ваше соединение.
kubectl get nodes
Это должно вернуться с выходом, перечисленным узлами со статусом Готовый
NAME STATUS ROLES AGE VERSION aks-nodepool1-8675309-0 Ready agent 2d v1.9.11
Инициализировать руль/румпель
Создать службу
Создайте файл под названием helm-rbac.yaml
В вашем рабочем каталоге со следующим YAML.
apiVersion: v1 kind: ServiceAccount metadata: name: tiller namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: tiller roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: tiller namespace: kube-system
Создайте учетную запись с kubectl
Отказ
kubectl apply -f helm-rbac.yaml
Настроить руль
Инициализируйте румпель на кластере для HELM для подключения.
helm init --service-account tiller
Создать контроллер входа
helm install stable/nginx-ingress --namespace kube-system --set controller.replicaCount=2
Этот процесс создаст IP-адрес для кластера, нам понадобится вперед.
Чтобы найти публичный IP-адрес:
kubectl get service -l app=nginx-ingress --namespace kube-system
Из вывода этой команды вам нужно Внешний IP
из LoadBalancer
оказание услуг.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE invincible-toucan-nginx-ingress-controller LoadBalancer 10.0.186.72 192.167.15.243 80:30947/TCP,443:32654/TCP 2d invincible-toucan-nginx-ingress-default-backend ClusterIP 10.0.173.7880/TCP
Установить Cert-Manager
(Краткое редактирование: кажется, что может быть проблема с версией Cert-Manager версии 0.6. Эта документация была написана против версии 0.5.2 Поэтому я обновил эту команду, чтобы указать версию.)
helm install stable/cert-manager \ --version 0.5.2 \ --namespace kube-system \ --set ingressShim.defaultIssuerName=letsencrypt-prod \ --set ingressShim.defaultIssuerKind=ClusterIssuer
Создать эмитент кластера
Создайте файл в вашем рабочем каталоге под названием Cluster-Essuer.yaml
Отказ
apiVersion: certmanager.k8s.io/v1alpha1 kind: ClusterIssuer metadata: name: letsencrypt-prod spec: acme: server: https://acme-v02.api.letsencrypt.org/directory email:privateKeySecretRef: name: letsencrypt-prod http01: {}
Использовать kubectl
создать кластер эмитента.
kubectl apply -f cluster-issuer.yaml
Создать объект сертификата
Создайте файл в вашем рабочем каталоге под названием Сертификат.yaml
и добавьте следующую информацию.
apiVersion: certmanager.k8s.io/v1alpha1 kind: Certificate metadata: name: tls-secret spec: secretName: tls-secret dnsNames: -acme: config: - http01: ingressClass: nginx domains: - issuerRef: name: letsencrypt-prod kind: ClusterIssuer
Использовать kubectl
применять этот сертификат.
kubectl apply -f certificates.yaml
Создайте реестр контейнера
az acr create --resource-group--name --sku Basic
Убедитесь, что вы можете войти в реестр. Учетные данные можно найти на лезвие «Ключи доступа» в портале Azure.
az acr login --name
Предоставить доступ от кластера в реестр
Создайте файл под названием grant-access.sh
В вашем рабочем каталоге со следующей информацией:
#!/bin/bash AKS_RESOURCE_GROUP=AKS_CLUSTER_NAME= ACR_RESOURCE_GROUP= ACR_NAME= # Get the id of the service principal configured for AKS CLIENT_ID=$(az aks show --resource-group $AKS_RESOURCE_GROUP --name $AKS_CLUSTER_NAME --query "servicePrincipalProfile.clientId" --output tsv) # Get the ACR registry resource id ACR_ID=$(az acr show --name $ACR_NAME --resource-group $ACR_RESOURCE_GROUP --query "id" --output tsv) # Create role assignment az role assignment create --assignee $CLIENT_ID --role acrpull --scope $ACR_ID
Сохранить и запустить скрипт, и соединение должно быть разрешено между двумя.
Построить и нажать образечку докера в реестр
Измените каталоги на репо и постройте контейнер.
docker build -t: .
После того, как сборка была подтверждена, тег и нажмите его в репозиторий.
docker tag/ : docker push / :
Развернуть изображения в кластер Kubernetes
Docker-Compose.yml
Файл уже существует в реестре, поэтому его только необходимо для подтверждения.
docker-compose up
Предполагая, что все сработало, преобразовываться в развертывание/услуги Kubernetes, используя комбинезон
.
kompose -f docker-compose.yml up
Проверьте развертывание и стручки были созданы и запущены.
kubectl get deployments NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE1 1 1 1 4h
kubectl get pods NAME READY STATUS RESTARTS AGE-85b87ddc6-bfm7j 1/1 Running 0 4h
Создать находчивый путь
Создайте файл под названием Ingress-Tranue.yaml
и добавьте следующее:
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: ingress annotations: kubernetes.io/ingress.class: nginx certmanager.k8s.io/cluster-issuer: letsencrypt-prod nginx.ingress.kubernetes.io/rewrite-target: / spec: tls: - hosts: -secretName: tls-secret rules: - host: http: paths: - path: / backend: serviceName: servicePort: 3000
Примените изменения с kubectl
Отказ
kubectl apply -f ingress-route.yaml
Тестирование
Проверьте все, что работает, навигация в браузере к вашему URL. По моему опыту, это может занять около 20 минут для изменений в размножении через Интернет. Это может вызвать некоторые странные поведения.
Один индикатор — если вы видите, как работает POD ( Kubectl Get Pods
) для CM-ACME-HTTP-Solver
это нормально не появляется. Это означает, что он все еще работает над сбором сертификата от выплаты.
Ресурсы:
- QuickStart: Разверните кластер сервиса Azure Kubernetes (AKS) с помощью Azure CLI
- Установите приложения с Helm в Azure Kubernetes Service (AKS)
- Создайте контроллер входа HTTPS на службе Azure Kubernetes (AKS)
- Перевести Docker Compose File в ресурсы Kubernetes
- Пользовательские домена и Azure Kubernetes с контроллером входа AX
- Нажмите на ваше первое изображение в частный реестр контейнера Docker, используя Docker CLI
Оригинал: «https://dev.to/ianknighton/deploying-a-microservice-on-azure-kubernetes-with-lets-encrypt-4eon»