Поделиться через


Развертывание приложения Teams в службе контейнеров

Вы можете развернуть бот Teams или приложение вкладок в контейнерных приложениях Azure, Службе Azure Kubernetes (AKS) или локальном кластере Kubernetes.

Предварительные условия

Скачайте пример бота Teams или пример приложения-вкладки Teams, который предлагает готовый интерфейс для разработки контейнерных приложений Azure. Вы можете внести несколько изменений в конфигурацию и развернуть ее в AKS или локальном кластере Kubernetes.

Прежде чем приступить к работе, убедитесь, что у вас есть следующие средства:

  • Учетная запись Azure.

  • Интерфейсы командной строки Azure (CLI) для контейнерных приложений Azure или развертывания AKS.

Примечание.

Команды в этой статье основаны на Git Bash. Если вы используете любой другой интерфейс, обновите команды при необходимости.

Развертывание в контейнерных приложениях Azure

Контейнерные приложения Azure — это полностью управляемая служба, которая позволяет запускать контейнерные приложения в облаке. Это идеальный выбор, если вам не нужен прямой доступ ко всем собственным API Kubernetes и управлению кластером, и вы предпочитаете полностью управляемый интерфейс, основываясь на рекомендациях.

С помощью примеров приложений можно выполнить команды подготовки и развертывания в Наборе средств Teams. Teams Toolkit создает реестр контейнеров Azure и приложения-контейнеры Azure, создает приложение в образ контейнера и развертывает его в контейнерных приложениях Azure.

Команда provision создает и настраивает следующие ресурсы:

  • Приложение Teams с возможностью вкладки или бота.
  • Реестр контейнеров Azure для размещения образа контейнера.
  • Среда контейнерного приложения Azure и контейнер приложений Azure для размещения приложения.
  • Приложение Microsoft Entra для проверки подлинности.

В примере бота Teams команда также создает службу Azure Bot для provision канала клиента Teams и контейнерных приложений Azure.

Команда deploy выполняет следующие действия:

  • Создает приложение в образ контейнера.
  • Отправляет образ контейнера в Реестр контейнеров Azure.
  • Развертывает образ в контейнерных приложениях Azure.

Развертывание бота Teams в Службе Azure Kubernetes

AKS — это управляемая служба оркестрации контейнеров, предоставляемая Azure. С помощью AKS вы можете полностью управлять интерфейсом Kubernetes в Azure.

Архитектура

Снимок экрана: архитектура бота Teams для службы Azure Kubernetes.

Внутренний сервер Teams взаимодействует с ботом через службу Azure Bot. Для этой службы требуется доступ к боту через общедоступную конечную точку HTTPS. Чтобы настроить, разверните контроллер входящего трафика в кластере Kubernetes и защитите его с помощью tls-сертификата.

Для проверки подлинности бота в службе Azure Bot можно использовать идентификатор Microsoft Entra. Создайте секрет Kubernetes, включающий идентификатор приложения и пароль, и интегрируйте секрет в конфигурацию среды выполнения контейнера.

Настройка входящего трафика с помощью HTTPS в AKS

  1. Убедитесь, что AKS подключен к Реестру контейнеров Azure, в котором размещаются образы контейнеров. Дополнительные сведения см. в статье Использование Azure CLI.

  2. Выполните следующую команду, чтобы установить контроллер ingress и диспетчер сертификатов:

    NAMESPACE=teams-bot
    
    helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
    helm repo update
    helm install ingress-nginx ingress-nginx/ingress-nginx --create-namespace --namespace $NAMESPACE \
        --set controller.nodeSelector."kubernetes\.io/os"=linux  \
        --set defaultBackend.nodeSelector."kubernetes\.io/os"=linux  \
        --set controller.healthStatus=true \
        --set controller.service.externalTrafficPolicy=Local \
        --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz 
    
    helm repo add jetstack https://charts.jetstack.io
    helm repo update
    helm install cert-manager jetstack/cert-manager --namespace $NAMESPACE --set installCRDs=true --set nodeSelector."kubernetes\.io/os"=linux
    

    Примечание.

    Вы также можете выполнить инструкции, доступные в статье Создание неуправляемого контроллера входящего трафика и использование TLS с сертификатами Let's encrypt для настройки сертификатов входящего трафика и TLS в кластере Kubernetes.

  3. Выполните следующую команду, чтобы обновить DNS для общедоступного IP-адреса входящего трафика и получить конечную точку входящего трафика:

    > kubectl get services --namespace $NAMESPACE -w ingress-nginx-controller
    
    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
    ingress-nginx-controller LoadBalancer $CLUSTER_IP $EXTERNAL_IP 80:32514/TCP,443:32226/TCP
    
    > PUBLICIPID=$(az network public-ip list --query "[?ipAddress!=null]|[?contains(ipAddress, '$EXTERNAL_IP')].[id]" --output tsv)
    > az network public-ip update --ids $PUBLICIPID --dns-name $DNSLABEL
    > az network public-ip show --ids $PUBLICIPID --query "[dnsSettings.fqdn]" --output tsv
    
    $DNSLABEL.$REGION.cloudapp.azure.com
    

Подготовка ресурсов с помощью набора средств Teams

С помощью provision команды в наборе средств Teams можно создать приложение Teams с возможностями бота, включить службу Azure Bot и добавить идентификатор Microsoft Entra для проверки подлинности.

Чтобы подготовить ресурсы с помощью Набора средств Teams, выполните следующие действия.

  1. Откройте пример приложения, скачанный ранее.

  2. Перейдите в env/.env.${envName} файл и обновите BOT_DOMAIN значение, указав полное доменное имя.

  3. Перейдите в teamsapp.yml файл и обновите следующее arm/deploy действие, чтобы убедиться, что Teams Toolkit подготавливает службу Azure Bot во время выполнения provision команды:

    - uses: arm/deploy 
      with:
        subscriptionId: ${{AZURE_SUBSCRIPTION_ID}} 
        resourceGroupName: ${{AZURE_RESOURCE_GROUP_NAME}} 
        templates:
          - path: ./infra/botRegistration/azurebot.bicep
            parameters: ./infra/botRegistration/azurebot.parameters.json
            deploymentName: Create-resources-for-bot
        bicepCliVersion: v0.9.1
    
  4. Выполните команду в наборе provision средств Teams.

  5. После подготовки найдите BOT_ID в файле и env/.env.${envName} зашифрованный SECRET_BOT_PASSWORD в env/.env.${envName}.user файле. Получение фактического значения BOT_PASSWORD. Выберите заметку Расшифровать секрет.

  6. Чтобы создать секрет Kubernetes, содержащий BOT_ID и BOT_PASSWORD, сохраните пару значений ключа в ./deploy/.env.dev-secrets файле и выполните следующую команду для подготовки секрета:

    kubectl create secret generic dev-secrets --from-env-file ./deploy/.env.dev-secrets -n $NAMESPACE
    

Применение развертывания

Пример содержит файл deploy/sso-bot.yamlразвертывания , для справки.

  1. Обновите следующие заполнители:

    1. <image>: обновите образ. Например, myacr.azurecr.io/sso-bot:latest.

    2. <hostname>: обновите полное доменное имя входящего трафика.

  2. Чтобы применить deploy/tab.yaml, выполните следующую команду:

    kubectl apply -f deploy/sso-bot.yaml -n $NAMESPACE
    
  3. Перейдите в Visual Studio Code.

  4. На панели Запуск и отладка выберите запуск удаленной конфигурации.

  5. Чтобы просмотреть приложение бота Teams, развернутое в AKS, выберите Начать отладку (F5).

Развертывание бота Teams в локальном кластере Kubernetes

Бот Teams можно развернуть в личном кластере Kubernetes или службе Kubernetes из разных облачных служб, выполнив аналогичные действия, которые используются для развертывания бота Teams в AKS.

Архитектура

Снимок экрана: архитектура локального кластера Kubernetes.

Внутренний сервер Teams взаимодействует с ботом через службу Azure Bot. Для этой службы требуется доступ к боту через общедоступную конечную точку HTTPS. Чтобы настроить, разверните контроллер входящего трафика в кластере Kubernetes и защитите его с помощью tls-сертификата.

