Я пытаюсь установить секреты в рабочем приложении pnet core (3.0 SDK), которое запускается в контейнере в Kubernetes. Я могу заставить приложение использовать секретные переменные среды, когда я запускаю его с помощью Visual Studio 2019 в локальном контейнере docker и в контейнере на локальном экземпляре kubernetes на Windows. Это контейнер Linux.
Однако при развертывании его в AKS при запуске приложение не запускается. Он вылетает с ошибкой:
Error response from daemon: OCI runtime create failed: container_linux.go:346: starting container process caused process_linux.go:449: container init caused setenv: invalid argument: unknown
Я уверен, что секреты раскрыты правильно, как показано ниже.
Я выполняю это, определяя свои секреты с помощью yaml похоже на это ниже. Развертывание осуществляется Azure Devops. Значения токена __ заменяются одной из задач конвейера. Я могу проверить значения на странице секретов экземпляров AKS на панели мониторинга и убедиться, что они были правильно развернуты.
apiVersion: v1
kind: Secret
metadata:
name: paymentservicesettings
type: Opaque
data:
dbconnectionstring: __dbconnectionstringbase64__
storagebaseurl: __storagebaseurlbase64__
storageconnectionstring: __storageconnectionstringbase64__
baseuri: __baseuribase64__
subscriptionkey: __subscriptionkeybase64__
userid: __useridbase64__
usersecret: __usersecretbase64__
, где valuesbase64 - строки в кодировке Base 64.
Я запускаю это с помощью команды kubectl apply -f appsettings.yml. Я вижу, что настройки определены правильно, когда я проверяю их через панель инструментов.
Затем я определяю развертывание следующим образом:
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "1"
generation: 1
labels:
run: payment-service
name: payment-service
namespace: default
spec:
progressDeadlineSeconds: 600
replicas: 3
revisionHistoryLimit: 10
selector:
matchLabels:
run: payment-service
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
run: payment-service
spec:
containers:
- image: org.azurecr.io/payment-service:__tagBuildId__ // **this tag is auto replaced for every deployment**
imagePullPolicy: IfNotPresent
name: payment-service
env:
- name: "ASPNETCORE_ENVIRONMENT"
value: "Kubernetes"
- name: "dbconnectionstring"
valueFrom:
secretKeyRef:
name: paymentservicesettings
key: dbconnectionstring
- name: "storagebaseurl"
valueFrom:
secretKeyRef:
name: paymentservicesettings
key: storagebaseurl
- name: "storageconnectionstring"
valueFrom:
secretKeyRef:
name: paymentservicesettings
key: storageconnectionstring
- name: "baseuri"
valueFrom:
secretKeyRef:
name: paymentservicesettings
key: baseuri
- name: "subscriptionkey"
valueFrom:
secretKeyRef:
name: paymentservicesettings
key: subscriptionkey
- name: "userid"
valueFrom:
secretKeyRef:
name: paymentservicesettings
key: userid
- name: "usersecret"
valueFrom:
secretKeyRef:
name: paymentservicesettings
key: usersecret
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
imagePullSecrets:
- name: acr-auth
При первом развертывании службы, она тянет правильно, а затем пытается запустить. К сожалению, тогда кажется, что он не может найти переменные env и вылетает. Поскольку pods cra sh, я не могу отладить, чтобы выяснить, почему они это делают.
Я смотрел на попытку отладки через Azure Dev Devs, но похоже, что это в настоящее время не поддерживается для рабочих служб.
Я пытался убедиться, что у меня есть как можно больше кода обработки исключений на стороне C#, чтобы предотвратить сбои при запуске, но это не имеет никакого значения
Кто-нибудь может подсказать, почему блоки ломаются и что я могу с этим поделать?
спасибо