Compartilhar via


Opções de configuração e solução de problemas do provedor do Azure Key Vault para o driver CSI do Armazenamento de Segredos para o Serviço de Kubernetes do Azure (AKS)

Siga as etapas em Usar o provedor do Azure Key Vault para o Driver CSI do Armazenamento de Segredos em um cluster do AKS e Fornecer uma identidade para acessar o provedor do Azure Key Vault para o Driver CSI do Armazenamento de Segredos no AKS. Depois de concluir essas etapas, você poderá aplicar configurações extras ou executar a solução de problemas.

Opções de configuração

Habilitar e desabilitar a rotação automática

Observação

Quando o provedor do Azure Key Vault para o Driver CSI do Armazenamento de Segredos estiver habilitado, ele atualizará a montagem do pod e o segredo do Kubernetes definido no campo secretObjects de SecretProviderClass. Ele faz isso sondando as alterações periodicamente, com base no intervalo de sondagem de rotação que você definiu. O intervalo de sondagem de rotação padrão é de dois minutos.

Observação

Quando um segredo é atualizado em um repositório de segredos externo, após a implantação inicial do pod, o Segredo do Kubernetes e a montagem do pod são atualizados periodicamente, dependendo de como o aplicativo consome os dados de segredo.

Montar o Segredo do Kubernetes como volume: use os recursos de rotação automática e sincronização dos segredos K8s do Driver CSI do Armazenamento de Segredos. O aplicativo precisa observar as alterações no volume montado do Segredo do Kubernetes. Quando o Driver da CSI atualiza o Segredo do Kubernetes, o conteúdo do volume correspondente também é atualizado automaticamente.

O aplicativo lê os dados do sistema de arquivos do contêiner: use o recurso de rotação do Driver CSI do Armazenamento de Segredos. O arquivo precisa observar se há alteração de arquivos no volume montado pelo driver CSI.

Usar o Segredo do Kubernetes para uma variável de ambiente: reinicie o pod para obter o segredo mais recente como variável de ambiente. Use uma ferramenta como o Recarregador para observar as alterações no Segredo do Kubernetes sincronizado e executar atualizações sem interrupção nos pods.

Habilitar a rotação automática em um novo cluster do AKS

  • Habilite a rotação de segredos em um novo cluster usando o comando az aks create e habilite o complemento enable-secret-rotation.

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

Habilitar a rotação automática em um cluster do AKS existente

  • Atualize um cluster existente para habilitar a rotação automática de segredos usando o comando az aks addon update e o parâmetro enable-secret-rotation.

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

Especificar um intervalo de rotação personalizado

  • Especifique um intervalo de rotação personalizado usando o comando az aks addon update com o parâmetro rotation-poll-interval.

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

Desabilitar a rotação automática

Para desabilitar a rotação automática, primeiro você precisa desabilitar o complemento. Em seguida, você pode reabilitar o complemento sem o parâmetro enable-secret-rotation.

  1. Desabilite o complemento do provedor de segredos usando o comando az aks addon disable.

    az aks addon disable --resource-group myResourceGroup --name myAKSCluster2 --addon azure-keyvault-secrets-provider
    
  2. Habilite novamente o complemento do provedor de segredos sem o parâmetro enable-secret-rotation usando o comando az aks addon enable.

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

Se você já estiver usando SecretProviderClass, poderá atualizar o complemento sem desabilitá-lo primeiro, usando az aks addon enable sem especificar o parâmetro enable-secret-rotation.

Sincronizar conteúdo montado com um segredo do Kubernetes

Observação

Os exemplos YAML nesta seção estão incompletos. Você precisa modificá-los para dar suporte ao método escolhido de acesso à sua identidade do cofre de chaves. Para mais detalhes, consulte Fornecer uma identidade para acessar o provedor do Azure Key Vault para o Driver CSI do Armazenamento de Segredos.

Talvez você queira criar um segredo do Kubernetes para espelhar o conteúdo dos segredos montados. Seus segredos são sincronizados depois que você inicia um pod para montá-los. Quando você exclui os pods que consomem os segredos, o segredo do Kubernetes também é excluído.

  • Sincronize o conteúdo montado com um segredo do Kubernetes usando o campo secretObjects ao criar um SecretProviderClass para definir o estado desejado do segredo do Kubernetes, conforme mostrado no exemplo YAML a seguir.

    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)
    

    Observação

    Verifique se objectName no campo secretObjects corresponde ao nome do arquivo do conteúdo montado. Se você usar objectAlias, ele deverá corresponder ao alias do objeto.

