Получить секрет среды из кластера AKS kubernetes для развернутого основного веб-приложения ASP.Net - PullRequest
0 голосов
/ 16 октября 2018

У меня развернуто веб-приложение на AKS, и оно обычно работает нормально.Сейчас я пытаюсь расширить его функциональность, добавив доступ к Azure sql.

Мы используем VSTS / Azure DevOps для развертывания.

Я развернул секрет в кластере с помощью команды:

kubectl secret generic sampleapp-appsettings --from-literal=DBConnectionString="$(var_DBConnectionString)"

Я проверил кластерс приборной панели kubernetes и можно увидеть, что он был развернут, как ожидалось.Секретом является строка подключения к базе данных

Однако я изо всех сил пытаюсь извлечь секрет из развернутых модулей.Я создал переменную среды для ASPNETCORE_ENVIRONMENT со значением для Kubernetes.

Вот часть моего развертывания yaml:

    spec:
  containers:
  - name: sampleapp-services
    image: sampleapp.azurecr.io/sampleapp-services:latest
    imagePullPolicy: Always          
    env:
    - name: "ASPNETCORE_ENVIRONMENT"
      value: "Kubernetes"
    - name: services-appsettings
      valueFrom:
        secretKeyRef:
          name: services-appsettings
          key: DBConnectionString          
    ports:
    - containerPort: 80 

Я добавил конечную точку API в свое приложение дляв целях отладки и может видеть, что значение ASPNETCORE_ENVIRONMENT извлекается правильно.

однако значение DBConnectionString неправильно извлекается из секрета kubernetes.вместо этого он извлекается из файла appsettings.json.У меня есть некоторый код в моем приложении, который просто выводит значения:

        [HttpGet("settings")]
    public ActionResult<string> GetAppSettings()
    {
        var message = $"Host: {Environment.MachineName}\n" +
                      $"EnvironmentName: {_env.EnvironmentName}\n" +
                      $"Secret value: {_dataSettings.ConnectionString}";
        return message;
    }

в моем классе DataSettings У меня есть такой код:

 var value = Environment.GetEnvironmentVariable("DBConnectionString");

Однако это нене извлекаю секретное значение из кластера kubernetes, которое я ожидаю.

Я следовал некоторым примерам, подобным этому - но они не помогают.

blog

У кого-нибудь есть простой шаг за шагоминструкции / образцы, которые могут помочь?

спасибо

1 Ответ

0 голосов
/ 18 октября 2018

В команде, которую вы указали для создания секрета, отсутствует команда create, и она создает секрет с именем «sampleapp-appsettings», однако в deploy.yaml вместо этого вы указали «services-appsettings».Я предполагаю, что перечисленные вами фрагменты приведены только для справки, и в реальном коде эти значения совпадают.

Во-вторых, переменная окружения - name: services-appsettings должна соответствовать имени, указанному вами в коде.Согласно вашим фрагментам, Environment.GetEnvironmentVariable("DBConnectionString") имеет 'DBConnectionString', однако у вашего yaml есть 'services-appsettings'

Наконец, я надеюсь, что в Web API вы вызываете .AddEnvironmentVariables () при создании конфигурации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...