#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