#docker #kubernetes #azure-functions #azure-application-insights #azure-aks
#docker #kubernetes #azure-функции #azure-application-insights #azure-aks
Вопрос:
Я уже некоторое время использую функции Azure (нестатические с соответствующим DI). Недавно я добавил ApplicationInsights с помощью ключа APPINSIGHTS_INSTRUMENTATIONKEY. При локальной отладке все работает нормально.
Если я запущу его, опубликовав функцию и используя следующий файл dockerfile для локального запуска в docker, он также будет работать нормально.
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. Однако он не регистрируется в 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 не регистрируются в insights. У меня создалось впечатление, что запущенному приложению было все равно, пришло ли значение из секретной или обычной нотации в kubernetes. Хотя может быть спорным, является ли instrumentationkey секретным или нет, я бы предпочел сохранить его там. У кого-нибудь есть идеи, почему это может быть причиной?
# 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
Также. Ключ инструментария является поддельным для целей совместного использования. не является фактическим.
Комментарии:
1. Вы нашли причину, по которой это не работало? У меня похожая проблема.
2. У меня нет решения, но, возможно, вы могли бы использовать секретную конфигурационную карту для хранения этого значения. У вас все еще есть проблема?