Ведение журнала AzureFunctions AppInsights не работает в Azure AKS

#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. У меня нет решения, но, возможно, вы могли бы использовать секретную конфигурационную карту для хранения этого значения. У вас все еще есть проблема?