Compartir a través de


Implementación de una aplicación de Teams en el servicio de contenedor

Puede implementar un bot de Teams o una aplicación de pestaña en azure Container Apps, Azure Kubernetes Service (AKS) o un clúster de Kubernetes local.

Requisitos previos

Descargue el bot de Teams de ejemplo o la aplicación de pestaña de Teams de ejemplo, que ofrece una experiencia lista para usar para el desarrollo de Azure Container Apps. Puede realizar algunos cambios de configuración e implementarlos en AKS o en un clúster de Kubernetes local.

Antes de empezar, asegúrese de que tiene las herramientas siguientes:

  • Cuenta de Azure.

  • Interfaces de línea de comandos (CLI) de Azure para la implementación de Azure Container Apps o AKS.

Nota:

Los comandos del artículo se basan en Git Bash. Si usa cualquier otra interfaz, actualice los comandos según sea necesario.

Implementación en Azure Container Apps

Azure Container Apps es un servicio totalmente administrado que le permite ejecutar aplicaciones en contenedores en la nube. Es una opción ideal si no necesita acceso directo a todas las API nativas de Kubernetes y a la administración de clústeres y prefiere una experiencia totalmente administrada basada en los procedimientos recomendados.

Con la ayuda de aplicaciones de ejemplo, puede ejecutar los comandos de aprovisionamiento e implementación en el kit de herramientas de Teams. Teams Toolkit crea una instancia de Azure Container Registry y Azure Container Apps automáticamente, construye la aplicación en una imagen de contenedor e la implementa en Azure Container Apps.

El provision comando crea y configura los siguientes recursos:

  • Una aplicación de Teams con funcionalidad de pestaña o bot.
  • Azure Container Registry para hospedar la imagen de contenedor.
  • Un entorno de Azure Container App y una instancia de Azure Container Apps para hospedar la aplicación.
  • Una aplicación de Microsoft Entra para la autenticación.

En el bot de Teams de ejemplo, el provision comando también crea una instancia de Azure Bot Service para canalizar el cliente de Teams y Azure Container Apps.

El deploy comando ejecuta las siguientes acciones:

  • Compila la aplicación en una imagen de contenedor.
  • Inserta la imagen de contenedor en Azure Container Registry.
  • Implementa la imagen en Azure Container Apps.

Implementación del bot de Teams en Azure Kubernetes Service

AKS es un servicio de orquestación de contenedores administrado proporcionado por Azure. Con AKS, puede administrar completamente la experiencia de Kubernetes en Azure.

Arquitectura

Captura de pantalla que muestra la arquitectura del bot de Teams en Azure Kubernetes Service.

El servidor back-end de Teams interactúa con el bot a través de Azure Bot Service. Este servicio requiere que el bot sea accesible a través de un punto de conexión HTTPS público. Para configurarlo, implemente un controlador de entrada en el clúster de Kubernetes y protejalo con un certificado TLS.

Puede usar Microsoft Entra ID para autenticar el bot con Azure Bot Service. Cree un secreto de Kubernetes que incluya el identificador y la contraseña de la aplicación e integre el secreto en la configuración en tiempo de ejecución del contenedor.

Configuración de la entrada con HTTPS en AKS

  1. Asegúrese de que AKS está conectado a Azure Container Registry, que hospeda las imágenes de contenedor. Para más información, consulte Uso de la CLI de Azure.

  2. Ejecute el siguiente comando para instalar el controlador de entrada y el administrador de certificados:

    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
    

    Nota:

    También puede seguir las instrucciones disponibles en creación de un controlador de entrada no administrado y usar TLS con Let's encrypt certificates (Cifrar certificados de entrada y TLS) en el clúster de Kubernetes.

  3. Ejecute el siguiente comando para actualizar el DNS de la dirección IP pública de entrada y obtener el punto de conexión de entrada:

    > 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
    

Aprovisionamiento de recursos con el kit de herramientas de Teams

Puede usar el provision comando del kit de herramientas de Teams para crear una aplicación de Teams con funcionalidad de bot, incorporar Azure Bot Service y agregar el identificador de Microsoft Entra para la autenticación.

Para aprovisionar recursos con Teams Toolkit, siga estos pasos:

  1. Abra la aplicación de ejemplo que descargó anteriormente.

  2. Vaya al env/.env.${envName} archivo y actualice el valor con el BOT_DOMAIN FQDN.

  3. Vaya al teamsapp.yml archivo y actualice la siguiente arm/deploy acción para asegurarse de que El kit de herramientas de Teams aprovisiona una instancia de Azure Bot Service durante la ejecución del provision comando:

    - 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. Ejecute el comando en el provision kit de herramientas de Teams.

  5. Después del aprovisionamiento, busque el BOT_ID archivo en env/.env.${envName} y el cifrado SECRET_BOT_PASSWORD en env/.env.${envName}.user el archivo. Para obtener el valor real de BOT_PASSWORD. Seleccione la anotación Descifrar secreto.

  6. Para crear un secreto de Kubernetes que contenga BOT_ID y BOT_PASSWORD, guarde el par de valores de clave en el ./deploy/.env.dev-secrets archivo y ejecute el siguiente comando para aprovisionar el secreto:

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

Aplicación de la implementación

El ejemplo incluye un archivo de implementación, deploy/sso-bot.yaml, como referencia.

  1. Actualice los siguientes marcadores de posición:

    1. <image>: actualice la imagen. Por ejemplo, myacr.azurecr.io/sso-bot:latest.

    2. <hostname>: actualice el FQDN de entrada.

  2. Para aplicar deploy/tab.yaml, ejecute el siguiente comando:

    kubectl apply -f deploy/sso-bot.yaml -n $NAMESPACE
    
  3. Vaya a Visual Studio Code.

  4. En el panel Ejecutar y depurar , seleccione la configuración Iniciar remoto .

  5. Para obtener una vista previa de la aplicación de bot de Teams implementada en AKS, seleccione Iniciar depuración (F5) .

Implementación de un bot de Teams en un clúster de Kubernetes local

Puede implementar un bot de Teams en el clúster personal de Kubernetes o en un servicio de Kubernetes desde distintos servicios en la nube siguiendo pasos similares que se usan para implementar el bot de Teams en AKS.

Arquitectura

Captura de pantalla que muestra la arquitectura de clúster de Kubernetes local.

El servidor back-end de Teams interactúa con el bot a través de Azure Bot Service. Este servicio requiere que el bot sea accesible a través de un punto de conexión HTTPS público. Para configurarlo, implemente un controlador de entrada en el clúster de Kubernetes y protejalo con un certificado TLS.

Puede usar Microsoft Entra ID para autenticar el bot con Azure Bot Service. Cree un secreto de Kubernetes que incluya el identificador y la contraseña de la aplicación e integre el secreto en la configuración en tiempo de ejecución del contenedor.

Aprovisionamiento de recursos con el kit de herramientas de Teams

Puede usar el provision comando del kit de herramientas de Teams para crear una aplicación de Teams con funcionalidad de bot, incorporar Azure Bot Service y agregar el identificador de Microsoft Entra para la autenticación.

Para aprovisionar recursos con Teams Toolkit, siga estos pasos:

  1. Abra la aplicación de ejemplo que descargó anteriormente.

  2. Vaya al env/.env.${envName} archivo y actualice el valor con el BOT_DOMAIN FQDN.

  3. Vaya al teamsapp.yml archivo y actualice la siguiente arm/deploy acción para asegurarse de que El kit de herramientas de Teams aprovisiona una instancia de Azure Bot Service durante la ejecución del provision comando:

    - 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. En el teamsapp.yml archivo, actualice la botFramework/create acción durante la fase de aprovisionamiento. Esta acción permite al kit de herramientas de Teams crear un registro de bot con el punto de conexión de mensajería adecuado.

    Nota:

    Se recomienda usar Azure Bot Service para la canalización. Si no tiene una cuenta de Azure y no puede crear Azure Bot Service, puede crear un registro de bot.

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

    Puede quitar la acción en teamsapp.yml el arm/deploy archivo, ya que no necesitamos ningún recurso de Azure.

  5. Ejecute el comando en el provision kit de herramientas de Teams.

  6. Después del aprovisionamiento, busque en BOT_ID el env/.env.${envName} archivo y el cifrado SECRET_BOT_PASSWORD en el env/.env.${envName}.user archivo. Para obtener el valor real de BOT_PASSWORD. Seleccione la anotación Descifrar secreto.

  7. Para crear un secreto de Kubernetes que contenga BOT_ID y BOT_PASSWORD, guarde el par de valores de clave en el ./deploy/.env.dev-secrets archivo y ejecute el siguiente comando para aprovisionar el secreto:

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

