在启用了 Azure Arc 的 Kubernetes 群集上安装事件网格扩展

本文指导你完成在启用了 Azure Arc 的 Kubernetes 群集上安装事件网格的步骤。

为简洁起见,本文将“Kubernetes 扩展上的事件网格”称为“Kubernetes 上的事件网格”或简称为“事件网格”。

重要

目前,Azure Arc 上的 Kubernetes 事件网格正在公开预览中。 此预览版在提供时没有附带服务级别协议,不建议将其用于生产工作负荷。 某些功能可能不受支持或者受限。 有关详细信息,请参阅 Microsoft Azure 预览版的使用条款

支持的 Kubernetes 发行版

下面是受支持的 Kubernetes 发行版,可在其中部署和运行事件网格。

  1. Azure AKS 支持的 Kubernetes 发行版
  2. RedHat OpenShift 容器平台

事件网格扩展

在 Kubernetes 群集上安装事件网格服务实例的操作是创建 Azure Arc 群集扩展,该扩展同时部署 Event Grid brokerEvent Grid 操作员。 有关代理和操作员的功能的详细信息,请参阅 Kubernetes 组件上的事件网格Azure Arc 群集扩展功能使用 Azure Resource Manager(ARM)控制平面的操作来提供生命周期管理,适用于已部署到启用 Azure Arc 的 Kubernetes 群集的事件网格。

注释

此服务的预览版本仅支持 Kubernetes 群集上的事件网格扩展的单个实例,因为事件网格扩展当前定义为群集范围扩展。 目前尚不支持事件网格的命名空间范围部署,这意味着尚无法将多个实例部署到群集。 有关详细信息,请参阅扩展范围

先决条件

在继续安装事件网格之前,请确保满足以下先决条件。

  1. 在一个受支持的 Kubernetes 发行版上运行的群集。
  2. Azure 订阅
  3. PKI 证书,用于与事件网格代理建立 HTTPS 连接。
  4. 将群集连接到 Azure Arc

获取支持

如果遇到问题,请参阅疑难解答部分,以获取常见情况的帮助。 如果仍有问题,创建Azure support请求

PKI 证书要求

事件网格代理(服务器)为两种类型的客户端提供服务。 服务器身份验证是使用证书完成的。 客户端身份验证是使用基于客户端类型的证书或 SAS 密钥进行。

  • 向事件网格代理提出控制平面请求的事件网格操作员使用证书进行身份验证。
  • 向事件网格主题发布事件的事件网格发布者使用主题的 SAS 密钥进行身份验证。

为了与事件网格代理和事件网格操作员建立安全的 HTTPS 通信,我们在安装事件网格扩展期间使用 PKI 证书。 下面是这些 PKI 证书的一般要求:

  1. 证书和密钥必须经过 X.509 证书和隐私增强型邮件 PEM 编码。

  2. 要在安装过程中配置事件网格代理(服务器)证书,需要提供:

    1. CA 证书
    2. 公共证书
    3. 私钥
  3. 若要配置事件网格操作员(客户端)证书,需要提供:

    1. CA 证书
    2. 公共证书
    3. 私钥

    发布客户端可以使用事件网格代理 CA 证书在将事件发布到主题时验证服务器。

    重要

    虽然与客户端关联的域可能拥有由不同证书颁发机构颁发的多个公共证书,但 Kubernetes 上的事件网格只允许在安装事件网格时为客户端上传一个 CA 证书。 因此,事件网格操作员的证书应该由同一 CA 颁发(签名),以便证书链验证成功并成功建立 TLS 会话。

  4. 配置服务器和客户端证书的公用名 (CN) 时,请确保它们不同于为证书颁发机构证书提供的 CN。

    重要

    对于早期的概念证明阶段,可以选择使用自签名证书,但是通常应购买并使用由证书颁发机构 (CA) 签名的恰当的 PKI 证书。

