Поделиться через


Маршрутизация облачных событий в веб-перехватчики с помощью службы "Сетка событий Azure" на Kubernetes

В этом кратком руководстве описано, как создать раздел в службе "Сетка событий" в Kubernetes, создать подписку для раздела, а затем отправить пример события в раздел для тестирования сценария.

Внимание

Служба "Сетка событий" в Kubernetes с поддержкой Azure Arc сейчас находится в общедоступной предварительной версии. Эта предварительная версия предоставляется без соглашения об уровне обслуживания и не рекомендована для использования рабочей среде. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены. Дополнительные сведения см. в статье Дополнительные условия использования Предварительных версий Microsoft Azure.

Необходимые компоненты

  1. Подключите свой кластер Kubernetes к Azure Arc.
  2. Установите расширение Сетка событий в кластер Kubernetes. Это расширение развертывает службу "Сетка событий" в кластере Kubernetes.

Создание пользовательского расположения

Являясь дополнением к расположению Azure, пользовательское расположение позволяет использовать кластер Kubernetes с поддержкой Arc Azure в качестве цели для развертывания ресурсов, таких как разделы Сетки событий. Настраиваемое расположение представляет собой пространство имен в кластере и место, где развертываются темы и подписки на события. В этом разделе описано, как создать пользовательское расположение.

  1. Объявите приведенные ниже переменные для хранения значений кластера Azure Arc, группы ресурсов и имен пользовательских расположений. Скопируйте эти инструкции в редактор, замените значения, а затем скопируйте или вставьте их в окно bash.

    resourcegroupname="<AZURE RESOURCE GROUP NAME>"
    arcclustername="<AZURE ARC CLUSTER NAME>"
    customlocationname="<CUSTOM LOCATION NAME>"
    
  2. Получите идентификатор ресурса для кластера, подключенного к Azure Arc. Перед выполнением команды обновите значения параметров имени кластера Azure Arc и группы ресурсов.

    hostresourceid=$(az connectedk8s show -n $arcclustername -g $resourcegroupname --query id -o tsv)    
    
  3. Получите идентификатор ресурса расширения Сетки событий. На этом шаге предполагается, что расширению Сетки событий присвоено имя eventgrid-ext. Обновите имена кластера Azure Arc и группы ресурсов перед выполнением команды.

    clusterextensionid=$(az k8s-extension show --name eventgrid-ext --cluster-type connectedClusters -c $arcclustername -g $resourcegroupname  --query id -o tsv)    
    
  4. Создайте настраиваемое расположение с помощью двух значений на предыдущем шаге. Обновите имена пользовательского расположения и группы ресурсов перед выполнением команды.

    az customlocation create -n $customlocationname -g $resourcegroupname --namespace arc --host-resource-id $hostresourceid --cluster-extension-ids $clusterextensionid    
    
  5. Получите идентификатор ресурса пользовательского расположения. Обновите имя пользовательского расположения, прежде чем выполнять команду.

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

    Дополнительные сведения о создании пользовательских расположений см. в статье Создание пользовательских расположений в Kubernetes с поддержкой Azure Arc и управление ими.

Создание темы

В этом разделе вы создадите раздел в пользовательском расположении, созданном на предыдущем шаге. Обновите имена групп ресурсов и разделов сетки событий перед выполнением команды. Обновите расположение, если вы используете расположение, отличное от восточной части США.

  1. Объявите переменную для хранения имени раздела.

    topicname="<TOPIC NAME>"
    
  2. Выполните следующую команду для создания раздела.

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

    Дополнительные сведения о команде CLI см. в az eventgrid topic create.

Создание конечной точки сообщения