Definir variáveis de ambiente para referenciar segredos do Kubernetes

Observação

O exemplo YAML demonstra o acesso a um segredo por meio de variáveis env e volume/volumeMount. É apenas para fins ilustrativos. Um aplicativo típico usaria um método ou outro. No entanto, para um segredo estar disponível por meio de variáveis env, ele deve ser montado por pelo menos um pod.

  • Faça referência ao segredo do Kubernetes recém-criado definindo uma variável de ambiente em seu pod, conforme mostrado no exemplo YAML a seguir.

    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"
    

Métricas de acesso

O Provedor do Azure Key Vault

As métricas são fornecidas por meio do Prometheus na porta 8898, mas, por padrão, essa porta não é exposta fora do pod.

  • Acesse as métricas em localhost usando kubectl port-forward.

    kubectl port-forward -n kube-system ds/aks-secrets-store-provider-azure 8898:8898 & curl localhost:8898/metrics
    
Métricas fornecidas pelo provedor do Azure Key Vault para o Driver CSI do Armazenamento de Segredos
Métrica Descrição Marcas
keyvault_request A distribuição do tempo necessário para obtenção do cofre de chaves. os_type=<runtime os>, provider=azure, object_name=<keyvault object name>, object_type=<keyvault object type>, error=<error if failed>
grpc_request A distribuição do tempo necessário para as solicitações gRPC. os_type=<runtime os>, provider=azure, grpc_method=<rpc full method>, grpc_code=<grpc status code>, grpc_message=<grpc status message>

Driver CSI do repositório de segredos

As métricas são atendidas da porta 8095, mas essa porta não é exposta fora do pod por padrão.

  • Acesse as métricas em localhost usando kubectl port-forward.

    kubectl port-forward -n kube-system ds/aks-secrets-store-csi-driver 8095:8095 &
    curl localhost:8095/metrics
    
Métricas fornecidas pelo Driver CSI do Repositório de Segredos
Métrica Descrição Marcas
total_node_publish O número total de solicitações de montagem de volume bem-sucedidas. os_type=<runtime os>, provider=<provider name>
total_node_unpublish O número total de solicitações de desmontagem de volume bem-sucedidas. os_type=<runtime os>
total_node_publish_error O número total de erros com solicitações de montagem de volume. os_type=<runtime os>, provider=<provider name>, error_type=<error code>
total_node_unpublish_error O número total de erros com solicitações de desmontagem de volume. os_type=<runtime os>
total_sync_k8s_secret O número total de segredos do Kubernetes sincronizados. os_type=<runtime os, provider=<provider name>
sync_k8s_secret_duration_sec A distribuição do tempo necessário para sincronizar o segredo do Kubernetes. os_type=<runtime os>
total_rotation_reconcile O número total de reconciliações de rotação. os_type=<runtime os>, rotated=<true or false>
total_rotation_reconcile_error O número total de reconciliações de rotação com erros. os_type=<runtime os>, rotated=<true or false>, error_type=<error code>
total_rotation_reconcile_error A distribuição do tempo necessário para girar o conteúdo do repositório de segredos para pods. os_type=<runtime os>

Migrar de código aberto para o Driver CSI do Armazenamento de Segredos gerenciado pelo AKS

  1. Desinstale o Driver CSI do Armazenamento de Segredos de código aberto usando o comando helm delete a seguir.

    helm delete <release name>
    

    Observação

    Se você instalou o driver e o provedor usando YAMLs de implantação, poderá excluir os componentes usando o comando kubectl delete a seguir.

    # 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. Atualize o cluster do AKS existente com o recurso usando o comando az aks enable-addons.

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

Solução de problemas

Para obter as etapas de solução de problemas, consulte Solução de problemas do Provedor do Azure Key Vault para Driver do CSI do Repositório de Segredos.

Próximas etapas

Para saber mais sobre o provedor do Azure Key Vault para o Driver CSI do Armazenamento de Segredos, confira os seguintes recursos: