Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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.
Anmärkning
Som ett alternativ till lösningen med öppen källkod som visas i den här artikeln kan du använda Azure Arc för att hantera dina kluster tillsammans med dess Azure Key Vault Provider for Secrets Store CSI Driver-tillägg. 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 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 Azure Red Hat OpenShift. - 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. - Anmärkning - 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 - SecretProviderClassfö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 - SecretProviderClasssom 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
Rengöring
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