Delen via


Cloudevenementen routeren naar webhooks met Azure Event Grid in Kubernetes

In deze quickstart maakt u een onderwerp in Event Grid in Kubernetes, maakt u een abonnement voor het onderwerp en verzendt u vervolgens een voorbeeldgebeurtenis naar het onderwerp om het scenario te testen.

Belangrijk

Event Grid in Kubernetes met Azure Arc is momenteel beschikbaar als openbare preview. Deze preview-versie wordt aangeboden zonder service level agreement en wordt niet aanbevolen voor productieworkloads. Misschien worden bepaalde functies niet ondersteund of zijn de mogelijkheden ervan beperkt. Zie Aanvullende gebruiksvoorwaarden voor Microsoft Azure-previews voor meer informatie.

Vereisten

  1. Verbinding maken uw Kubernetes-cluster naar Azure Arc.
  2. Installeer de Event Grid-extensie in het Kubernetes-cluster. Met deze extensie wordt Event Grid geïmplementeerd in een Kubernetes-cluster.

Een aangepaste locatie maken

Als Azure-locatie-extensie kunt u met een aangepaste locatie uw Kubernetes-cluster met Azure Arc gebruiken als doellocatie voor het implementeren van resources, zoals Event Grid-onderwerpen. Een aangepaste locatie vertegenwoordigt een naamruimte in het cluster en is de locatie waar onderwerpen en gebeurtenisabonnementen worden geïmplementeerd. In deze sectie maakt u een aangepaste locatie.

  1. Declareer de volgende variabelen voor het opslaan van waarden van het Azure Arc-cluster, de resourcegroep en de aangepaste locatienamen. Kopieer deze instructies naar een editor, vervang de waarden en kopieer/plak deze vervolgens in het bash-venster.

    resourcegroupname="<AZURE RESOURCE GROUP NAME>"
    arcclustername="<AZURE ARC CLUSTER NAME>"
    customlocationname="<CUSTOM LOCATION NAME>"
    
  2. Haal de resource-id op van het met Azure Arc verbonden cluster. Werk waarden bij voor de naam en resourcegroepparameters van het Azure Arc-cluster voordat u de opdracht uitvoert.

    hostresourceid=$(az connectedk8s show -n $arcclustername -g $resourcegroupname --query id -o tsv)    
    
  3. Haal de resource-id van de Event Grid-extensie op. In deze stap wordt ervan uitgegaan dat de naam die u hebt opgegeven voor de Event Grid-extensie eventgrid-ext is. Werk azure Arc-cluster- en resourcegroepnamen bij voordat u de opdracht uitvoert.

    clusterextensionid=$(az k8s-extension show --name eventgrid-ext --cluster-type connectedClusters -c $arcclustername -g $resourcegroupname  --query id -o tsv)    
    
  4. Maak een aangepaste locatie met behulp van de twee waarden uit de vorige stap. Werk aangepaste locatie- en resourcegroepnamen bij voordat u de opdracht uitvoert.

    az customlocation create -n $customlocationname -g $resourcegroupname --namespace arc --host-resource-id $hostresourceid --cluster-extension-ids $clusterextensionid    
    
  5. Haal de resource-id van de aangepaste locatie op. Werk de naam van de aangepaste locatie bij voordat u de opdracht uitvoert.

    customlocationid=$(az customlocation show -n $customlocationname -g $resourcegroupname --query id -o tsv)    
    

    Zie Aangepaste locaties maken en beheren in Kubernetes met Azure Arc voor meer informatie over het maken van aangepaste locaties.

Een onderwerp maken

In deze sectie maakt u een onderwerp op de aangepaste locatie die u in de vorige stap hebt gemaakt. Werk resourcegroep- en Event Grid-onderwerpnamen bij voordat u de opdracht uitvoert. Werk de locatie bij als u een andere locatie gebruikt dan VS - oost.

  1. Declareer een variabele voor het opslaan van de onderwerpnaam.

    topicname="<TOPIC NAME>"
    
  2. Voer de volgende opdracht uit om een onderwerp te maken.

    az eventgrid topic create -g $resourcegroupname --name $topicname --kind azurearc --extended-location-name $customlocationid --extended-location-type customlocation --input-schema CloudEventSchemaV1_0 --location $region    
    

    Zie voor meer informatie over de CLI-opdracht az eventgrid topic create.

Het eindpunt van een bericht maken

Voordat u een abonnement voor het aangepaste onderwerp maakt, moet u een eindpunt voor het gebeurtenisbericht maken. Het eindpunt onderneemt normaal gesproken actie op basis van de gebeurtenisgegevens. Ter vereenvoudiging van deze quickstart implementeert u een vooraf gemaakte web-app die de gebeurtenisberichten weergeeft. De geïmplementeerde oplossing omvat een App Service-plan, een App Service-web-app en broncode van GitHub.

  1. Selecteer Implementeren in Azure op de artikelpagina om de oplossing voor uw abonnement te implementeren. Geef in Azure Portal waarden op voor de parameters.

    Button to deploy the Resource Manager template to Azure.

  2. De implementatie kan enkele minuten duren. Controleer of uw web-app wordt uitgevoerd nadat de implementatie is voltooid. Navigeer in een webbrowser naar: https://<your-site-name>.azurewebsites.net

    Controleer het foutbericht als de implementatie mislukt. Mogelijk wordt dit veroorzaakt doordat de naam van de website al wordt gebruikt. Implementeer de sjabloon opnieuw en kies een andere naam voor de site.

  3. De site wordt weergegeven, maar er zijn nog geen gebeurtenissen op gepubliceerd.

    View new site

Een abonnement maken

Abonnees kunnen zich registreren voor gebeurtenissen die zijn gepubliceerd in een onderwerp. Als u een gebeurtenis wilt ontvangen, moet u een Event Grid-abonnement maken voor een onderwerp van belang. Een gebeurtenisabonnement definieert de bestemming waarnaar deze gebeurtenissen worden verzonden. Zie Gebeurtenis-handlers voor meer informatie over alle ondersteunde bestemmingen of handlers.

Als u een gebeurtenisabonnement wilt maken met een Doel van een WebHook (HTTPS-eindpunt), voert u een naam in voor het gebeurtenisabonnement, werkt u de naam van de website bij en voert u de volgende opdracht uit.

topicid=$(az eventgrid topic show --name $topicname --resource-group $resourcegroupname --query id -o tsv)
az eventgrid event-subscription create --name <EVENT SUBSCRIPTION NAME> --source-resource-id $topicid --endpoint https://<SITE NAME>.azurewebsites.net/api/updates

Zie voor meer informatie over de CLI-opdracht az eventgrid event-subscription create.

Gebeurtenissen verzenden naar het onderwerp

  1. Voer de volgende opdracht uit om het eindpunt voor het onderwerp op te halen: Nadat u de opdracht hebt gekopieerd en geplakt, werkt u de onderwerpnaam en resourcegroepnaam bij voordat u de opdracht uitvoert. U publiceert voorbeeldgebeurtenissen naar dit onderwerpeindpunt.

    az eventgrid topic show --name $topicname -g $resourcegroupname --query "endpoint" --output tsv
    
  2. Voer de volgende opdracht uit om de sleutel voor het aangepaste onderwerp op te halen: Nadat u de opdracht hebt gekopieerd en geplakt, moet u de onderwerpnaam en de naam van de resourcegroep bijwerken voordat u de opdracht uitvoert. Het is de primaire sleutel van het onderwerp. Ga naar het tabblad Toegangssleutels van de pagina Event Grid-onderwerp om deze sleutel op te halen in Azure Portal. U hebt de toegangssleutel nodig als u een gebeurtenis voor een aangepast onderwerp wilt plaatsen.

    az eventgrid topic key list --name $topicname -g $resourcegroupname --query "key1" --output tsv
    
  3. Voer de volgende Curl-opdracht uit om de gebeurtenis te posten. Geef de eindpunt-URL en -sleutel op uit stap 1 en 2 voordat u de opdracht uitvoert.

    curl  -k -X POST -H "Content-Type: application/cloudevents-batch+json" -H "aeg-sas-key: <KEY_FROM_STEP_2>" -g <ENDPOINT_URL_FROM_STEP_1> \
    -d  '[{ 
          "specversion": "1.0",
          "type" : "orderCreated",
          "source": "myCompanyName/us/webCommerceChannel/myOnlineCommerceSiteBrandName",
          "id" : "eventId-n",
          "time" : "2020-12-25T20:54:07+00:00",
          "subject" : "account/acct-123224/order/o-123456",
          "dataSchema" : "1.0",
          "data" : {
             "orderId" : "123",
             "orderType" : "PO",
             "reference" : "https://www.myCompanyName.com/orders/123"
          }
    }]'
    

    Als de eindpunt-URL van het onderwerp uit stap 1 een privé-IP-adres is, bijvoorbeeld wanneer het servicetype van Event Grid Broker ClusterIP is, kunt u Curl uitvoeren vanuit een andere pod in het cluster om toegang te krijgen tot dat IP-adres. U kunt bijvoorbeeld de volgende stappen uitvoeren:

    1. Maak een manifestbestand met de volgende configuratie. Misschien wilt u het dnsPolicy aanpassen aan uw behoeften. Zie DNS voor services en pods voor meer informatie.

      apiVersion: v1
      kind: Pod
      metadata:
          name: test-pod2
      spec:
          containers:
            - name: nginx
              image: nginx
          hostNetwork: true
          dnsPolicy: ClusterFirstWithHostNet       
      
    2. Maak de pod.

          kubectl apply -f <name_of_your_yaml_manifest_file>
      
    3. Controleer of de pod wordt uitgevoerd.

          kubectl get pod test-pod
      
    4. Een shellsessie starten vanuit de container

          kubectl exec --stdin --tty test-pod -- /bin/bash
      

    Op dit moment hebt u een shellsessie van een actieve container in het cluster waaruit u de Curl-opdracht kunt uitvoeren die in een eerdere stap wordt beschreven.

    Notitie

    Zie de volgende voorbeelden voor meer informatie over het verzenden van cloudevenementen met behulp van programmeertalen:

Controleren in de Event Grid-viewer

U hebt de gebeurtenis geactiveerd en Event Grid heeft het bericht verzonden naar het eindpunt dat u hebt geconfigureerd toen u zich abonneerde. Bekijk uw web-app om de gebeurtenis te zien die u zojuist hebt verzonden.

View received event in Event Grid Viewer

Volgende stappen

Zie de volgende artikelen: