Instradare gli eventi cloud ai webhook con Griglia di eventi di Azure in Kubernetes

In questa guida introduttiva si crea un argomento in Griglia di eventi in Kubernetes, si crea una sottoscrizione per l'argomento e quindi si invia un evento di esempio all'argomento per testare lo scenario.

Importante

Griglia di eventi in Kubernetes con Azure Arc è attualmente disponibile in anteprima pubblica. Questa versione di anteprima viene messa a disposizione senza contratto di servizio e non è consigliata per i carichi di lavoro di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero presentare funzionalità limitate. Per altre informazioni, vedere le Condizioni supplementari per l'uso delle anteprime di Microsoft Azure.

Prerequisiti

  1. Connessione il cluster Kubernetes ad Azure Arc.
  2. Installare l'estensione Griglia di eventi nel cluster Kubernetes. Questa estensione distribuisce Griglia di eventi in un cluster Kubernetes.

Creare un percorso personalizzato

Come estensione della posizione di Azure, una posizione personalizzata consente di usare il cluster Kubernetes abilitato per Azure Arc come posizione di destinazione per la distribuzione di risorse come argomenti di Griglia di eventi. Una posizione personalizzata rappresenta uno spazio dei nomi nel cluster ed è la posizione in cui vengono distribuiti argomenti e sottoscrizioni di eventi. In questa sezione viene creata una posizione personalizzata.

  1. Dichiarare le variabili seguenti per contenere i valori del cluster, del gruppo di risorse e dei nomi di posizione personalizzati di Azure Arc. Copiare queste istruzioni in un editor, sostituire i valori e quindi copiare/incollare nella finestra bash.

    resourcegroupname="<AZURE RESOURCE GROUP NAME>"
    arcclustername="<AZURE ARC CLUSTER NAME>"
    customlocationname="<CUSTOM LOCATION NAME>"
    
  2. Ottenere l'ID risorsa del cluster connesso ad Azure Arc. Aggiornare i valori per i parametri del nome del cluster e del gruppo di risorse di Azure Arc prima di eseguire il comando.

    hostresourceid=$(az connectedk8s show -n $arcclustername -g $resourcegroupname --query id -o tsv)    
    
  3. Ottenere l'ID risorsa dell'estensione griglia di eventi. Questo passaggio presuppone che il nome assegnato per l'estensione griglia di eventi sia eventgrid-ext. Aggiornare i nomi del cluster e del gruppo di risorse di Azure Arc prima di eseguire il comando .

    clusterextensionid=$(az k8s-extension show --name eventgrid-ext --cluster-type connectedClusters -c $arcclustername -g $resourcegroupname  --query id -o tsv)    
    
  4. Creare una posizione personalizzata usando i due valori del passaggio precedente. Aggiornare i nomi di percorso e gruppo di risorse personalizzati prima di eseguire il comando .

    az customlocation create -n $customlocationname -g $resourcegroupname --namespace arc --host-resource-id $hostresourceid --cluster-extension-ids $clusterextensionid    
    
  5. Ottenere l'ID risorsa della posizione personalizzata. Aggiornare il nome del percorso personalizzato prima di eseguire il comando .

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

    Per altre informazioni sulla creazione di percorsi personalizzati, vedere Creare e gestire percorsi personalizzati in Kubernetes abilitato per Azure Arc.

Creare un argomento

In questa sezione viene creato un argomento nel percorso personalizzato creato nel passaggio precedente. Aggiornare i nomi dei gruppi di risorse e degli argomenti di Griglia di eventi prima di eseguire il comando . Aggiornare la località se si usa una località diversa dagli Stati Uniti orientali.

  1. Dichiarare una variabile per contenere il nome dell'argomento.

    topicname="<TOPIC NAME>"
    
  2. Eseguire il comando seguente per creare un argomento.

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

    Per altre informazioni sul comando dell'interfaccia della riga di comando, vedere az eventgrid topic create.

Creare un endpoint del messaggio

Prima di creare una sottoscrizione per l'argomento personalizzato, creare un endpoint per il messaggio dell'evento. L'endpoint richiede in genere azioni basate sui dati degli eventi. Per semplificare questa guida introduttiva, si distribuisce un'app Web predefinita che visualizza i messaggi di evento. La soluzione distribuita include un piano di servizio app, un'app Web del servizio app e codice sorgente da GitHub.

  1. Nella pagina dell'articolo selezionare Distribuisci in Azure per distribuire la soluzione nella sottoscrizione. Nel portale di Azure specificare i valori per i parametri.

    Button to deploy the Resource Manager template to Azure.

  2. Per il completamento della distribuzione possono essere necessari alcuni minuti. Dopo il completamento della distribuzione, visualizzare l'app Web per assicurarsi che sia in esecuzione. In un Web browser passare a: https://<your-site-name>.azurewebsites.net

    Se la distribuzione non riesce, controllare il messaggio di errore. È possibile che il nome del sito Web sia già stato scelto da altri utenti. Distribuire di nuovo il modello e scegliere un nome diverso per il sito.

  3. Viene visualizzato il sito, ma nessun evento è ancora stato pubblicato.

    View new site

Creare una sottoscrizione

I sottoscrittori possono registrarsi per gli eventi pubblicati in un argomento. Per ricevere qualsiasi evento, è necessario creare una sottoscrizione di Griglia di eventi per un argomento di interesse. Una sottoscrizione di eventi definisce la destinazione a cui vengono inviati tali eventi. Per informazioni su tutte le destinazioni o i gestori supportati, vedere Gestori eventi.

Per creare una sottoscrizione di eventi con una destinazione WebHook (endpoint HTTPS), immettere un nome per la sottoscrizione di eventi, aggiornare il nome del sito Web ed eseguire il comando seguente.

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

Per altre informazioni sul comando dell'interfaccia della riga di comando, vedere az eventgrid event-subscription create.

Inviare eventi all'argomento

  1. Eseguire il comando seguente per ottenere l'endpoint per l'argomento: dopo aver copiato e incollato il comando, aggiornare il nome dell'argomento e il nome del gruppo di risorse prima di eseguire il comando. Gli eventi di esempio vengono pubblicati in questo endpoint dell'argomento.

    az eventgrid topic show --name $topicname -g $resourcegroupname --query "endpoint" --output tsv
    
  2. Eseguire il comando seguente per ottenere la chiave per l'argomento personalizzato: dopo aver copiato e incollato il comando, aggiornare il nome dell'argomento e il nome del gruppo di risorse prima di eseguire il comando. È la chiave primaria dell'argomento. Per ottenere questa chiave dal portale di Azure, passare alla scheda Chiavi di accesso della pagina Argomento di Griglia di eventi. Per poter pubblicare un evento in un argomento personalizzato, è necessaria la chiave di accesso.

    az eventgrid topic key list --name $topicname -g $resourcegroupname --query "key1" --output tsv
    
  3. Eseguire il comando Curl seguente per pubblicare l'evento. Specificare l'URL dell'endpoint e la chiave del passaggio 1 e 2 prima di eseguire il comando.

    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"
          }
    }]'
    

    Se l'URL dell'endpoint dell'argomento del passaggio 1 è un indirizzo IP privato, ad esempio nel caso in cui il tipo di servizio del broker di Griglia di eventi sia ClusterIP, è possibile eseguire Curl dall'interno di un altro pod nel cluster per avere accesso a tale indirizzo IP. Ad esempio, è possibile eseguire i passaggi seguenti:

    1. Creare un file manifesto con la configurazione seguente. Potresti voler regolare l'oggetto dnsPolicy in base alle tue esigenze. Per altre informazioni, vedere DNS per servizi e pod.

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

          kubectl apply -f <name_of_your_yaml_manifest_file>
      
    3. Verificare che il pod sia in esecuzione.

          kubectl get pod test-pod
      
    4. Avviare una sessione della shell dal contenitore

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

    A questo punto, è disponibile una sessione della shell da un contenitore in esecuzione nel cluster da cui è possibile eseguire il comando Curl descritto in un passaggio precedente.

    Nota

    Per informazioni su come inviare eventi cloud usando i linguaggi di programmazione, vedere gli esempi seguenti:

Verificare nel visualizzatore Griglia di eventi

È stato attivato l'evento e Griglia di eventi ha inviato il messaggio all'endpoint configurato al momento della sottoscrizione. Visualizzare l'app Web per vedere l'evento appena inviato.

View received event in Event Grid Viewer

Passaggi successivi

Fai riferimento ai seguenti articoli:

  • Gestori eventi e destinazioni : fornisce informazioni su tutti i gestori eventi e le destinazioni supportati da Griglia di eventi in Kubernetes.
  • Filtro eventi : fornisce informazioni sull'applicazione di filtri agli eventi nelle sottoscrizioni di eventi.