Udostępnij za pośrednictwem


Dostawca Azure Key Vault dla drivera Secrets Store CSI w usłudze Azure Kubernetes Service (AKS): konfiguracja i opcje rozwiązywania problemów.

Wykonaj kroki opisane w Użyj dostawcę Azure Key Vault dla sterownika Secrets Store CSI w klastrze AKS i Podaj tożsamość, aby uzyskać dostęp do dostawcy Azure Key Vault dla sterownika Secrets Store CSI w AKS. Po wykonaniu tych kroków możesz zastosować dodatkowe konfiguracje lub wykonać rozwiązywanie problemów.

Opcje konfiguracji

Włączanie i wyłączanie automatycznego obracania

Po włączeniu automatycznego aktualizowania dla dostawcy tajemnic Azure Key Vault, zostaje zaktualizowane montowanie zasobnika (pod) oraz 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.

Gdy wpis tajny jest aktualizowany w zewnętrznym magazynie wpisów tajnych po początkowym wdrożeniu zasobnika, wpis tajny Kubernetes i instalacja zasobnika okresowo są aktualizowane w zależności od sposobu, w jaki aplikacja korzysta z danych tajnych.

  • Zamontuj sekret Kubernetes jako wolumin: użyj funkcji automatycznego obracania i synchronizowania 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 w sterowniku Secrets Store CSI. Aplikacja musi monitorować zmiany plików na woluminie zamontowanym przez sterownik CSI.

  • Użyj sekretu Kubernetes dla zmiennej środowiskowej: Uruchom ponownie pod, 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.

Włącz automatyczną rotację na nowym klastrze AKS

  • Włącz automatyczne rotowanie tajemnic w nowym klastrze przy użyciu polecenia az aks create i włącz dodatek enable-secret-rotation.

    az aks create \
        --name myAKSCluster2 \
        --resource-group myResourceGroup \
        --enable-addons azure-keyvault-secrets-provider \
        --enable-secret-rotation \
        --generate-ssh-keys
    

Włącz auto-rotację w istniejącym klastrze AKS

  • Zaktualizuj istniejący klaster, aby włączyć automatyczną rotację sekretów za pomocą polecenia az aks addon update i parametru enable-secret-rotation.

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

Określanie niestandardowego interwału rotacji

  • Określ niestandardowy interwał rotacji przy użyciu az aks addon update polecenia z parametrem rotation-poll-interval .

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

Wyłączanie automatycznego obracania

Aby wyłączyć automatyczne obracanie, należy najpierw wyłączyć dodatek. Następnie możesz ponownie włączyć dodatek bez parametru enable-secret-rotation .

  1. Wyłącz dodatek dostawcy sekretów przy użyciu polecenia az aks addon disable.

    az aks addon disable --resource-group myResourceGroup --name myAKSCluster2 --addon azure-keyvault-secrets-provider
    
  2. Ponownie włącz dodatek dostawcy wpisów tajnych bez parametru enable-secret-rotation przy użyciu polecenia az aks addon enable.

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

Jeśli używasz już SecretProviderClass, możesz zaktualizować dodatek bez wyłączania go, używając az aks addon enable bez określenia parametru 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.

    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)
    

    Uwaga

    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.

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

Uwaga

Przykładowy kod YAML demonstruje dostęp do wpisu tajnego za pomocą zmiennych env i woluminu/woluminuMount. Jest to przeznaczone do celów ilustracyjnych. Typowa aplikacja używałaby jednej metody lub drugiej. Należy jednak pamiętać, że aby sekret był dostępny za pośrednictwem zmiennych środowiskowych, najpierw musi być zamontowany przez co najmniej jeden pod.

  • 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"
    

Metryki dostępu

Dostawca usługi Azure Key Vault

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 przy użyciu polecenia kubectl port-forward.

    kubectl port-forward -n kube-system ds/aks-secrets-store-provider-azure 8898:8898 & curl localhost:8898/metrics
    
Metryki udostępniane przez dostawcę usługi Azure Key Vault dla sterownika CSI dla tajnych magazynów
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>

Sterownik CSI magazynu wpisów tajnych

Metryki są serwowane z portu 8095, ale ten port nie jest domyślnie udostępniony poza podem.

  • Uzyskaj dostęp do metryk za pośrednictwem hosta lokalnego przy użyciu polecenia kubectl port-forward.

    kubectl port-forward -n kube-system ds/aks-secrets-store-csi-driver 8095:8095 &
    curl localhost:8095/metrics
    
Metryki udostępniane przez sterownik CSI magazynu sekretów
Metryczne opis Tagi
całkowita_publikacja_węzła Całkowita liczba pomyślnych żądań instalacji woluminu. os_type=<runtime os>, provider=<provider name>
total_node_unpublish Całkowita liczba pomyślnych żądań odinstalowania woluminu. os_type=<runtime os>
total_node_publish_error Całkowita liczba błędów dotyczących żądań montowania woluminu. os_type=<runtime os>, provider=<provider name>, error_type=<error code>
liczba_błędu_publikacji_węzła Całkowita liczba błędów związanych z żądaniami odinstalowania woluminu. os_type=<runtime os>
total_sync_k8s_secret Całkowita liczba zsynchronizowanych sekretów Kubernetes. os_type=<runtime os, provider=<provider name>
sync_k8s_secret_duration_sec Rozkład czasu synchronizacji sekretu Kubernetes. os_type=<runtime os>
total_rotation_reconcile Łączna liczba uzgodnień rotacji. os_type=<runtime os>, rotated=<true or false>
błąd w uzgadnianiu całkowitej rotacji Łączna liczba rotacji uwzględnia błędy. os_type=<runtime os>, rotated=<true or false>, error_type=<error code>
błąd_uzgodnienia_całkowitej_rotacji Rozkład czasu rotacji zawartości sklepu tajemnic dla kontenerów. os_type=<runtime os>

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

  1. Odinstaluj sterownik CSI magazynu wpisów tajnych typu open source przy użyciu następującego helm delete polecenia.

    helm delete <release name>
    

    Uwaga

    Jeśli sterownik i dostawca zostały zainstalowane przy użyciu dokumentów YAML wdrożeniowych, 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, korzystając z funkcji za pomocą polecenia az aks enable-addons.

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

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: