Поделиться через


Поставщик Azure Key Vault для драйвера CSI хранилища секретов для конфигурации Служба Azure Kubernetes (AKS) и параметров устранения неполадок

Выполните действия, описанные в разделе "Использование поставщика Azure Key Vault для драйвера CSI хранилища секретов" в кластере AKS и предоставление удостоверения для доступа к поставщику Azure Key Vault для драйвера CSI хранилища секретов в AKS. После выполнения этих действий можно применить дополнительные конфигурации или выполнить устранение неполадок.

Варианты конфигурации

Включение и отключение автоматической смены

Примечание.

Если включен поставщик Azure Key Vault для драйвера CSI хранилища секретов, он обновляет подключение pod и секрет Kubernetes, определенный в secretObjects поле SecretProviderClass. Это делается путем периодического опроса изменений в зависимости от заданного интервала опроса поворота. Интервал опроса поворота по умолчанию составляет две минуты.

Примечание.

Когда секрет обновляется во внешнем хранилище секретов после первоначального развертывания pod, секрет Kubernetes и подключение pod периодически обновляются в зависимости от того, как приложение использует секретные данные.

Подключите секрет Kubernetes в качестве тома: используйте функции автоматического поворота и синхронизации секретов K8s драйвера CSI хранилища секретов. Приложение должно отслеживать изменения из подключенного тома Секрета Kubernetes. Когда драйвер CSI обновляет секрет Kubernetes, соответствующее содержимое тома автоматически обновляется.

Приложение считывает данные из файловой системы контейнера: используйте функцию поворота драйвера CSI хранилища секретов. Приложение должно отслеживать изменение файла из тома, подключенного драйвером CSI.

Использование секрета Kubernetes для переменной среды: перезапустите pod, чтобы получить последний секрет в качестве переменной среды. Используйте инструмент, например Средство перезагрузки, чтобы отслеживать изменения в синхронизированном секрете Kubernetes и выполнять последовательное обновление модулей pod.

Включение автоматической смены в новом кластере AKS

  • Включите автоматическую смену секретов в новом кластере с помощью az aks create команды и включите надстройку enable-secret-rotation .

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

Включение автоматической смены в существующем кластере AKS

  • Обновите существующий кластер, чтобы включить автоматическую смену секретов с помощью az aks addon update команды и enable-secret-rotation параметра.

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

Указание пользовательского интервала поворота

  • Укажите настраиваемый интервал поворота с помощью az aks addon update команды с параметром rotation-poll-interval .

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

Отключение автоматического поворота

Чтобы отключить автоматическую смену, сначала необходимо отключить надстройку. Затем можно повторно включить надстройку без enable-secret-rotation параметра.

  1. Отключите надстройку поставщика секретов с помощью az aks addon disable команды.

    az aks addon disable --resource-group myResourceGroup --name myAKSCluster2 --addon azure-keyvault-secrets-provider
    
  2. Повторно включите надстройку поставщика секретов без enable-secret-rotation параметра с помощью az aks addon enable команды.

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

Если вы уже используете SecretProviderClassнадстройку, вы можете обновить надстройку, не отключив ее сначала с помощью az aks addon enable без указания enable-secret-rotation параметра.

Синхронизация подключенного содержимого с секретом Kubernetes

Примечание.

Примеры YAML в этом разделе являются неполными. Их необходимо изменить для поддержки выбранного метода доступа к удостоверению хранилища ключей. Дополнительные сведения см. в статье "Предоставление удостоверения для доступа к поставщику Azure Key Vault для драйвера CSI хранилища секретов".

Возможно, потребуется создать секрет Kubernetes для зеркального отображения содержимого подключенных секретов. Синхронизация секретов после запуска модуля pod для их подключения. При удалении модулей pod, использующих секреты, также удаляется секрет Kubernetes.

  • Синхронизируйте подключенное содержимое с секретом Kubernetes с помощью secretObjects поля при создании SecretProviderClass нужного состояния секрета Kubernetes, как показано в следующем примере 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)
    

    Примечание.

    Убедитесь, objectName что в secretObjects поле совпадает имя файла подключенного содержимого. Если вместо этого вы используете objectAlias, это значение должно соответствовать псевдониму объекта.

Установка переменной среды для ссылки на секреты Kubernetes

Примечание.

В примере YAML демонстрируется доступ к секрету с помощью переменных env и volume/volumeMount. Он приведен только для демонстрации. Обычное приложение будет использовать один метод или другой. Однако помните, что для того, чтобы секрет был доступен через переменные env, он сначала должен быть подключен по крайней мере одним модулем pod.

  • Наведите ссылку на созданный секрет Kubernetes, задав переменную среды в модуле pod, как показано в следующем примере 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"
    

Доступ к метрикам

Поставщик Azure Key Vault

Метрики обслуживаются через Prometheus через порт 8898, но по умолчанию этот порт недоступен за пределами модуля pod.

  • Доступ к метрикам через localhost с помощью kubectl port-forward.

    kubectl port-forward -n kube-system ds/aks-secrets-store-provider-azure 8898:8898 & curl localhost:8898/metrics
    
Метрики, предоставляемые поставщиком Azure Key Vault для драйвера CSI хранилища секретов
Метрическая Description Теги
keyvault_request Распределение времени, необходимого для получения из хранилища ключей. os_type=<runtime os>, , provider=azureobject_name=<keyvault object name>, object_type=<keyvault object type>error=<error if failed>
grpc_request Распределение времени, сколько времени потребовалось для запросов gRPC. os_type=<runtime os>, , provider=azuregrpc_method=<rpc full method>, grpc_code=<grpc status code>grpc_message=<grpc status message>

Драйвер CSI хранилища секретов

Метрики обслуживаются из порта 8095, но этот порт не предоставляется за пределами pod по умолчанию.

  • Доступ к метрикам через localhost с помощью kubectl port-forward.

    kubectl port-forward -n kube-system ds/aks-secrets-store-csi-driver 8095:8095 &
    curl localhost:8095/metrics
    
Метрики, предоставляемые драйвером CSI хранилища секретов
Метрическая Description Теги
total_node_publish Общее количество успешных запросов на подключение томов. os_type=<runtime os>, provider=<provider name>
total_node_unpublish Общее количество успешных запросов на отключение тома. os_type=<runtime os>
total_node_publish_error Общее количество ошибок с запросами на подключение томов. os_type=<runtime os>, , provider=<provider name>error_type=<error code>
total_node_unpublish_error Общее количество ошибок с запросами на отключение тома. os_type=<runtime os>
total_sync_k8s_secret Общее количество синхронизированных секретов Kubernetes. os_type=<runtime os, provider=<provider name>
sync_k8s_secret_duration_sec Распределение времени синхронизации секрета Kubernetes. os_type=<runtime os>
total_rotation_reconcile Общее число примирений поворота. os_type=<runtime os>, rotated=<true or false>
total_rotation_reconcile_error Общее количество поворотов примиряется с ошибками. os_type=<runtime os>, , rotated=<true or false>error_type=<error code>
total_rotation_reconcile_error Распределение времени, необходимого для смены содержимого хранилища секретов для модулей pod. os_type=<runtime os>

Миграция из открытого кода в драйвер CSI хранилища секретов, управляемого AKS

  1. Удалите драйвер CSI хранилища секретов с открытым исходным кодом, выполнив следующую helm delete команду.

    helm delete <release name>
    

    Примечание.

    Если вы установили драйвер и поставщик с помощью YAMLs развертывания, можно удалить компоненты с помощью следующей 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. Обновите существующий кластер AKS с помощью функции с помощью az aks enable-addons команды.

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

Устранение неполадок

Инструкции по устранению неполадок см. в разделе "Устранение неполадок с поставщиком Хранилища ключей Azure" для драйвера CSI хранилища секретов.

Следующие шаги

Дополнительные сведения о поставщике Azure Key Vault для драйвера CSI хранилища секретов см. в следующих ресурсах: