Я уже некоторое время использую функции Azure (не статичные с соответствующим DI). Недавно я добавил ApplicationInsights с помощью клавиши APPINSIGHTS_INSTRUMENTATIONKEY . При локальной отладке все работает нормально.
Если я запускаю его, публикуя функцию и используя следующий файл dockerfile для локального запуска на докере, он также работает нормально.
FROM mcr.microsoft.com/azure-functions/dotnet:2.0-alpine
ENV AzureWebJobsScriptRoot=/home/site/wwwroot
COPY ./publish/ /home/site/wwwroot
Тем не менее. Если я сделаю еще один шаг и попытаюсь развернуть его в kubernetes (в моем случае Azure AKS), используя следующие файлы YAML. Функция запускается нормально с файлами журналов, показывающими загрузку параметра Application insights. Тем не менее, это не входит в понимание.
deployment.yaml
apiVersion: v1
kind: Secret
metadata:
name: mytestfunction-secrets
namespace: "testfunction"
type: Opaque
data:
ApplicationInsights: YTljOTA4ZDgtMTkyZC00ODJjLTkwNmUtMTI2OTQ3OGZhYjZmCg==
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: mytestfunction
namespace: "testfunction"
labels:
app: mytestfunction
spec:
replicas: 1
template:
metadata:
namespace: "testfunction"
labels:
app: mytestfunction
spec:
containers:
- image: mytestfunction:1.1
name: mytestfunction
ports:
- containerPort: 5000
imagePullPolicy: Always
env:
- name: AzureFunctionsJobHost__Logging__Console__IsEnabled
value: 'true'
- name: ASPNETCORE_ENVIRONMENT
value: PRODUCTION
- name: ASPNETCORE_URLS
value: http://+:5000
- name: WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT
value: '5'
- name: APPINSIGHTS_INSTRUMENTATIONKEY
valueFrom:
secretKeyRef:
name: mytestfunction-secrets
key: ApplicationInsights
imagePullSecrets:
- name: imagepullsecrets
Тем не менее. Я изменил yaml, не сохраняя ключ в секрете, и тогда он заработал.
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: mytestfunction
namespace: "testfunction"
labels:
app: mytestfunction
spec:
replicas: 1
template:
metadata:
namespace: "testfunction"
labels:
app: mytestfunction
spec:
containers:
- image: mytestfunction:1.1
name: mytestfunction
ports:
- containerPort: 5000
imagePullPolicy: Always
env:
- name: AzureFunctionsJobHost__Logging__Console__IsEnabled
value: 'true'
- name: ASPNETCORE_ENVIRONMENT
value: PRODUCTION
- name: ASPNETCORE_URLS
value: http://+:5000
- name: WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT
value: '5'
- name: APPINSIGHTS_INSTRUMENTATIONKEY
value: a9c908d8-192d-482c-906e-1269478fab6f
imagePullSecrets:
- name: imagepullsecrets
Я немного удивлен тем фактом, что различие между нотациями приводит к тому, что функции Azure не регистрируют информацию. У меня сложилось впечатление, что запущенное приложение не заботится или не знает, пришло ли значение из секретной или обычной записи в kubernetes. Хотя это может быть спорным, является ли ключ инструментов секретным или нет, я бы предпочел хранить его там. У кого-нибудь есть идея, почему это может вызвать это?
# Not working
- name: APPINSIGHTS_INSTRUMENTATIONKEY
valueFrom:
secretKeyRef:
name: mytestfunction-secrets
key: ApplicationInsights
# Working
- name: APPINSIGHTS_INSTRUMENTATIONKEY
value: a9c908d8-192d-482c-906e-1269478fab6f
Это версии, которые я использую
- Основные инструменты функций Azure (2.4.419)
- Версия времени выполнения функции: 2.0.12332.0
- Azure AKS: 1.12.x
Также. Инструментальный ключ является поддельным для обмена. не фактический.