Рубрики
Uncategorized

Развертывание микросервиса на Azure Kubernetes (с шифрованием)

Я недавно пришлось бороться через это на работе, и я хотел поделиться своей документацией в случае, если она может помочь кому-то в будущем. Теги с Кубератусами, Azure, DevOps, Go.

(Я также написал это на моем блог . Было бы здорово, если вы проверили это. Хотя сейчас нет ничего там.)

Я недавно пришлось бороться через это на работе, и я хотел поделиться своей документацией в случае, если она может помочь кому-то в будущем. Это очень, очень сухое пост, но оно должно охватывать большую часть основ.

Один из наших разработчиков только что создал новое микросервис в Голанг И нам нужно было развернуть его в кластере 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.78              80/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   AGE
    1         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 это нормально не появляется. Это означает, что он все еще работает над сбором сертификата от выплаты.

Ресурсы:

Оригинал: «https://dev.to/ianknighton/deploying-a-microservice-on-azure-kubernetes-with-lets-encrypt-4eon»