Freigeben über


Bereitstellen der Teams-App im Containerdienst

Sie können einen Teams-Bot oder eine Registerkarten-App in azure Container Apps, Azure Kubernetes Service (AKS) oder einem lokalen Kubernetes-Cluster bereitstellen.

Voraussetzungen

Laden Sie den Beispiel-Teams-Bot oder die Teams-Registerkarten-Beispiel-App herunter, die eine einsatzbereite Erfahrung für die Azure Container Apps-Entwicklung bietet. Sie können einige Konfigurationsänderungen vornehmen und in AKS oder einem lokalen Kubernetes-Cluster bereitstellen.

Bevor Sie beginnen, stellen Sie sicher, dass Sie über die folgenden Tools verfügen:

  • Azure-Konto.

  • Azure-Befehlszeilenschnittstellen (CLI) für die Azure Container Apps- oder AKS-Bereitstellung.

Hinweis

Die Befehle in diesem Artikel basieren auf Git Bash. Wenn Sie eine andere Schnittstelle verwenden, aktualisieren Sie die Befehle nach Bedarf.

Bereitstellen in Azure Container Apps

Azure Container Apps ist ein vollständig verwalteter Dienst, mit dem Sie containerisierte Anwendungen in der Cloud ausführen können. Dies ist eine ideale Wahl, wenn Sie keinen direkten Zugriff auf alle nativen Kubernetes-APIs und die Clusterverwaltung benötigen und eine vollständig verwaltete Erfahrung bevorzugen, die auf bewährten Methoden basiert.

Mithilfe von Beispielanwendungen können Sie die Befehle zum Bereitstellen und Bereitstellen im Teams-Toolkit ausführen. Das Teams-Toolkit erstellt eine Azure Container Registry und Azure Container Apps für Sie, erstellt Ihre App in einem Containerimage und stellt sie in Azure Container Apps bereit.

Der provision Befehl erstellt und konfiguriert die folgenden Ressourcen:

  • Eine Teams-App mit Registerkarten- oder Botfunktion.
  • Eine Azure Container Registry zum Hosten Ihres Containerimages.
  • Eine Azure Container App-Umgebung und eine Azure Container Apps-Umgebung zum Hosten Ihrer App.
  • Eine Microsoft Entra-App für die Authentifizierung.

Im Beispiel-Teams-Bot erstellt der provision Befehl auch einen Azure Bot Service zum Kanalieren des Teams-Clients und von Azure Container Apps.

Der deploy Befehl führt die folgenden Aktionen aus:

  • Erstellt die App in einem Containerimage.
  • Pusht das Containerimage an Azure Container Registry.
  • Stellt das Image in Azure Container Apps bereit.

Bereitstellen eines Teams-Bots in Azure Kubernetes Service

AKS ist ein verwalteter Containerorchestrierungsdienst, der von Azure bereitgestellt wird. Mit AKS können Sie die Kubernetes-Erfahrung in Azure vollständig verwalten.

Architektur

Screenshot: Architektur des Teams-Bots für Azure Kubernetes Service

Der Teams-Back-End-Server interagiert über den Azure Bot Service mit Ihrem Bot. Dieser Dienst erfordert, dass Ihr Bot über einen öffentlichen HTTPS-Endpunkt erreichbar ist. Stellen Sie zum Einrichten einen Eingangscontroller in Ihrem Kubernetes-Cluster bereit, und schützen Sie ihn mit einem TLS-Zertifikat.

Sie können Microsoft Entra ID verwenden, um Ihren Bot bei Azure Bot Service zu authentifizieren. Erstellen Sie ein Kubernetes-Geheimnis, das die App-ID und das Kennwort enthält, und integrieren Sie das Geheimnis in die Laufzeitkonfiguration Ihres Containers.