Для проверки подлинности бота в службе Azure Bot можно использовать идентификатор Microsoft Entra. Создайте секрет Kubernetes, включающий идентификатор приложения и пароль, и интегрируйте секрет в конфигурацию среды выполнения контейнера.

Подготовка ресурсов с помощью набора средств Teams

С помощью provision команды в наборе средств Teams можно создать приложение Teams с возможностями бота, включить службу Azure Bot и добавить идентификатор Microsoft Entra для проверки подлинности.

Чтобы подготовить ресурсы с помощью Набора средств Teams, выполните следующие действия.

  1. Откройте пример приложения, скачанный ранее.

  2. Перейдите в env/.env.${envName} файл и обновите BOT_DOMAIN значение, указав полное доменное имя.

  3. Перейдите в teamsapp.yml файл и обновите следующее arm/deploy действие, чтобы убедиться, что Teams Toolkit подготавливает службу Azure Bot во время выполнения provision команды:

    - uses: arm/deploy 
      with:
        subscriptionId: ${{AZURE_SUBSCRIPTION_ID}} 
        resourceGroupName: ${{AZURE_RESOURCE_GROUP_NAME}} 
        templates:
          - path: ./infra/botRegistration/azurebot.bicep
            parameters: ./infra/botRegistration/azurebot.parameters.json
            deploymentName: Create-resources-for-bot
        bicepCliVersion: v0.9.1
    
  4. teamsapp.yml В файле обновите действие на botFramework/create этапе подготовки. Это действие позволяет Набору средств Teams создать регистрацию бота с соответствующей конечной точкой обмена сообщениями.

    Примечание.

    Для канинга рекомендуется использовать службу Azure Bot. Если у вас нет учетной записи Azure и вы не можете создать службу Azure Bot, вы можете создать регистрацию бота.

    - uses: botFramework/create
        with:
        botId: ${{BOT_ID}}
        name: <Bot display name>
        messagingEndpoint: https://${{BOT_DOMAIN}}/api/messages
        description: ""
        channels:
            - name: msteams
    

    Вы можете удалить arm/deploy действие в teamsapp.yml файле, так как ресурсы Azure не требуются.

  5. Выполните команду в наборе provision средств Teams.

  6. После подготовки найдите BOT_ID в env/.env.${envName} файле и зашифрованный SECRET_BOT_PASSWORD в env/.env.${envName}.user файле. Получение фактического значения BOT_PASSWORD. Выберите заметку Расшифровать секрет.

  7. Чтобы создать секрет Kubernetes, содержащий BOT_ID и BOT_PASSWORD, сохраните пару значений ключа в ./deploy/.env.dev-secrets файле и выполните следующую команду для подготовки секрета:

    kubectl create secret generic dev-secrets --from-env-file ./deploy/.env.dev-secrets -n $NAMESPACE
    

Применение развертывания

Пример содержит файл deploy/sso-bot.yamlразвертывания , для вашего руководства.

  1. Обновите следующие заполнители:

    1. <image>: обновите образ. Например, myacr.azurecr.io/sso-bot:latest.

    2. <hostname>: обновите полное доменное имя входящего трафика.

  2. Чтобы применить deploy/tab.yaml, выполните следующую команду:

    kubectl apply -f deploy/sso-bot.yaml -n $NAMESPACE
    
  3. Перейдите в Visual Studio Code.

  4. На панели Запуск и отладка выберите запуск удаленной конфигурации.

  5. Чтобы просмотреть приложение бота Teams, развернутое в AKS, выберите Начать отладку (F5).

Развертывание приложения вкладки Teams в Kubernetes

AKS выступает в качестве управляемой службы оркестрации контейнеров, предлагаемой Azure. С помощью AKS вы можете полностью управлять интерфейсом Kubernetes в Azure.

Развертывание приложения вкладки Teams в AKS аналогично развертыванию веб-приложения в AKS. Однако, так как для приложения вкладки Teams требуется HTTPS-подключение, необходимо владеть доменом и настроить входящий трафик TLS в AKS.

Вы также можете развернуть приложение вкладки Teams в личном кластере Kubernetes или службе Kubernetes на разных облачных платформах. Это включает шаги, аналогичные тем, которые используются при развертывании в Службе Azure Kubernetes.

