当 'code' 是查询字符串中的参数时,为什么匿名 httptrigger azure 函数会抛出 500 内部服务器错误?

Why does an anonymous httptrigger azure function throw a 500 internal server error when 'code' is a param in query string?

我在 Kubernetes 的容器中有一个 运行 函数应用程序。我的端点之一是具有匿名访问权限的 httptrigger。然而,查询字符串包含一个参数 code(由无法控制其名称的第 3 方供应商提供)导致应用程序抛出 500 错误,并且没有日志指示发生了什么。奇怪的是,如果我将相同的功能部署到 Azure Function App,一切都会按预期进行。所以我的问题是需要设置哪些配置或环境变量才能使其正常运行?

与此相关的后续问题 -

问题原来是运行时尝试将文件写入 azure-functions-host/Secrets 匿名函数目录,其中 code 是查询字符串中的参数。由于 Kubernetes 在创建目录时为秘密安装卷的方式,即使 readonly 为 false,它也会以只读方式设置权限。

作为解决方法,我最终在 docker 文件

中创建了目录
# To enable ssh & remote debugging on app service change the base image to the one below
# FROM mcr.microsoft.com/azure-functions/dotnet:3.0-appservice
FROM mcr.microsoft.com/azure-functions/dotnet:3.0
ENV AzureWebJobsScriptRoot=/home/site/wwwroot \
    AzureFunctionsJobHost__Logging__Console__IsEnabled=true \
    FUNCTIONS_WORKER_RUNTIME=dotnet 
    
EXPOSE 80 443

RUN mkdir azure-functions-host/Secrets

COPY . /home/site/wwwroot

在 kubernetes 部署文件中,我将特定文件挂载到该目录,以便挂载操作不会混淆目录权限。

volumeMounts:
  - name: functionhostkeys-store
    mountPath: "/azure-functions-host/Secrets/host.json"
    subPath: "host.json"
    readOnly: false

这种方法允许运行时仍然根据需要写入该目录,但允许我在 Azure KeyVault 中管理我的功能键并在运行时将它们安装在已知配置中。