教程:在 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
资源 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=chinanorth3
    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 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
    

创建适用于 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

后续步骤