0

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

与此相关的后续问题 -在 AKS 中运行的 Azure 函数在 http 触发器函数的查询字符串参数上抛出 500

4

1 回答 1

0

事实证明,运行时尝试将文件写入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 中管理我的功能键,并在运行时以已知配置装载它们。

于 2021-07-21T12:27:55.627 回答