教程:在 Azure 容器应用中将适用于 Spring 的控制台与适用于 Spring 的 Eureka 服务器相集成

本教程将指导你完成在 Azure 容器应用中将适用于 Spring 的管理控制台与适用于 Spring 的 Eureka 服务器进行集成的过程。

本文的一些内容与“在 Azure 容器应用中连接到适用于 Spring 的管理控制台”教程类似,但是有了适用于 Spring 的 Eureka 服务器,你可将适用于 Spring 的控制台绑定到适用于 Spring 的 Eureka 服务器,这样它就可通过 Eureka 获取应用程序信息,而不需要将单个应用程序绑定到适用于 Spring 的控制台。

按照本指南操作,你将设置一个 Eureka 服务器用于服务发现,然后创建适用于 Spring 的控制台来管理和监视注册到 Eureka 服务器的 Spring 应用程序。 此设置可确保其他应用程序只需绑定到 Eureka 服务器,从而简化微服务的管理。

在本教程中,学习:

  1. 使用适用于 Spring 的 Eureka 服务器。
  2. 创建适用于 Spring 的控制台并将其链接到该 Eureka 服务器。
  3. 将其他应用程序绑定到该 Eureka 服务器,以便简化服务发现和管理。

先决条件

若要完成本教程,需要拥有以下项目:

要求 说明
Azure 帐户 需要一个有效的订阅。 如果没有帐户,可以免费创建一个帐户
Azure CLI 安装 Azure CLI
现有适用于 Spring 的 Eureka 服务器 Java 组件 如果没有该组件,请按照创建适用于 Spring 的 Eureka 服务器部分创建一个。

注意事项

在 Azure 容器应用中运行托管 Java 组件时,请注意以下详细信息:

说明
范围 组件与连接的容器应用在同一环境中运行。
缩放 组件无法缩放。 缩放属性 minReplicasmaxReplicas 都设置为 1
资源 为组件分配的容器资源是固定的。 CPU 核心数为 0.5,内存大小为 1Gi。
定价 组件计费低于基于消耗量的定价。 托管组件消耗的资源按活动/空闲费率计费。 可以删除不再使用的组件以停止计费。
Binding 容器应用通过绑定连接到组件。 绑定将配置注入容器应用环境变量。 建立绑定后,容器应用可以从环境变量读取配置值并连接到该组件。

安装

在开始之前,通过执行以下命令创建必要的资源。

  1. 创建变量来支持应用程序配置。 这些值是为了本课程的目的而向你提供的。

    export LOCATION=chinaeast
    export RESOURCE_GROUP=my-services-resource-group
    export ENVIRONMENT=my-environment
    export EUREKA_COMPONENT_NAME=eureka
    export ADMIN_COMPONENT_NAME=admin
    export CLIENT_APP_NAME=sample-service-eureka-client
    export CLIENT_IMAGE="mcr.microsoft.com/javacomponents/samples/sample-admin-for-spring-client:latest"
    
    变量 说明
    LOCATION 创建容器应用和 Java 组件的 Azure 区域位置。
    RESOURCE_GROUP 演示应用程序的 Azure 资源组名称。
    ENVIRONMENT 演示应用程序的 Azure 容器应用环境名称。
    EUREKA_COMPONENT_NAME Eureka 服务器 Java 组件的名称。
    ADMIN_COMPONENT_NAME 适用于 Spring 的控制台 Java 组件的名称。
    CLIENT_APP_NAME 将绑定到 Eureka 服务器的容器应用的名称。
    CLIENT_IMAGE Eureka 服务器容器应用中使用的容器映像。
  2. 使用 Azure CLI 登录 Azure。

    az cloud set -n AzureChinaCloud
    az login
    # az cloud set -n AzureCloud   //means return to Public Azure.
    
  3. 创建资源组。

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  4. 创建容器应用环境。

    az containerapp env create \
      --name $ENVIRONMENT \
      --resource-group $RESOURCE_GROUP \
      --location $LOCATION \
      --query "properties.provisioningState"
    

    使用 --query 参数可筛选响应,找到仅包含成功或仅包含失败的消息。

可选:创建适用于 Spring 的 Eureka 服务器

如果当前没有适用于 Spring 的 Eureka 服务器,请按照以下命令创建 Eureka 服务器 Java 组件。 有关详细信息,请参阅[创建适用于 Spring 的 Eureka 服务器](java-eureka-server.md#create-the-eureka server-for-spring-java-component)。

az containerapp env java-component eureka-server-for-spring create \
  --environment $ENVIRONMENT \
  --resource-group $RESOURCE_GROUP \
  --name $EUREKA_COMPONENT_NAME

将组件绑定在一起

创建适用于 Spring 的控制台 Java 组件。

az containerapp env java-component admin-for-spring create \
  --environment $ENVIRONMENT \
  --resource-group $RESOURCE_GROUP \
  --name $ADMIN_COMPONENT_NAME \
  --min-replicas 1 \
  --max-replicas 1 \
  --bind $EUREKA_COMPONENT_NAME

将其他应用绑定到 Eureka 服务器

设置 Eureka 服务器后,现在可以将其他应用程序绑定到它,以便发现服务。 还可以在适用于 Spring 的控制台仪表板中监视和管理这些应用程序。 按照以下步骤创建容器应用并将其绑定到 Eureka 服务器:

创建容器应用并绑定到 Eureka 服务器。

az containerapp create \
  --name $CLIENT_APP_NAME \
  --resource-group $RESOURCE_GROUP \
  --environment $ENVIRONMENT \
  --image $CLIENT_IMAGE \
  --min-replicas 1 \
  --max-replicas 1 \
  --ingress external \
  --target-port 8080 \
  --bind $EUREKA_COMPONENT_NAME 

提示

由于前面的步骤将适用于 Spring 的控制台组件绑定到适用于 Spring 的 Eureka 服务器组件,因此控制台组件支持服务发现,同时让你能够通过适用于 Spring 的控制台仪表板来管理它。

查看仪表板

重要

要查看仪表板,至少需要在托管环境资源上向你的帐户分配 Microsoft.App/managedEnvironments/write 角色。 可在资源上显式分配 OwnerContributor 角色,也可按照以下步骤创建自定义角色定义,并将其分配给你的帐户。

  1. 创建自定义角色定义。

    az role definition create --role-definition '{
        "Name": "Java Component Dashboard Access",
        "IsCustom": true,
        "Description": "Can access managed Java Component dashboards in managed environments",
        "Actions": [
            "Microsoft.App/managedEnvironments/write"
        ],
        "AssignableScopes": ["/subscriptions/<SUBSCRIPTION_ID>"]
    }'
    

    请确保将 AssignableScopes 值中 <> 括号之间的占位符替换为订阅 ID。

  2. 将自定义角色分配给托管环境资源上的帐户。

    获取托管环境的资源 ID。

    export ENVIRONMENT_ID=$(az containerapp env show \
      --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \
      --query id -o tsv)
    
  3. 将角色分配给帐户。

    运行此命令之前,请将 <> 括号之间的占位符替换为用户或服务主体 ID。

    az role assignment create \
      --assignee <USER_OR_SERVICE_PRINCIPAL_ID> \
      --role "Java Component Dashboard Access" \
      --scope $ENVIRONMENT_ID
    
  4. 获取适用于 Spring 的控制台仪表板的 URL。

    az containerapp env java-component admin-for-spring show \
      --environment $ENVIRONMENT \
      --resource-group $RESOURCE_GROUP \
      --name $ADMIN_COMPONENT_NAME \
      --query properties.ingress.fqdn -o tsv
    
  5. 获取适用于 Spring 的 Eureka 服务器仪表板的 URL。

    az containerapp env java-component eureka-server-for-spring show \
      --environment $ENVIRONMENT \
      --resource-group $RESOURCE_GROUP \
      --name $EUREKA_COMPONENT_NAME \
      --query properties.ingress.fqdn -o tsv
    

    此命令会返回可用来访问适用于 Spring 的 Eureka 服务器仪表板的 URL。 通过该仪表板,你还可查看容器应用,如以下屏幕截图所示。

    适用于 Spring 的控制台仪表板的屏幕截图。

    适用于 Spring 的 Eureka 服务器仪表板的屏幕截图。

清理资源

本教程中创建的资源会影响 Azure 帐单。 如果不打算长期使用这些服务,请运行以下命令来删除本教程中创建的所有内容。

az group delete \
    --resource-group $RESOURCE_GROUP

后续步骤