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