我正在将 Spring Boot 应用程序部署到 Azure 应用程序服务上,并收到 Azure MSI 端点的“连接超时”错误。
应用程序使用 Spring cloudVault 配置和 azure UAMI 连接到Vault,但在引导时失败: “http://169.254.169.254/metadata/instance”的 GET 请求出现 I/O 错误:连接到 http://169.254.169.254 失败:连接超时
我已经读到,对于azure应用程序服务,我们需要使用“IDENTITY_ENDPOINT”和“IDENTITY_HEADER”来连接到应用程序服务中的资源,但我不确定在哪里使用spring cloud配置来设置它。
堆栈:JDK 17 |春季启动3.2.0 | spring-cloud-vault-config 4.1.0
application.yaml
spring.cloud.vault:
scheme: https
uri: <vault url>
authentication: azure_msi
connection_timeout: 5000
azure_msi:
role: MY_UAMI
spring:
config:
import: vault://secret-path
该配置在身份验证类型为“令牌”时工作正常,并且在部署到应用程序服务时,在使用身份验证类型为“azure_msi”时会出现超时错误
我们在 Azure Web App 上遇到了同样的问题,这是一个理解的过程。问题是 Spring Vault 目前仅支持 Azure 的 MSI 身份验证:https://docs.spring.io/spring-vault/reference/vault/authentication.html#vault.authentication.azuremsi
我们已经配置了
vault.authentication=AZURE
。尽管有这个名称,但这仅适用于直接在虚拟机上运行的应用程序。它不适用于 Azure Web App,它作为虚拟机上的容器映像运行。我从 Microsoft 支持处收到以下声明:
问题:无法在 Azure Web App 上连接到不可路由的 IP“169.254.169.254”。
解决方案:这是预期行为,因为 IP“169.254.169.254”在 Azure Web 应用程序上不可用。这是专门针对元数据的 Azure 虚拟机功能。
我们通过实现我们自己的、与 Hashicorp 兼容的
ClientAuthentication
(我们连接到的)并挂钩到 EnvironmentVaultConfiguration
来解决这个问题。
我希望我的回答能够帮助人们减少在调试或获得支持上浪费的时间。简而言之:Azure Web App 无法使用 IMDS,因为它不可用。