Aplicación de la implementación

El ejemplo incluye un archivo de implementación, deploy/sso-bot.yaml, para obtener instrucciones.

  1. Actualice los siguientes marcadores de posición:

    1. <image>: actualice la imagen. Por ejemplo, myacr.azurecr.io/sso-bot:latest.

    2. <hostname>: actualice el FQDN de entrada.

  2. Para aplicar deploy/tab.yaml, ejecute el siguiente comando:

    kubectl apply -f deploy/sso-bot.yaml -n $NAMESPACE
    
  3. Vaya a Visual Studio Code.

  4. En el panel Ejecutar y depurar , seleccione la configuración Iniciar remoto .

  5. Para obtener una vista previa de la aplicación de bot de Teams implementada en AKS, seleccione Iniciar depuración (F5) .

Implementación de una aplicación de pestaña de Teams en Kubernetes

AKS actúa como un servicio de orquestación de contenedores administrado que ofrece Azure. Con AKS, puede administrar completamente la experiencia de Kubernetes en Azure.

La implementación de una aplicación de pestaña de Teams en AKS es similar a la implementación de una aplicación web en AKS. Sin embargo, dado que una aplicación de pestaña de Teams requiere una conexión HTTPS, debe poseer un dominio y configurar la entrada tls en AKS.

También puede implementar una aplicación de pestaña de Teams en el clúster de Kubernetes personal o en un servicio de Kubernetes en distintas plataformas en la nube. Esto implica pasos similares a los que se usan al implementar en Azure Kubernetes Service.

Configuración de la entrada con HTTPS en AKS

  1. Asegúrese de que AKS ya está conectado a Azure Container Registry, que hospeda las imágenes de contenedor. Para obtener más información, consulte CLI de Azure.

  2. Ejecute el siguiente comando para instalar el controlador de entrada y el administrador de certificados:

    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
    

    Nota:

    También puede seguir las instrucciones disponibles en creación de un controlador de entrada no administrado y usar TLS con Let's encrypt certificates (Cifrar certificados de entrada y TLS) en el clúster de Kubernetes.

  3. Ejecute el siguiente comando para actualizar el DNS de la dirección IP pública de entrada y obtener el punto de conexión de entrada:

    > 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
    

Aprovisionamiento de recursos con el kit de herramientas de Teams

Puede usar el provision comando del kit de herramientas de Teams para crear una aplicación de Teams con funcionalidad de tabulación, incorporar Azure Bot Service y agregar el identificador de Microsoft Entra para la autenticación.

Para aprovisionar recursos con Teams Toolkit, siga estos pasos:

  1. Abra la aplicación de ejemplo que descargó anteriormente.

  2. Vaya al env/.env.${envName} archivo y actualice el valor con el TAB_DOMAIN FQDN.

  3. Vaya al teamsapp.yml archivo y quite la arm/deploy acción, ya que no se requieren recursos adicionales de Azure.

  4. Ejecute el comando en el provision kit de herramientas de Teams.

  5. Use el kit de herramientas de Teams para crear un identificador de Microsoft Entra, que puede que desee establecer como variables de entorno de las aplicaciones.

  6. Después del aprovisionamiento, busque en AAD_APP_CLIENT_ID el env/.env.${envName} archivo y el cifrado SECRET_AAD_APP_CLIENT_SECRET en el env/.env.${envName}.user archivo.

  7. Para obtener el valor real de SECRET_AAD_APP_CLIENT_SECRET. Seleccione la anotación Descifrar secreto.

Aplicación de la implementación

El ejemplo incluye un archivo de implementación, deploy/tab.yaml, como referencia.

  1. Actualice los siguientes marcadores de posición:

    1. <tab-image>: actualice la imagen. Por ejemplo, myacr.azurecr.io/tab:latest.

    2. <api-image>: actualice la imagen de API. Si no tiene una API, quite el hello-world-apiservicio e implemente desde el archivo yaml.

    3. <hostname>: actualice el FQDN de entrada.

  2. Para aplicar deploy/tab.yaml, ejecute el siguiente comando:

    kubectl apply -f deploy/tab.yaml -n $NAMESPACE
    
  3. Vaya a Visual Studio Code.

  4. En el panel Ejecutar y depurar , seleccione la configuración Iniciar remoto .

  5. Para obtener una vista previa de la aplicación de bot de Teams implementada en AKS, seleccione Iniciar depuración (F5) .