Udostępnij przez


Dostawca usługi Azure Key Vault dla sterownika CSI dla magazynu tajemnic w celu konfiguracji i rozwiązywania problemów z usługą AKS

Dostawca usługi Azure Key Vault dla sterownika interfejsu CSI (Container Storage Interface) magazynu wpisów tajnych umożliwia bezpieczne i zautomatyzowane zarządzanie wpisami tajnymi w usłudze Azure Kubernetes Service (AKS). Ten artykuł zawiera wskazówki dotyczące konfigurowania dostawcy, rozwiązywania typowych problemów i optymalizowania zarządzania sekretami w środowisku usługi AKS.

Wymagania wstępne

Przed kontynuowaniem pracy z tym przewodnikiem wykonaj kroki opisane w poniższych artykułach. Po wykonaniu tych kroków możesz zastosować dodatkowe konfiguracje lub wykonać rozwiązywanie problemów w klastrze usługi AKS.

Opcje konfiguracji

Zarządzanie automatycznym obracaniem

Po włączeniu automatycznej rotacji dla dostawcy wpisów tajnych usługi Azure Key Vault zaktualizuje on montaż zasobników i wpis tajny Kubernetes zdefiniowany w polu secretObjectsSecretProviderClass. Wykonuje to poprzez okresowe sondowanie pod kątem zmian, zgodnie z ustalonym przez Ciebie interwałem rotacji. Domyślny interwał sondowania rotacji to dwie minuty. Po zaktualizowaniu wpisu tajnego w zewnętrznym magazynie wpisów tajnych po początkowym wdrożeniu zasobnika zarówno wpis tajny Kubernetes, jak i instalacja zasobnika są okresowo odświeżane. Częstotliwość aktualizacji i metoda zależą od sposobu uzyskiwania przez aplikację dostępu do tajnych danych.

  • Zamontuj Sekret Kubernetes jako wolumin: użyj funkcji automatycznego obracania i synchronizacji sekretów K8s Sterownika CSI Secrets Store. Aplikacja musi obserwować zmiany w zamontowanym woluminie sekretu Kubernetes. Gdy sterownik CSI aktualizuje wpis tajny Kubernetes, odpowiednia zawartość woluminu zostanie również automatycznie zaktualizowana.

  • Aplikacja odczytuje dane z systemu plików kontenera: użyj funkcji rotacji Secrets Store CSI Driver. Aplikacja musi monitorować zmiany plików na woluminie zamontowanym przez sterownik CSI.

  • Użyj sekreta Kubernetes dla zmiennej środowiskowej: zrestartuj zasobnik, aby uzyskać najnowszy sekret jako zmienną środowiskową. Użyj narzędzia takiego jak Reloader, aby monitorować zmiany w zsynchronizowanym Kubernetes Secret i przeprowadzić aktualizacje kroczące na pods.

  1. Aby włączyć automatyczną rotację sekretów w nowym klastrze usługi AKS przy użyciu az aks create i włączyć dodatek enable-secret-rotation, uruchom następujące polecenie:

    az aks create \
        --name myAKSCluster2 \
        --resource-group myResourceGroup \
        --enable-addons azure-keyvault-secrets-provider \
        --enable-secret-rotation \
        --generate-ssh-keys
    
  2. Aby zaktualizować istniejący klaster usługi AKS w celu włączenia automatycznego obracania tajemnic przy użyciu az aks addon update polecenia i parametru enable-secret-rotation, uruchom następujące polecenie:

    az aks addon update --resource-group myResourceGroup --name myAKSCluster2 --addon azure-keyvault-secrets-provider --enable-secret-rotation
    

Synchronizowanie zamontowanej zawartości z sekretem Kubernetes

Uwaga

Przykłady YAML w tej sekcji są niekompletne. Należy je zmodyfikować, aby obsługiwać wybraną metodę dostępu do tożsamości magazynu kluczy. Aby uzyskać szczegółowe informacje, zobacz Zapewnianie tożsamości, aby uzyskać dostęp do dostawcy Azure Key Vault dla sterownika CSI Secrets Store.

Możesz utworzyć tajne dane Kubernetes, aby odzwierciedlić zawartość twoich zamontowanych tajnych danych. Twoje tajne dane są synchronizowane po uruchomieniu zasobnika w celu ich zamontowania. Usunięcie zasobników korzystających z sekretów spowoduje również usunięcie sekretu Kubernetes.

Synchronizowanie zamontowanej zawartości z tajnym Kubernetes przy użyciu pola secretObjects podczas tworzenia elementu SecretProviderClass w celu definiowania żądanego stanu tajnego Kubernetes, jak pokazano w poniższym przykładzie YAML. Upewnij się, że objectName w polu secretObjects jest zgodne z nazwą pliku zamontowanej zawartości. Jeśli zamiast tego używasz objectAlias , powinien on być zgodny z aliasem obiektu.

apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: azure-sync
spec:
  provider: azure
  secretObjects:             # [OPTIONAL] SecretObjects defines the desired state of synced Kubernetes secret objects
  - data:
    - key: username          # data field to populate
      objectName: foo1       # name of the mounted content to sync; this could be the object name or the object alias
    secretName: foosecret    # name of the Kubernetes secret object
    type: Opaque             # type of Kubernetes secret object (for example, Opaque, kubernetes.io/tls)

Ustaw zmienną środowiskową do odwołania się do tajemnic Kubernetes

Uwaga

W przykładowym pliku YAML pokazano, jak uzyskać dostęp do sekretu za pomocą zmiennych środowiskowych lub volume/volumeMount. Zazwyczaj aplikacja używa jednej metody lub drugiej. Aby jednak udostępnić sekret za pomocą zmiennych środowiskowych, co najmniej jeden pod musi zamontować sekret.

Odwołuj się do nowo utworzonego sekretu Kubernetes, ustawiając zmienną środowiskową w podzie, jak pokazano w poniższym przykładzie YAML.

kind: Pod
apiVersion: v1
metadata:
  name: busybox-secrets-store-inline
spec:
  containers:
    - name: busybox
      image: registry.k8s.io/e2e-test-images/busybox:1.29-1
      command:
        - "/bin/sleep"
        - "10000"
      volumeMounts:
      - name: secrets-store01-inline
        mountPath: "/mnt/secrets-store"
        readOnly: true
      env:
      - name: SECRET_USERNAME
        valueFrom:
          secretKeyRef:
            name: foosecret
            key: username
  volumes:
    - name: secrets-store01-inline
      csi:
        driver: secrets-store.csi.k8s.io
        readOnly: true
        volumeAttributes:
          secretProviderClass: "azure-sync"

Migrowanie z otwartoźródłowego sterownika CSI magazynu wpisów tajnych do sterownika zarządzanego przez AKS

  1. Odinstaluj open-source'owy sterownik CSI do zarządzania tajnymi danymi przy użyciu następującego helm delete polecenia:

    helm delete <release name>
    

    Wskazówka

    Jeśli sterownik i dostawcę zostały zainstalowane przy użyciu plików YAML wdrożenia, możesz usunąć składniki przy użyciu następującego polecenia kubectl delete.

    # Delete AKV provider pods from Linux nodes
    kubectl delete -f https://raw.githubusercontent.com/Azure/secrets-store-csi-driver-provider-azure/master/deployment/provider-azure-installer.yaml
    
    # Delete AKV provider pods from Windows nodes
    kubectl delete -f https://raw.githubusercontent.com/Azure/secrets-store-csi-driver-provider-azure/master/deployment/provider-azure-installer-windows.yaml
    
  2. Uaktualnij istniejący klaster usługi AKS używając polecenia az aks enable-addons.

    az aks enable-addons --addons azure-keyvault-secrets-provider --name myAKSCluster --resource-group myResourceGroup
    

Metryki dostępu

Możesz monitorować kondycję i wydajność dostawcy usługi Azure Key Vault dla Sterownika CSI Sklepu Tajemnic, zbierając ujawniane przez niego metryki. Te wskaźniki zapewniają wgląd w czasy trwania żądań, wskaźniki błędów oraz ogólne działanie komponentów dostawcy i sterownika, ułatwiając rozwiązywanie problemów i optymalizację zarządzania tajnymi danymi klastra usługi AKS.

Metryki są obsługiwane za pośrednictwem Prometheus z portu 8898, ale ten port nie jest domyślnie uwidoczniony poza podem. Uzyskaj dostęp do metryk za pośrednictwem hosta lokalnego kubectl port-forward przy użyciu polecenia :

kubectl port-forward -n kube-system ds/aks-secrets-store-provider-azure 8898:8898 & curl localhost:8898/metrics

Te metryki ułatwiają monitorowanie wydajności i niezawodności dostawcy usługi Azure Key Vault, w tym opóźnienia żądań i śledzenia błędów zarówno dla usługi Key Vault, jak i operacji gRPC.

Metryczne opis Tagi
keyvault_request Rozkład czasu trwania procesu pobierania danych z magazynu kluczy. os_type=<runtime os>, , provider=azure, object_name=<keyvault object name>, , object_type=<keyvault object type>error=<error if failed>
grpc_request Rozkład czasu trwania żądań gRPC. os_type=<runtime os>, , provider=azure, grpc_method=<rpc full method>, , grpc_code=<grpc status code>grpc_message=<grpc status message>

Rozwiązywanie problemów

Aby uzyskać instrukcje rozwiązywania problemów, zobacz Rozwiązywanie problemów z dostawcą usługi Azure Key Vault dla sterownika CSI magazynu sekretów.

Następne kroki

Aby dowiedzieć się więcej o dostawcy Azure Key Vault dla CSI Driver magazynu tajemnic, zapoznaj się z następującymi zasobami: