你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程:在 Azure 容器应用中连接到托管 Eureka Server for Spring(预览版)

Eureka Server for Spring 是一种服务注册表,允许微服务自行注册和发现其他服务。 作为 Azure 容器应用组件提供,可以将容器应用绑定到 Eureka Server for Spring,以便自动注册到 Eureka Server。

在本教程中,学习:

  • 创建 Eureka Server for Spring Java 组件
  • 将容器应用绑定到 Eureka Server for Spring Java 组件

重要

本教程使用的服务可能会影响 Azure 帐单。 如果你决定按部就班,请确保删除本文中特别推荐的资源,以避免意外计费。

先决条件

若要完成此项目,需要满足以下条件:

要求 说明
Azure 帐户 需要一个有效的订阅。 如果没有帐户,可以免费创建一个帐户
Azure CLI 安装 Azure CLI

注意事项

在 Azure 容器应用中的 Eureka Server for Spring 中运行时,请注意以下详细信息:

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

安装

在开始使用 Eureka Server for Spring 之前,首先需要创建所需的资源。

执行以下命令以创建资源组和容器应用环境。

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

    export LOCATION=eastus
    export RESOURCE_GROUP=my-services-resource-group
    export ENVIRONMENT=my-environment
    export EUREKA_COMPONENT_NAME=eureka
    export APP_NAME=my-eureka-client
    export IMAGE="mcr.microsoft.com/javacomponents/samples/sample-service-eureka-client:latest"
    
    变量 说明
    LOCATION 创建容器应用和 Java 组件的 Azure 区域位置。
    ENVIRONMENT 演示应用程序的 Azure 容器应用环境名称。
    RESOURCE_GROUP 演示应用程序的 Azure 资源组名称。
    EUREKA_COMPONENT_NAME 为容器应用创建的 Java 组件的名称。 在本例中,你将创建一个 Eureka Server for Spring Java 组件。
    IMAGE 容器应用中使用的容器映像。
  2. 通过 Azure CLI 登录 Azure。

    az login
    
  3. 创建资源组。

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

    az containerapp env create \
      --name $ENVIRONMENT \
      --resource-group $RESOURCE_GROUP \
      --location $LOCATION
    

创建适用于 Spring 的 Eureka 服务器 Java 组件

现在你已经有了一个现有环境,可以创建容器应用并将其绑定到 Eureka Server for Spring 的 Java 组件实例。

  1. 创建 Eureka Server for Spring Java 组件。

    az containerapp env java-component eureka-server-for-spring create \
      --environment $ENVIRONMENT \
      --resource-group $RESOURCE_GROUP \
      --name $EUREKA_COMPONENT_NAME
    
  2. 可选:更新适用于 Spring 的 Eureka 服务器 Java 组件配置。

    az containerapp env java-component eureka-server-for-spring update \
      --environment $ENVIRONMENT \
      --resource-group $RESOURCE_GROUP \
      --name $EUREKA_COMPONENT_NAME 
      --configuration eureka.server.renewal-percent-threshold=0.85 eureka.server.eviction-interval-timer-in-ms=10000
    

将容器应用绑定到适用于 Spring 的 Eureka 服务器 Java 组件

  1. 创建容器应用并绑定到 Eureka Server for Spring。

    az containerapp create \
      --name $APP_NAME \
      --resource-group $RESOURCE_GROUP \
      --environment $ENVIRONMENT \
      --image $IMAGE \
      --min-replicas 1 \
      --max-replicas 1 \
      --ingress external \
      --target-port 8080 \
      --bind $EUREKA_COMPONENT_NAME \
      --query properties.configuration.ingress.fqdn
    

将你的应用的 URL 复制到文本编辑器,以便在下一步中使用。

返回到门户中的容器应用,并将应用的 URL 复制到文本编辑器,使你可在下一步使用它。

导航至 /allRegistrationStatus 路由,查看注册到 Eureka Server for Spring 的所有应用程序。

绑定将多个配置以环境变量的形式注入应用程序,这些配置主要是 eureka.client.service-url.defaultZone 属性。 此属性指示 Eureka Server Java 组件的内部终结点。

绑定还会注入以下属性:

"eureka.client.register-with-eureka":    "true"
"eureka.client.fetch-registry":          "true"
"eureka.instance.prefer-ip-address":     "true"

eureka.client.register-with-eureka 属性设置为 true 以强制注册到 Eureka Server。 此注册会覆盖 application.properties 中来自配置服务器等的本地设置。 如果要将其设置为 false,可以通过在容器应用中设置环境变量来覆盖它。

eureka.instance.prefer-ip-address 由于容器应用环境中特定的 DNS 解析规则而设置为 true。 不要修改此值,以免破坏绑定。

从 Eureka Server for Spring Java 组件取消绑定容器应用

若要从容器应用中移除绑定,请使用 --unbind 选项。

  az containerapp update \
    --name $APP_NAME \
    --unbind $JAVA_COMPONENT_NAME \
    --resource-group $RESOURCE_GROUP

通过仪表板查看应用程序

重要

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

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

    az role definition create --role-definition '{
        "Name": "<YOUR_ROLE_NAME>",
        "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 "<ROLE_NAME>" \
      --scope $ENVIRONMENT_ID
    

    注意

    USER_OR_SERVICE_PRINCIPAL_ID 通常是用于访问 Azure 门户的标识。<> ROLE_NAME 是在第 1 步中分配的名称。<>

  4. 获取适用于 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 的 Eureka 服务器仪表板的屏幕截图。

可选:将适用于 Spring 的 Eureka 服务器和适用于 Spring 的控制台 Java 组件集成

若要将适用于 Spring 的 Eureka 服务器与适用于 Spring 的控制台 Java 组件集成,请参阅将适用于 Spring 的管理控制台与适用于 Spring 的 Eureka 服务器集成

清理资源

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

az group delete \
  --resource-group $RESOURCE_GROUP

后续步骤