Перед созданием подписки на пользовательский раздел создайте конечную точку для сообщения о событии. Обычно конечная точка выполняет действия на основе данных событий. Чтобы упростить это краткое руководство, вы развернете предварительно созданное веб-приложение , отображающее сообщения о событиях. Развернутое решение содержит план службы приложений, веб-приложение службы приложений и исходный код из GitHub.

  1. Выберите Развернуть в Azure, чтобы развернуть решение в своей подписке. На портале Azure укажите значения остальных параметров.

    Button to deploy the Resource Manager template to Azure.

  2. Завершение развертывания может занять несколько минут. Когда развертывание успешно завершится, откройте веб-приложение и убедитесь, что оно работает. Откройте браузер и перейдите по адресу https://<your-site-name>.azurewebsites.net.

    Если развертывание завершится неудачно, проверьте сообщение об ошибке. Возможно, имя веб-сайта уже используется. Еще раз попробуйте развернуть шаблон, выбрав другое имя для сайта.

  3. Вы увидите сайт без опубликованных событий.

    View new site

Создание подписки

Подписчики могут регистрироваться на события, опубликованные в разделе. Чтобы получить любое событие, необходимо создать подписку сетки событий для интересующей темы. Подписка на событие определяет пункт назначения, в который направляются эти события. Дополнительные сведения о всех назначениях и поддерживаемых обработчиках см. в разделе Обработчики событий.

Чтобы создать подписку на событие с целевым веб-перехватчиком (конечной точкой HTTPS), введите имя подписки на событие, обновите имя веб-сайта и выполните приведенную ниже команду.

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

Дополнительные сведения о команде CLI см. в az eventgrid event-subscription create.

Отправка событий в раздел

  1. Выполните следующую команду, чтобы получить конечную точку раздела: после копирования и вставки команды обновите имя раздела и имя группы ресурсов перед выполнением команды. Вы публикуете примеры событий в этой конечной точке раздела.

    az eventgrid topic show --name $topicname -g $resourcegroupname --query "endpoint" --output tsv
    
  2. Выполните следующую команду, чтобы получить ключ для пользовательского раздела: после копирования и вставки команды обновите имя раздела и имя группы ресурсов перед выполнением команды. Это первичный ключ раздела. Чтобы получить этот ключ на портале Azure, перейдите на вкладку Ключи доступа на странице Раздел Сетки событий. Чтобы можно было опубликовать событие в пользовательском разделе, требуется ключ доступа.

    az eventgrid topic key list --name $topicname -g $resourcegroupname --query "key1" --output tsv
    
  3. Выполните представленную далее команду Curl, чтобы отправить событие. Перед выполнением команды укажите URL-адрес конечной точки и ключ из шага 1 и 2.

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

    Если URL-адрес конечной точки темы из шага 1 является частным IP-адресом, например, в случае, когда типом службы брокера Event Grid является ClusterIP, вы можете выполнить Curl из другого модуля в кластере, чтобы получить доступ к этому IP-адресу. Например, можно выполнить следующие действия:

    1. Создайте файл манифеста со следующей конфигурацией. Вы можете настроить dnsPolicy в соответствии со своими потребностями. Дополнительные сведения см. в статье DNS для служб и модулей Pod.

      apiVersion: v1
      kind: Pod
      metadata:
          name: test-pod2
      spec:
          containers:
            - name: nginx
              image: nginx
          hostNetwork: true
          dnsPolicy: ClusterFirstWithHostNet       
      
    2. Создайте модуль.

          kubectl apply -f <name_of_your_yaml_manifest_file>
      
    3. Убедитесь, что модуль работает.

          kubectl get pod test-pod
      
    4. Запустите сеанс оболочки из контейнера

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

    На этом этапе у вас есть сеанс оболочки из запущенного контейнера в кластере, из которого можно выполнить команду Curl , описанную на предыдущем шаге.

    Примечание.

    Дополнительные сведения о том, как отправить облачные события с помощью языков программирования, см. в следующих примерах:

Проверка в средстве просмотра Сетки событий

Вы активировали событие, а служба "Сетка событий" отправила сообщение в конечную точку, настроенную вами при оформлении подписки. Откройте веб-приложение и просмотрите в нем отправленные события.

View received event in Event Grid Viewer

Дальнейшие действия

См. следующие статьи: