教程:在 Azure 容器应用中将适用于 Spring 的控制台与适用于 Spring 的 Eureka 服务器相集成
本教程将指导你完成在 Azure 容器应用中将适用于 Spring 的管理控制台与适用于 Spring 的 Eureka 服务器进行集成的过程。
本文的一些内容与“在 Azure 容器应用中连接到适用于 Spring 的管理控制台”教程类似,但是有了适用于 Spring 的 Eureka 服务器,你可将适用于 Spring 的控制台绑定到适用于 Spring 的 Eureka 服务器,这样它就可通过 Eureka 获取应用程序信息,而不需要将单个应用程序绑定到适用于 Spring 的控制台。
按照本指南操作,你将设置一个 Eureka 服务器用于服务发现,然后创建适用于 Spring 的控制台来管理和监视注册到 Eureka 服务器的 Spring 应用程序。 此设置可确保其他应用程序只需绑定到 Eureka 服务器,从而简化微服务的管理。
在本教程中,学习:
- 使用适用于 Spring 的 Eureka 服务器。
- 创建适用于 Spring 的控制台并将其链接到该 Eureka 服务器。
- 将其他应用程序绑定到该 Eureka 服务器,以便简化服务发现和管理。
先决条件
若要完成本教程,需要拥有以下项目:
要求 | 说明 |
---|---|
Azure 帐户 | 需要一个有效的订阅。 如果没有帐户,可以免费创建一个帐户。 |
Azure CLI | 安装 Azure CLI。 |
现有适用于 Spring 的 Eureka 服务器 Java 组件 | 如果没有该组件,请按照创建适用于 Spring 的 Eureka 服务器部分创建一个。 |
注意事项
在 Azure 容器应用中运行托管 Java 组件时,请注意以下详细信息:
项 | 说明 |
---|---|
范围 | 组件与连接的容器应用在同一环境中运行。 |
缩放 | 组件无法缩放。 缩放属性 minReplicas 和 maxReplicas 都设置为 1 。 |
资源 | 为组件分配的容器资源是固定的。 CPU 核心数为 0.5,内存大小为 1Gi。 |
定价 | 组件计费低于基于消耗量的定价。 托管组件消耗的资源按活动/空闲费率计费。 可以删除不再使用的组件以停止计费。 |
Binding | 容器应用通过绑定连接到组件。 绑定将配置注入容器应用环境变量。 建立绑定后,容器应用可以从环境变量读取配置值并连接到该组件。 |
安装
在开始之前,通过执行以下命令创建必要的资源。
创建变量来支持应用程序配置。 这些值是为了本课程的目的而向你提供的。
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 服务器容器应用中使用的容器映像。 使用 Azure CLI 登录 Azure。
az cloud set -n AzureChinaCloud az login # az cloud set -n AzureCloud //means return to Public Azure.
创建资源组。
az group create --name $RESOURCE_GROUP --location $LOCATION
创建容器应用环境。
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
角色。 可在资源上显式分配 Owner
或 Contributor
角色,也可按照以下步骤创建自定义角色定义,并将其分配给你的帐户。
创建自定义角色定义。
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。将自定义角色分配给托管环境资源上的帐户。
获取托管环境的资源 ID。
export ENVIRONMENT_ID=$(az containerapp env show \ --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \ --query id -o tsv)
将角色分配给帐户。
运行此命令之前,请将
<>
括号之间的占位符替换为用户或服务主体 ID。az role assignment create \ --assignee <USER_OR_SERVICE_PRINCIPAL_ID> \ --role "Java Component Dashboard Access" \ --scope $ENVIRONMENT_ID
获取适用于 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
获取适用于 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。 通过该仪表板,你还可查看容器应用,如以下屏幕截图所示。
清理资源
本教程中创建的资源会影响 Azure 帐单。 如果不打算长期使用这些服务,请运行以下命令来删除本教程中创建的所有内容。
az group delete \
--resource-group $RESOURCE_GROUP