Настройка входящего трафика с помощью HTTPS в AKS

  1. Убедитесь, что AKS уже подключен к Реестру контейнеров Azure, в котором размещаются образы контейнеров. Дополнительные сведения см. в статье Azure CLI.

  2. Выполните следующую команду, чтобы установить контроллер ingress и диспетчер сертификатов:

    NAMESPACE=teams-tab
    
    helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
    helm repo update
    helm install ingress-nginx ingress-nginx/ingress-nginx --create-namespace --namespace $NAMESPACE \
        --set controller.nodeSelector."kubernetes\.io/os"=linux  \
        --set defaultBackend.nodeSelector."kubernetes\.io/os"=linux  \
        --set controller.healthStatus=true \
        --set controller.service.externalTrafficPolicy=Local \
        --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz 
    
    helm repo add jetstack https://charts.jetstack.io
    helm repo update
    helm install cert-manager jetstack/cert-manager --namespace $NAMESPACE --set installCRDs=true --set nodeSelector."kubernetes\.io/os"=linux
    

    Примечание.

    Вы также можете выполнить инструкции, доступные в статье Создание неуправляемого контроллера входящего трафика и использование TLS с сертификатами Let's encrypt для настройки сертификатов входящего трафика и TLS в кластере Kubernetes.

  3. Выполните следующую команду, чтобы обновить DNS для общедоступного IP-адреса входящего трафика и получить конечную точку входящего трафика:

    > kubectl get services --namespace $NAMESPACE -w ingress-nginx-controller
    
    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
    ingress-nginx-controller LoadBalancer $CLUSTER_IP $EXTERNAL_IP 80:32514/TCP,443:32226/TCP
    
    > PUBLICIPID=$(az network public-ip list --query "[?ipAddress!=null]|[?contains(ipAddress, '$EXTERNAL_IP')].[id]" --output tsv)
    > az network public-ip update --ids $PUBLICIPID --dns-name $DNSLABEL
    > az network public-ip show --ids $PUBLICIPID --query "[dnsSettings.fqdn]" --output tsv
    
    $DNSLABEL.$REGION.cloudapp.azure.com
    

Подготовка ресурсов с помощью набора средств Teams

Вы можете использовать provision команду в наборе средств Teams, чтобы создать приложение Teams с возможностью вкладки, включить службу Azure Bot и добавить идентификатор Microsoft Entra для проверки подлинности.

Чтобы подготовить ресурсы с помощью Набора средств Teams, выполните следующие действия.

  1. Откройте пример приложения, скачанный ранее.

  2. Перейдите в env/.env.${envName} файл и обновите TAB_DOMAIN значение, указав полное доменное имя.

  3. Перейдите в teamsapp.yml файл и удалите arm/deploy действие, так как дополнительные ресурсы Azure не требуются.

  4. Выполните команду в наборе provision средств Teams.

  5. Используйте набор средств Teams, чтобы создать идентификатор Microsoft Entra, который может потребоваться задать в качестве переменных среды приложений.

  6. После подготовки найдите AAD_APP_CLIENT_ID в env/.env.${envName} файле и зашифрованный SECRET_AAD_APP_CLIENT_SECRET в env/.env.${envName}.user файле.

  7. Получение фактического значения SECRET_AAD_APP_CLIENT_SECRET. Выберите заметку Расшифровать секрет.

Применение развертывания

Пример содержит файл deploy/tab.yamlразвертывания , для справки.

  1. Обновите следующие заполнители:

    1. <tab-image>: обновите образ. Например, myacr.azurecr.io/tab:latest.

    2. <api-image>: обновите образ API. Если у вас нет API, удалите hello-world-apiслужбу и разверните его из файла yaml.

    3. <hostname>: обновите полное доменное имя входящего трафика.

  2. Чтобы применить deploy/tab.yaml, выполните следующую команду:

    kubectl apply -f deploy/tab.yaml -n $NAMESPACE
    
  3. Перейдите в Visual Studio Code.

  4. На панели Запуск и отладка выберите запуск удаленной конфигурации.

  5. Чтобы просмотреть приложение бота Teams, развернутое в AKS, выберите Начать отладку (F5).