使用 Azure 门户进行安装

  1. 在 Azure 门户的顶部字段中搜索 Azure Arc

  2. 在“基础结构”部分的左侧菜单中选择“Kubernetes 群集”

  3. 在群集列表下,找到要安装事件网格的对象,然后选择它。 您将看到群集的“概述”页面。

    选择 Kubernetes 群集

  4. 在左侧菜单的“设置”组中选择“扩展” 。

  5. 选择+ 添加。 将显示一个页面,其中显示了可用的 Azure Arc Kubernetes 扩展。

    群集扩展 - 添加按钮

  6. 在“新建资源”页上,选择“Kubernetes 扩展上的事件网格” 。

    选择 Kubernetes 扩展上的事件网格

  7. 在“Kubernetes 扩展的事件网格”页上,选择“创建” 。

    选择“创建 Kubernetes 扩展”

  8. 在“安装事件网格”页面的“基础”标签中,按照以下步骤操作。

    1. Project Details 部分显示只读的订阅和资源组值,这是因为 Azure Arc 扩展是在与其安装的连接群集相同的 Azure 订阅和资源组下进行部署的。

    2. 在“事件网格扩展名称”字段中提供名称。 在部署到同一个 Azure Arc 连接的群集时,此名称在其他 Azure Arc 扩展中应保持唯一。

    3. 对于Release namespace,您可能需要提供 Kubernetes 命名空间的名称,以便部署事件网格组件。 例如,你可能想要为部署到群集的所有已启用Azure Arc的服务创建单个命名空间。 默认值为 eventgrid-system。 如果提供的命名空间不存在,系统会自动创建。

    4. 在“事件网格代理”详细信息部分中,将显示服务类型。 事件网格代理是公开事件发送到的主题终结点的组件,它以 Kubernetes 服务类型 ClusterIP 的形式公开。 因此,分配给所有主题的 IP 使用为群集配置的专用 IP 空间。

    5. 提供要用于代理的“存储类名称”,该名称受 Kubernetes 发行版支持。 例如,如果您使用 AKS,则可以使用 azurefile,该选项利用 Azure 标准存储。 有关 AKS 支持的预定义存储类的详细信息,请参阅 AKS 中的存储类。 如果使用的是其他 Kubernetes 发行版,请参阅 Kubernetes 发行版文档,了解支持的预定义存储类或你可以提供自己的存储类的方式。

    6. 存储大小。 默认值为 1 GiB。 确定存储大小时,考虑数据摄入速率。 通过事件网格代理中所有主题上事件的大小乘以发布速率(每秒事件数)来衡量的引入速率(以 MiB/秒为单位)是分配存储时的关键因素。 事件本质上是暂时性的,一旦事件被传送,这些事件就不会消耗任何存储空间。 虽然引入速率是存储使用的一个主要驱动因素,但不是唯一的。 保存主题和事件订阅配置的元数据也会消耗存储空间,但通常所需的存储空间要比事件网格所引入和传送的事件要少。

    7. 内存限制。 默认值为 1 GiB。

    8. 内存请求。 默认值为 200 MiB。 此字段不可编辑。

      安装事件网格扩展 -“基本信息”页

    9. 在页面底部选择“下一步:配置”。

  9. 在“安装事件网格”页的“配置”选项卡中,执行以下步骤 :

    1. 启用 HTTP(非安全)通信。 如果希望在客户端与事件网格代理通信时使用非安全通道,请选中此框。

      重要

      启用此选项将使所有与事件网格代理的通信使用 HTTP 作为传输方式。 因此,任何发布客户端和事件网格操作员都不会与事件网格代理安全地通信。 应仅在开发早期阶段使用此选项。

    2. 如果未启用 HTTP 通信,请选择你采购的每个 PKI 证书文件,并满足 PKI 证书要求

      安装事件网格扩展 -“配置”页

    3. 选择页面底部的“下一步:监视”。

  10. 在“安装事件网格”页的“监视”选项卡中,执行以下步骤 :

    1. 选择“启用指标”(可选)。 如果选择此选项,Kubernetes 上的事件网格将使用 Prometheus 暴露格式来公开主题和事件订阅的指标。

      安装事件网格扩展 - 监控页面

    2. 选择“下一步: 标签”以导航到“标签”页面。

  11. 在“标签”页面中执行以下步骤:

    1. 如有必要,定义标记

      安装事件网格扩展 - 标签页

    2. 在页面底部选择查看 + 创建

  12. 在“查看 + 创建”选项卡上,选择“创建”。

    安装事件网格扩展 -“查看并创建”页

    重要

    事件网格的安装是一个异步操作,可能在 Kubernetes 集群上运行的时间比您在 Azure 门户上看到通知的时间更长,该通知告知部署已完成。 看到“部署已完成”的通知后,至少等待 5 分钟,然后再尝试创建自定义位置(下一步)。 如果你有权访问 Kubernetes 群集,则可以在 bash 会话中执行以下命令,以验证事件网格代理和事件网格操作员 pod 是否处于“正在运行”状态(如果是,则表明安装已完成):

    kubectl get pods -n \<release-namespace-name\>
    

    下面是示例输出:

    NAME                                  READY   STATUS    RESTARTS   AGE
    eventgrid-broker-568f75976-wxkd2      1/1     Running   0          2m28s
    eventgrid-operator-6c4c6c675d-ttjv5   1/1     Running   0          2m28s    
    

    重要

    在尝试部署事件网格主题之前,需要创建自定义位置。 若要创建自定义位置,可以在“部署已完成”通知显示 5 分钟后,选择底部的“上下文”页。 或者,可以使用 Azure 门户创建自定义位置。 有关详细信息,请参阅自定义位置文档

  13. 部署成功后,你将能够在“扩展”页上看到一个条目,其中包含你向事件网格扩展提供的名称。 如果看到“安装状态”为“挂起”,请等待几分钟,然后选择工具栏上的“刷新”。

    事件网格扩展 - 已安装