Einrichten des Eingangs mit HTTPS in AKS

  1. Stellen Sie sicher, dass Ihr AKS mit Ihrer Azure Container Registry-Instanz verbunden ist, die Ihre Containerimages hostet. Weitere Informationen finden Sie unter Verwenden der Azure CLI.

  2. Führen Sie den folgenden Befehl aus, um den Eingangscontroller und den Zertifikat-Manager zu installieren:

    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
    

    Hinweis

    Sie können auch die Anweisungen unter Erstellen eines nicht verwalteten Eingangscontrollers befolgen und TLS mit Let's encrypt certificates verwenden, um Eingangs- und TLS-Zertifikate in Ihrem Kubernetes-Cluster einzurichten.

  3. Führen Sie den folgenden Befehl aus, um das DNS für die öffentliche Eingangs-IP-Adresse zu aktualisieren und den Eingangsendpunkt abzurufen:

    > 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
    

Bereitstellen von Ressourcen mit dem Teams-Toolkit

Sie können den provision Befehl im Teams Toolkit verwenden, um eine Teams-App mit Botfunktion zu erstellen, den Azure Bot Service zu integrieren und die Microsoft Entra-ID für die Authentifizierung hinzuzufügen.

Führen Sie die folgenden Schritte aus, um Ressourcen mit dem Teams-Toolkit bereitzustellen:

  1. Öffnen Sie die Beispiel-App, die Sie zuvor heruntergeladen haben.

  2. Wechseln Sie zur env/.env.${envName} Datei, und aktualisieren Sie den BOT_DOMAIN Wert mit Ihrem FQDN.

  3. Wechseln Sie zur teamsapp.yml Datei, und aktualisieren Sie die folgende arm/deploy Aktion, um sicherzustellen, dass das Teams-Toolkit während der Ausführung des provision Befehls einen Azure Bot Service bereitstellt:

    - 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. Führen Sie den provision Befehl im Teams-Toolkit aus.

  5. Suchen Sie nach der Bereitstellung in env/.env.${envName} der BOT_ID Datei und die verschlüsselte SECRET_BOT_PASSWORD dateienv/.env.${envName}.user. So rufen Sie den tatsächlichen Wert von ab BOT_PASSWORD. Wählen Sie die Anmerkung Geheimnis entschlüsseln aus.

  6. Um ein Kubernetes-Geheimnis zu erstellen, das und BOT_PASSWORDenthältBOT_ID, speichern Sie das Schlüssel-Wert-Paar in der ./deploy/.env.dev-secrets Datei, und führen Sie den folgenden Befehl aus, um das Geheimnis bereitzustellen:

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

Anwenden der Bereitstellung

Das Beispiel enthält eine Bereitstellungsdatei ( deploy/sso-bot.yaml) als Referenz.

  1. Aktualisieren Sie die folgenden Platzhalter:

    1. <image>: Aktualisieren Sie Ihr Image. Beispiel: myacr.azurecr.io/sso-bot:latest.

    2. <hostname>: Aktualisieren Sie Den eingehenden FQDN.

  2. Führen Sie den folgenden Befehl aus, um anzuwenden deploy/tab.yaml:

    kubectl apply -f deploy/sso-bot.yaml -n $NAMESPACE
    
  3. Wechseln Sie zu Visual Studio Code.

  4. Wählen Sie im Bereich Ausführen und Debuggen die Option Remotekonfiguration starten aus.

  5. Wählen Sie Debuggen starten (F5) aus, um eine Vorschau der in AKS bereitgestellten Teams-Botanwendung anzuzeigen.

Bereitstellen eines Teams-Bots in einem lokalen Kubernetes-Cluster

Sie können einen Teams-Bot in Ihrem persönlichen Kubernetes-Cluster oder einem Kubernetes-Dienst aus verschiedenen Clouddiensten bereitstellen, indem Sie ähnliche Schritte ausführen, die zum Bereitstellen des Teams-Bots in AKS verwendet werden.

Architektur

Screenshot: Architektur des lokalen Kubernetes-Clusters

Der Teams-Back-End-Server interagiert über den Azure Bot Service mit Ihrem Bot. Dieser Dienst erfordert, dass Ihr Bot über einen öffentlichen HTTPS-Endpunkt erreichbar ist. Stellen Sie zum Einrichten einen Eingangscontroller in Ihrem Kubernetes-Cluster bereit, und schützen Sie ihn mit einem TLS-Zertifikat.

