Развертывание приложения 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 Bot. Для этой службы требуется доступ к боту через общедоступную конечную точку HTTPS. Чтобы настроить, разверните контроллер входящего трафика в кластере Kubernetes и защитите его с помощью tls-сертификата.
Для проверки подлинности бота в службе Azure Bot можно использовать идентификатор Microsoft Entra. Создайте секрет Kubernetes, включающий идентификатор приложения и пароль, и интегрируйте секрет в конфигурацию среды выполнения контейнера.
Настройка входящего трафика с помощью HTTPS в AKS
Убедитесь, что AKS подключен к Реестру контейнеров Azure, в котором размещаются образы контейнеров. Дополнительные сведения см. в статье Использование Azure CLI.
Выполните следующую команду, чтобы установить контроллер 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.
Выполните следующую команду, чтобы обновить 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, выполните следующие действия.
Откройте пример приложения, скачанный ранее.
Перейдите в
env/.env.${envName}
файл и обновитеBOT_DOMAIN
значение, указав полное доменное имя.Перейдите в
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
Выполните команду в наборе
provision
средств Teams.После подготовки найдите
BOT_ID
в файле иenv/.env.${envName}
зашифрованныйSECRET_BOT_PASSWORD
вenv/.env.${envName}.user
файле. Получение фактического значенияBOT_PASSWORD
. Выберите заметку Расшифровать секрет.Чтобы создать секрет 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
развертывания , для справки.
Обновите следующие заполнители:
<image>
: обновите образ. Например,myacr.azurecr.io/sso-bot:latest
.<hostname>
: обновите полное доменное имя входящего трафика.
Чтобы применить
deploy/tab.yaml
, выполните следующую команду:kubectl apply -f deploy/sso-bot.yaml -n $NAMESPACE
Перейдите в Visual Studio Code.
На панели Запуск и отладка выберите запуск удаленной конфигурации.
Чтобы просмотреть приложение бота Teams, развернутое в AKS, выберите Начать отладку (F5).
Развертывание бота Teams в локальном кластере Kubernetes
Бот Teams можно развернуть в личном кластере Kubernetes или службе Kubernetes из разных облачных служб, выполнив аналогичные действия, которые используются для развертывания бота Teams в AKS.
Архитектура
Внутренний сервер Teams взаимодействует с ботом через службу Azure Bot. Для этой службы требуется доступ к боту через общедоступную конечную точку HTTPS. Чтобы настроить, разверните контроллер входящего трафика в кластере Kubernetes и защитите его с помощью tls-сертификата.
Для проверки подлинности бота в службе Azure Bot можно использовать идентификатор Microsoft Entra. Создайте секрет Kubernetes, включающий идентификатор приложения и пароль, и интегрируйте секрет в конфигурацию среды выполнения контейнера.
Подготовка ресурсов с помощью набора средств Teams
С помощью provision
команды в наборе средств Teams можно создать приложение Teams с возможностями бота, включить службу Azure Bot и добавить идентификатор Microsoft Entra для проверки подлинности.
Чтобы подготовить ресурсы с помощью Набора средств Teams, выполните следующие действия.
Откройте пример приложения, скачанный ранее.
Перейдите в
env/.env.${envName}
файл и обновитеBOT_DOMAIN
значение, указав полное доменное имя.Перейдите в
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
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 не требуются.Выполните команду в наборе
provision
средств Teams.После подготовки найдите
BOT_ID
вenv/.env.${envName}
файле и зашифрованныйSECRET_BOT_PASSWORD
вenv/.env.${envName}.user
файле. Получение фактического значенияBOT_PASSWORD
. Выберите заметку Расшифровать секрет.Чтобы создать секрет 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
развертывания , для вашего руководства.
Обновите следующие заполнители:
<image>
: обновите образ. Например,myacr.azurecr.io/sso-bot:latest
.<hostname>
: обновите полное доменное имя входящего трафика.
Чтобы применить
deploy/tab.yaml
, выполните следующую команду:kubectl apply -f deploy/sso-bot.yaml -n $NAMESPACE
Перейдите в Visual Studio Code.
На панели Запуск и отладка выберите запуск удаленной конфигурации.
Чтобы просмотреть приложение бота Teams, развернутое в AKS, выберите Начать отладку (F5).
Развертывание приложения вкладки Teams в Kubernetes
AKS выступает в качестве управляемой службы оркестрации контейнеров, предлагаемой Azure. С помощью AKS вы можете полностью управлять интерфейсом Kubernetes в Azure.
Развертывание приложения вкладки Teams в AKS аналогично развертыванию веб-приложения в AKS. Однако, так как для приложения вкладки Teams требуется HTTPS-подключение, необходимо владеть доменом и настроить входящий трафик TLS в AKS.
Вы также можете развернуть приложение вкладки Teams в личном кластере Kubernetes или службе Kubernetes на разных облачных платформах. Это включает шаги, аналогичные тем, которые используются при развертывании в Службе Azure Kubernetes.
Настройка входящего трафика с помощью HTTPS в AKS
Убедитесь, что AKS уже подключен к Реестру контейнеров Azure, в котором размещаются образы контейнеров. Дополнительные сведения см. в статье Azure CLI.
Выполните следующую команду, чтобы установить контроллер 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.
Выполните следующую команду, чтобы обновить 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, выполните следующие действия.
Откройте пример приложения, скачанный ранее.
Перейдите в
env/.env.${envName}
файл и обновитеTAB_DOMAIN
значение, указав полное доменное имя.Перейдите в
teamsapp.yml
файл и удалитеarm/deploy
действие, так как дополнительные ресурсы Azure не требуются.Выполните команду в наборе
provision
средств Teams.Используйте набор средств Teams, чтобы создать идентификатор Microsoft Entra, который может потребоваться задать в качестве переменных среды приложений.
После подготовки найдите
AAD_APP_CLIENT_ID
вenv/.env.${envName}
файле и зашифрованныйSECRET_AAD_APP_CLIENT_SECRET
вenv/.env.${envName}.user
файле.Получение фактического значения
SECRET_AAD_APP_CLIENT_SECRET
. Выберите заметку Расшифровать секрет.
Применение развертывания
Пример содержит файл deploy/tab.yaml
развертывания , для справки.
Обновите следующие заполнители:
<tab-image>
: обновите образ. Например,myacr.azurecr.io/tab:latest
.<api-image>
: обновите образ API. Если у вас нет API, удалитеhello-world-api
службу и разверните его из файла yaml.<hostname>
: обновите полное доменное имя входящего трафика.
Чтобы применить
deploy/tab.yaml
, выполните следующую команду:kubectl apply -f deploy/tab.yaml -n $NAMESPACE
Перейдите в Visual Studio Code.
На панели Запуск и отладка выберите запуск удаленной конфигурации.
Чтобы просмотреть приложение бота Teams, развернутое в AKS, выберите Начать отладку (F5).
Platform Docs