使用 Azure CLI 进行安装

  1. 启动 shell 会话。 可以在计算机上启动会话。

  2. 创建配置文件 protected-settings-extension.json。 创建事件网格扩展时会将此文件作为参数传递。

    在以下命令和每个配置行中,将 filename 相应替换为包含公共证书、CA 证书或操作员(客户端)或代理(服务器)密钥的名称。 提供的所有证书都应采用 base64 编码且无换行。 因此,使用 base64 --wrap=0 命令。

    echo "{ 
        \"eventgridoperator.identityCert.base64EncodedIdentityCert\":\"$(base64 <filename> --wrap=0)\",
        \"eventgridoperator.identityCert.base64EncodedIdentityKey\":\"$(base64 <filename> --wrap=0)\",
        \"eventgridoperator.identityCert.base64EncodedIdentityCaCert\":\"$(base64 <filename> --wrap=0)\",
        \"eventgridbroker.service.tls.base64EncodedServerCert\":  \"$(base64 <filename> --wrap=0)\" ,
        \"eventgridbroker.service.tls.base64EncodedServerKey\":  \"$(base64 <filename> --wrap=0)\" ,
        \"eventgridbroker.service.tls.base64EncodedServerCaCert\":  \"$(base64 <filename> --wrap=0)\" 
    }" > protected-settings-extension.json 
    

    例如,如果代理的公共证书(上面的第一个配置项)名为 client.cer,则第一行配置应如下所示:

    \"eventgridoperator.identityCert.base64EncodedIdentityCert\":\"$(base64 client.cer --wrap=0)\",    
    
  3. 创建配置文件 settings-extension.json。 创建事件网格扩展时会将此文件作为参数传递。

    重要

    不能更改 ServiceAccountserviceType 的值。 在预览版期间,唯一支持的 Kubernetes 服务类型是 ClusterIP

    对于 storageClassName,提供要用于代理的存储类,且其受 Kubernetes 发行版支持。 例如,如果您使用 AKS,则可以使用 azurefile ,该选项利用 Azure 标准存储。 有关 AKS 支持的预定义存储类的详细信息,请参阅 AKS 中的存储类。 如果使用的是其他 Kubernetes 发行版,请参阅 Kubernetes 发行版文档,了解支持的预定义存储类或你可以提供自己的存储类的方式。

    reporterType 设置为 prometheus 以启用采用 Prometheus 阐释格式的主题和事件订阅的指标。

    重要

    在预览版期间,使用 Prometheus 客户端是获取指标的唯一受支持机制。

    echo "{
        \"Microsoft.CustomLocation.ServiceAccount\":\"eventgrid-operator\",
        \"eventgridbroker.service.serviceType\": \"ClusterIP\",
        \"eventgridbroker.dataStorage.storageClassName\": \"<storage_class_name>\",
        \"eventgridbroker.diagnostics.metrics.reporterType\":\"prometheus\"
    }" > settings-extension.json
    
  4. 创建在群集上安装事件网格组件的 Kubernetes 扩展。

    对于参数 ,您必须使用在将群集连接到 Azure Arc 时提供的相同名称。

    release-namespace 是用于部署事件网格组件的命名空间。 默认值为 eventgrid-system。 你可能希望提供一个值来替代默认值。 例如,你可能想要为部署到群集的所有已启用Azure Arc的服务创建单个命名空间。 如果提供的命名空间不存在,系统会自动创建。

    重要

    在预览版期间,cluster 是创建或更新事件网格扩展时唯一支持的范围。 这意味着该服务仅支持 Kubernetes 群集上的事件网格扩展的单个实例。尚不支持命名空间范围的部署。 有关详细信息,请参阅扩展范围

    az k8s-extension create \
        --cluster-type connectedClusters \
        --cluster-name <connected_cluster_name> \
        --resource-group <resource_group_of_connected_cluster> \
        --name <event_grid_extension_name> \
        --extension-type Microsoft.EventGrid \
        --scope cluster \
        --auto-upgrade-minor-version true \
        --release-train Stable \
        --release-namespace <namespace_name> \
        --configuration-protected-settings-file protected-settings-extension.json \
        --configuration-settings-file settings-extension.json    
    

    有关 CLI 命令的详细信息,请参阅 az k8s-extension create。 请注意,可以使用 --config-file 参数来传递包含与事件网格相关的配置信息的 JSON 文件的名称。 为了支持 HTTP,请包含以下设置。

    "eventgridbroker.service.supportedProtocols[0]": "http" 
    

    这是一个示例 settings-extension.json 文件,包含上述设置。

    {
        "Microsoft.CustomLocation.ServiceAccount": "eventgrid-operator",
        "eventgridbroker.service.serviceType": "ClusterIP",
        "eventgridbroker.service.supportedProtocols[0]": "http",
        "eventgridbroker.dataStorage.storageClassName": "default",
        "eventgridbroker.diagnostics.metrics.reporterType": "prometheus"
    }    
    
  5. 验证事件网格扩展是否已成功安装。

    az k8s-extension show  --cluster-type connectedClusters --cluster-name <connected_cluster_name> --resource-group <resource_group_of_connected_cluster> --name <event_grid_extension_name>
    

    如果事件网格扩展组件部署成功,则 installedState 属性应为 Installed

自定义位置

重要

在尝试部署事件网格主题之前,需要创建自定义位置。 可以使用 Azure 门户创建自定义位置。

Troubleshooting

Azure Arc连接群集问题

Problem:导航到 Azure Arc 并选择左侧菜单中的 Kubernetes 群集时,显示的页不会显示我打算安装事件网格的 Kubernetes 群集。

Resolution:Kubernetes 群集未注册到Azure。 按照文章中的步骤连接现有 Kubernetes 群集以Azure Arc。如果在此步骤中遇到问题,请向已启用Azure Arc的 Kubernetes 团队提交 support 请求

事件网格扩展问题

问题:尝试安装“事件网格扩展”时,收到以下消息:“操作无效”- 事件网格的实例已安装在此连接的 Kubernetes 群集上 。 事件网格扩展的范围在群集级别,这意味着群集上只能安装一个实例。

说明:您已安装Event Grid(事件网格)。 预览版的事件网格仅支持在一个集群中部署一个事件网格扩展实例。

后续步骤

创建自定义位置,然后按照快速入门中的说明进行操作,通过 Kubernetes 上的 Azure Event Grid 将云事件路由到 Webhook。