Sie können Microsoft Entra ID verwenden, um Ihren Bot bei Azure Bot Service zu authentifizieren. Erstellen Sie ein Kubernetes-Geheimnis, das die App-ID und das Kennwort enthält, und integrieren Sie das Geheimnis in die Laufzeitkonfiguration Ihres Containers.

Bereitstellen von Ressourcen mit dem Teams-Toolkit

Sie können den provision Befehl im Teams Toolkit verwenden, um eine Teams-App mit Botfunktion zu erstellen, den Azure Bot Service zu integrieren und die Microsoft Entra-ID für die Authentifizierung hinzuzufügen.

Führen Sie die folgenden Schritte aus, um Ressourcen mit dem Teams-Toolkit bereitzustellen:

  1. Öffnen Sie die Beispiel-App, die Sie zuvor heruntergeladen haben.

  2. Wechseln Sie zur env/.env.${envName} Datei, und aktualisieren Sie den BOT_DOMAIN Wert mit Ihrem FQDN.

  3. Wechseln Sie zur teamsapp.yml Datei, und aktualisieren Sie die folgende arm/deploy Aktion, um sicherzustellen, dass das Teams-Toolkit während der Ausführung des provision Befehls einen Azure Bot Service bereitstellt:

    - 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. Aktualisieren Sie in der teamsapp.yml Datei die botFramework/create Aktion während der Bereitstellungsphase. Mit dieser Aktion kann Teams Toolkit eine Botregistrierung mit dem entsprechenden Messagingendpunkt erstellen.

    Hinweis

    Es wird empfohlen, Azure Bot Service für das Channeling zu verwenden. Wenn Sie über kein Azure-Konto verfügen und azure Bot Service nicht erstellen können, können Sie eine Botregistrierung erstellen.

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

    Sie können die Aktion in teamsapp.yml der arm/deploy Datei entfernen, da wir keine Azure-Ressourcen benötigen.

  5. Führen Sie den provision Befehl im Teams-Toolkit aus.

  6. Suchen Sie nach der BOT_ID Bereitstellung in der env/.env.${envName} Datei und die verschlüsselte SECRET_BOT_PASSWORD in der env/.env.${envName}.user Datei. So rufen Sie den tatsächlichen Wert von ab BOT_PASSWORD. Wählen Sie die Anmerkung Geheimnis entschlüsseln aus.

  7. Um ein Kubernetes-Geheimnis zu erstellen, das und BOT_PASSWORDenthältBOT_ID, speichern Sie das Schlüssel-Wert-Paar in der ./deploy/.env.dev-secrets Datei, und führen Sie den folgenden Befehl aus, um das Geheimnis bereitzustellen:

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

Anwenden der Bereitstellung

Das Beispiel enthält eine Bereitstellungsdatei ( deploy/sso-bot.yaml) als Anleitung.

  1. Aktualisieren Sie die folgenden Platzhalter:

    1. <image>: Aktualisieren Sie Ihr Image. Beispiel: myacr.azurecr.io/sso-bot:latest.

    2. <hostname>: Aktualisieren Sie Den eingehenden FQDN.

  2. Führen Sie den folgenden Befehl aus, um anzuwenden deploy/tab.yaml:

    kubectl apply -f deploy/sso-bot.yaml -n $NAMESPACE
    
  3. Wechseln Sie zu Visual Studio Code.

  4. Wählen Sie im Bereich Ausführen und Debuggen die Option Remotekonfiguration starten aus.

  5. Wählen Sie Debuggen starten (F5) aus, um eine Vorschau der in AKS bereitgestellten Teams-Botanwendung anzuzeigen.

Bereitstellen einer Teams-Registerkarten-App in Kubernetes

AKS dient als verwalteter Containerorchestrierungsdienst, der von Azure angeboten wird. Mit AKS können Sie die Kubernetes-Erfahrung in Azure vollständig verwalten.

Das Bereitstellen einer Teams-Registerkarten-App in AKS ähnelt dem Bereitstellen einer Web-App in AKS. Da eine Teams-Registerkarten-App jedoch eine HTTPS-Verbindung erfordert, müssen Sie eine Domäne besitzen und TLS-Eingang in Ihrem AKS einrichten.

Sie können auch eine Teams-Registerkarten-App in Ihrem persönlichen Kubernetes-Cluster oder einem Kubernetes-Dienst auf verschiedenen Cloudplattformen bereitstellen. Dies umfasst Ähnliche Schritte wie bei der Bereitstellung in Azure Kubernetes Service.

Einrichten des Eingangs mit HTTPS in AKS

  1. Stellen Sie sicher, dass Ihr AKS bereits mit Ihrer Azure Container Registry-Instanz verbunden ist, die Ihre Containerimages hostet. Weitere Informationen finden Sie unter Azure CLI.

  2. Führen Sie den folgenden Befehl aus, um den Eingangscontroller und den Zertifikat-Manager zu installieren:

    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
    

    Hinweis

    Sie können auch die Anweisungen unter Erstellen eines nicht verwalteten Eingangscontrollers befolgen und TLS mit Let's encrypt certificates verwenden, um Eingangs- und TLS-Zertifikate in Ihrem Kubernetes-Cluster einzurichten.

  3. Führen Sie den folgenden Befehl aus, um das DNS für die öffentliche Eingangs-IP-Adresse zu aktualisieren und den Eingangsendpunkt abzurufen:

    > 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
    

Bereitstellen von Ressourcen mit dem Teams-Toolkit

Sie können den provision Befehl im Teams-Toolkit verwenden, um eine Teams-App mit Registerkartenfunktion zu erstellen, den Azure Bot Service zu integrieren und die Microsoft Entra-ID für die Authentifizierung hinzuzufügen.

Führen Sie die folgenden Schritte aus, um Ressourcen mit dem Teams-Toolkit bereitzustellen:

  1. Öffnen Sie die Beispiel-App, die Sie zuvor heruntergeladen haben.

  2. Wechseln Sie zur env/.env.${envName} Datei, und aktualisieren Sie den TAB_DOMAIN Wert mit Ihrem FQDN.

  3. Wechseln Sie zur teamsapp.yml Datei, und entfernen Sie die arm/deploy Aktion, da keine zusätzlichen Azure-Ressourcen erforderlich sind.

  4. Führen Sie den provision Befehl im Teams-Toolkit aus.

  5. Verwenden Sie das Teams Toolkit, um eine Microsoft Entra-ID zu erstellen, die Sie möglicherweise als Umgebungsvariablen für Ihre Apps festlegen möchten.

  6. Suchen Sie nach der AAD_APP_CLIENT_ID Bereitstellung in der env/.env.${envName} Datei und die verschlüsselte SECRET_AAD_APP_CLIENT_SECRET in der env/.env.${envName}.user Datei.

  7. So rufen Sie den tatsächlichen Wert von ab SECRET_AAD_APP_CLIENT_SECRET. Wählen Sie die Anmerkung Geheimnis entschlüsseln aus.

Anwenden der Bereitstellung

Das Beispiel enthält eine Bereitstellungsdatei ( deploy/tab.yaml) als Referenz.

  1. Aktualisieren Sie die folgenden Platzhalter:

    1. <tab-image>: Aktualisieren Sie Ihr Image. Beispiel: myacr.azurecr.io/tab:latest.

    2. <api-image>: Aktualisieren Sie Ihr API-Image. Wenn Sie nicht über eine API verfügen, entfernen Sie den hello-world-apiDienst, und stellen Sie sie aus der YAML-Datei bereit.

    3. <hostname>: Aktualisieren Sie Den eingehenden FQDN.

  2. Führen Sie den folgenden Befehl aus, um anzuwenden deploy/tab.yaml:

    kubectl apply -f deploy/tab.yaml -n $NAMESPACE
    
  3. Wechseln Sie zu Visual Studio Code.

  4. Wählen Sie im Bereich Ausführen und Debuggen die Option Remotekonfiguration starten aus.

  5. Wählen Sie Debuggen starten (F5) aus, um eine Vorschau der in AKS bereitgestellten Teams-Botanwendung anzuzeigen.