You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Google Cloud Run迁移至Azure Container Apps,如何编程Ping应用URL?

Azure Container Apps 编程访问问题解答

一、ACA 应用 URL 格式说明

ACA 的应用访问 URL 格式和 Cloud Run 类似,默认结构为:
https://<容器应用名称>.<部署区域>.azurecontainerapps.io
比如部署在 eastus 区域、名为 demo-service 的应用,URL 就是 https://demo-service.eastus.azurecontainerapps.io。

你可以通过两种方式获取:

  • 直接在 Azure 门户的 ACA 资源「概述」页查看
  • 使用 Azure CLI 命令:
az containerapp show --name <应用名称> --resource-group <资源组名称> --query properties.configuration.ingress.fqdn -o tsv

二、访问未授权问题解决

你误用了容器注册表的凭据生成令牌——容器注册表的客户端 ID/密钥仅用于拉取镜像,和 ACA 应用的访问权限无关。以下分场景解决:

1. 公共可访问的 ACA 应用

如果你的 ACA 未开启身份验证(默认部分配置允许公共访问),直接发起 HTTP 请求即可,无需令牌:

import requests

aca_url = "https://your-app-name.region.azurecontainerapps.io"
# 假设你的应用有 /ping 健康检查端点
response = requests.get(f"{aca_url}/ping")
print(f"状态码: {response.status_code}, 响应内容: {response.text}")

2. 启用 Azure AD 身份验证的 ACA 应用

若你为 ACA 配置了 Azure AD 身份验证限制访问,需使用有权限的服务主体生成对应令牌:

  1. 确认权限配置:在 Azure 门户的 ACA 资源「身份验证」标签中,将你的服务主体添加到允许访问的列表。
  2. 获取 ACA 应用的客户端 ID:
az containerapp show --name <应用名称> --resource-group <资源组名称> --query properties.configuration.ingress.auth.aad.clientId -o tsv
  1. Python 代码示例(使用 msal 库生成令牌):
import requests
import msal

# 替换为你的实际参数
tenant_id = "你的租户ID"
sp_client_id = "服务主体的客户端ID"
sp_client_secret = "服务主体的客户端密钥"
aca_client_id = "ACA应用的客户端ID"
aca_url = "https://your-app-name.region.azurecontainerapps.io"

# 获取访问令牌
authority = f"https://login.microsoftonline.com/{tenant_id}"
app = msal.ConfidentialClientApplication(sp_client_id, authority=authority, client_credential=sp_client_secret)
scopes = [f"{aca_client_id}/.default"]
token_result = app.acquire_token_for_client(scopes=scopes)

if "access_token" in token_result:
    headers = {"Authorization": f"Bearer {token_result['access_token']}"}
    response = requests.get(f"{aca_url}/ping", headers=headers)
    print(f"状态码: {response.status_code}, 响应内容: {response.text}")
else:
    print(f"令牌获取失败: {token_result.get('error_description', '未知错误')}")

常见排查点

  • 检查 ACA 的 ingress 模式:若设置为 internal,仅允许虚拟网络内部访问,外部请求会被拒绝。
  • 确认令牌受众:生成令牌时的 scopes 必须指向 ACA 应用的客户端 ID,不能用容器注册表的信息。
  • 验证服务主体权限:确保服务主体被授予了访问该 ACA 应用的权限,且未被身份验证规则排除。

内容的提问来源于stack exchange,提问作者kyl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 02:22:33