Använda Azure Key Vault-providern för Secrets Store CSI Driver på Azure Red Hat OpenShift
Med Azure Key Vault Provider for Secrets Store CSI Driver kan du hämta hemligt innehåll som lagras i en Azure Key Vault-instans och använda CSI-drivrutinen för Secrets Store för att montera dem i Kubernetes-poddar. Den här artikeln beskriver hur du använder Azure Key Vault Provider for Secrets Store CSI Driver på Azure Red Hat OpenShift.
Kommentar
Som ett alternativ till den öppen källkod lösning som visas i den här artikeln kan du använda Azure Arc för att hantera dina ARO-kluster tillsammans med tillägget Azure Key Vault Provider for Secrets Store CSI Driver. Den här metoden stöds fullt ut av Microsoft och rekommenderas i stället för den öppen källkod lösningen nedan.
Förutsättningar
Följande krav krävs:
- Ett Azure Red Hat OpenShift-kluster (se Skapa ett Azure Red Hat OpenShift-kluster om du vill veta mer.)
- Azure CLI (inloggad)
- Helm 3.x CLI
Ange miljövariabler
Ange följande variabler som ska användas under hela den här proceduren:
export KEYVAULT_RESOURCE_GROUP=${AZR_RESOURCE_GROUP:-"openshift"}
export KEYVAULT_LOCATION=${AZR_RESOURCE_LOCATION:-"eastus"}
export KEYVAULT_NAME=secret-store-$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 10 | head -n 1)
export AZ_TENANT_ID=$(az account show -o tsv --query tenantId)
Installera CSI-drivrutinen för Kubernetes Secrets Store
Skapa ett ARO-projekt; du distribuerar CSI-drivrutinen till det här projektet:
oc new-project k8s-secrets-store-csi
Ange SecurityContextConstraints så att CSI-drivrutinen kan köras (annars kommer CSI-drivrutinen inte att kunna skapa poddar):
oc adm policy add-scc-to-user privileged \ system:serviceaccount:k8s-secrets-store-csi:secrets-store-csi-driver
Lägg till CSI-drivrutinen för Secrets Store i dina Helm-lagringsplatser:
helm repo add secrets-store-csi-driver \ https://kubernetes-sigs.github.io/secrets-store-csi-driver/charts
Uppdatera dina Helm-lagringsplatser:
helm repo update
Installera CSI-drivrutinen för Secrets Store:
helm install -n k8s-secrets-store-csi csi-secrets-store \ secrets-store-csi-driver/secrets-store-csi-driver \ --version v1.3.1 \ --set "linux.providersDir=/var/run/secrets-store-csi-providers"
Du kan också aktivera autorotation av hemligheter genom att lägga till följande parametrar i kommandot ovan:
--set "syncSecret.enabled=true" --set "enableSecretRotation=true"
Kontrollera att CSI-drivrutinsdaemonuppsättningarna körs:
kubectl --namespace=k8s-secrets-store-csi get pods -l "app=secrets-store-csi-driver"
När du har kört kommandot ovan bör du se följande:
NAME READY STATUS RESTARTS AGE csi-secrets-store-secrets-store-csi-driver-cl7dv 3/3 Running 0 57s csi-secrets-store-secrets-store-csi-driver-gbz27 3/3 Running 0 57s
Distribuera Azure Key Vault-provider för Secrets Store CSI-drivrutin
Lägg till Azure Helm-lagringsplatsen:
helm repo add csi-secrets-store-provider-azure \ https://azure.github.io/secrets-store-csi-driver-provider-azure/charts
Uppdatera dina lokala Helm-lagringsplatser:
helm repo update
Installera Azure Key Vault CSI-providern:
helm install -n k8s-secrets-store-csi azure-csi-provider \ csi-secrets-store-provider-azure/csi-secrets-store-provider-azure \ --set linux.privileged=true --set secrets-store-csi-driver.install=false \ --set "linux.providersDir=/var/run/secrets-store-csi-providers" \ --version=v1.4.1
Ange SecurityContextConstraints så att CSI-drivrutinen kan köras:
oc adm policy add-scc-to-user privileged \ system:serviceaccount:k8s-secrets-store-csi:csi-secrets-store-provider-azure
Skapa nyckelvalv och en hemlighet
Skapa ett namnområde för ditt program.
oc new-project my-application
Skapa ett Azure-nyckelvalv i resursgruppen som innehåller ARO.
az keyvault create -n ${KEYVAULT_NAME} \ -g ${KEYVAULT_RESOURCE_GROUP} \ --location ${KEYVAULT_LOCATION}
Skapa en hemlighet i nyckelvalvet.
az keyvault secret set \ --vault-name ${KEYVAULT_NAME} \ --name secret1 --value "Hello"
Skapa ett huvudnamn för tjänsten för nyckelvalvet.
Kommentar
Om du får ett fel när du skapar tjänstens huvudnamn kan du behöva uppgradera Azure CLI till den senaste versionen.
export SERVICE_PRINCIPAL_CLIENT_SECRET="$(az ad sp create-for-rbac --skip-assignment --name http://$KEYVAULT_NAME --query 'password' -otsv)" export SERVICE_PRINCIPAL_CLIENT_ID="$(az ad sp list --display-name http://$KEYVAULT_NAME --query '[0].appId' -otsv)"
Ange en åtkomstprincip för tjänstens huvudnamn.
az keyvault set-policy -n ${KEYVAULT_NAME} \ --secret-permissions get \ --spn ${SERVICE_PRINCIPAL_CLIENT_ID}
Skapa och märka en hemlighet som Kubernetes kan använda för att komma åt nyckelvalvet.
kubectl create secret generic secrets-store-creds \ -n my-application \ --from-literal clientid=${SERVICE_PRINCIPAL_CLIENT_ID} \ --from-literal clientsecret=${SERVICE_PRINCIPAL_CLIENT_SECRET} kubectl -n my-application label secret \ secrets-store-creds secrets-store.csi.k8s.io/used=true
Distribuera ett program som använder CSI-drivrutinen
Skapa en
SecretProviderClass
för att ge åtkomst till den här hemligheten:cat <<EOF | kubectl apply -f - apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: azure-kvname namespace: my-application spec: provider: azure parameters: usePodIdentity: "false" useVMManagedIdentity: "false" userAssignedIdentityID: "" keyvaultName: "${KEYVAULT_NAME}" objects: | array: - | objectName: secret1 objectType: secret objectVersion: "" tenantId: "${AZ_TENANT_ID}" EOF
Skapa en podd som använder den
SecretProviderClass
som skapades i föregående steg:cat <<EOF | kubectl apply -f - kind: Pod apiVersion: v1 metadata: name: busybox-secrets-store-inline namespace: my-application spec: containers: - name: busybox image: k8s.gcr.io/e2e-test-images/busybox:1.29 command: - "/bin/sleep" - "10000" volumeMounts: - name: secrets-store-inline mountPath: "/mnt/secrets-store" readOnly: true volumes: - name: secrets-store-inline csi: driver: secrets-store.csi.k8s.io readOnly: true volumeAttributes: secretProviderClass: "azure-kvname" nodePublishSecretRef: name: secrets-store-creds EOF
Kontrollera att hemligheten är monterad:
kubectl exec busybox-secrets-store-inline -- ls /mnt/secrets-store/
Utdata ska matcha följande:
secret1
Skriv ut hemligheten:
kubectl exec busybox-secrets-store-inline \ -- cat /mnt/secrets-store/secret1
Utdata ska matcha följande:
Hello
Rensa
Avinstallera Key Vault-providern och CSI-drivrutinen.
Avinstallera Key Vault-providern
Avinstallera Helm-diagram:
helm uninstall -n k8s-secrets-store-csi azure-csi-provider
Ta bort appen:
oc delete project my-application
Ta bort Azure-nyckelvalvet:
az keyvault delete -n ${KEYVAULT_NAME}
Ta bort tjänstens huvudnamn:
az ad sp delete --id ${SERVICE_PRINCIPAL_CLIENT_ID}
Avinstallera CSI-drivrutinen för Kubernetes Secret Store
Ta bort CSI-drivrutinen för Secrets Store:
helm uninstall -n k8s-secrets-store-csi csi-secrets-store oc delete project k8s-secrets-store-csi
Ta bort SecurityContextConstraints:
oc adm policy remove-scc-from-user privileged \ system:serviceaccount:k8s-secrets-store-csi:secrets-store-csi-driver