секрет-вкол@azurekeyvault ждет вечно

#kubernetes-helm #azure-aks #azure-keyvault #helm3 #akv2k8s

Вопрос:

Я хотел бы использовать akv2k8s.io для добавления хранилища ключей в kubernetes с помощью диаграммы управления.

 apiVersion: spv.no/v2beta1
kind: AzureKeyVaultSecret
metadata:
  name: secret-sync 
  namespace: akv-test-butfa
spec:
  vault:
    name: akv2k8s-butfa # name of key vault
    object:
      name: myusername # name of the akv object
      type: secret # akv object type
  output: 
    secret: 
      name: my-secret-from-butfa # kubernetes secret name
      dataKey: secret-value # key to store object value in kubernetes secret
 

И мой файл развертывания:

 apiVersion: apps/v1
kind: Deployment
metadata:
  name: akvs-secret-app
  namespace: akv-test-butfa
  labels:
    app: akvs-secret-app
spec:
  selector:
    matchLabels:
      app: akvs-secret-app
  template:
    metadata:
      labels:
        app: akvs-secret-app
    spec:
      containers:
      - name: akv2k8s-env-test
        image: spvest/akv2k8s-env-test:2.0.1
        args: ["TEST_SECRET"]
        env:
        - name: TEST_SECRET
          value: "secret-inject@azurekeyvault" # ref to akvs
 

Я создал keyvault-это имя: akv2k8s-butfa с секретом, и я установил для этого разрешение.

 $kubectl -n akv-test get akvs
    NAME          VAULT                VAULT OBJECT   SECRET NAME   SYNCHED   AGE
    secret-sync   akv2k8s-test-butfa   mysecret                               6h26m
 

Но у меня есть иссюз:

 secret-inject@azurekeyvault
waiting forever...
 

Когда я вижу журналы развертывания.

Обновить:

 State:          Waiting
  Reason:       CrashLoopBackOff
Last State:     Terminated
  Reason:       Error
  Exit Code:    1
  Started:      Fri, 29 Oct 2021 07:50:15  0700
  Finished:     Fri, 29 Oct 2021 07:50:15  0700
Ready:          False
Restart Count:  7
Environment Variables from:
  my-secret-from-butfa  Secret  Optional: false
Environment:            <none>
 

введите описание изображения здесь

Ответ №1:

Забавно, я тоже играл на этой неделе с akv2k8s 🙂

Вы создали назначение роли для идентификатора kubelet для вашего keyvault?

 resource "azurerm_role_assignment" "akv_k8s_reader" {
  scope                = azurerm_key_vault.akv.id
  role_definition_name = "Key Vault Secrets User"
  principal_id         = azurerm_kubernetes_cluster.aks.kubelet_identity[0].object_id
}
 

или

 export KUBE_ID=$(az aks show -g <resource group> -n <aks cluster name> --query identityProfile.kubeletidentity.objectId -o tsv)
export AKV_ID=$(az keyvault show -g <resource group> -n <akv name> --query id -o tsv)
az role assignment create --assignee $KUBE_ID --role "Key Vault Secrets User" --scope $AKV_ID
 

ПРИМЕЧАНИЕ. Для вашего Azure KeyVault необходимо включить RBAC.

Я также заметил, что вам это нужно только в том случае, если вам нужна функция инжектора:

 apiVersion: spv.no/v2beta1
kind: AzureKeyVaultSecret
metadata:
  name: secret-sync 
  namespace: akv-test-butfa
spec:
  vault:
    name: akv2k8s-butfa # name of key vault
    object:
      name: myusername # name of the akv object
      type: secret # akv object 
 

Вывод в функции AzureKeyVaultSecret предназначен для использования в качестве секретной синхронизации, и тогда ваш манифест модуля будет выглядеть следующим образом:

   envFrom:
  - secretRef:
      name: my-secret-from-butfa
 

Комментарии:

1. Привет, Филип Уэлц, Как проверить, правильно ли это применяется ?

2. я бы предложил использовать для секретной синхронизации функцию формы akv2k8s, там вы также видите этот статус синхронизации. Использование секретов из переменных ENV не рекомендуется. Вы должны установить этот секрет в качестве тома.

3. Просто обновил изображение по вопросу, там есть переменная окружения

4. так это работает?

5. знаете ли вы, что AuthService = false в модуле инжектора? У меня есть разрешение на идентификацию в keyvault