Partilhar via


Azure Key Vault provider for Secrets Store CSI Driver for Azure Kubernetes Service (AKS) opções de configuração e solução de problemas

Siga as etapas em Usar o provedor do Cofre de Chaves do Azure para Driver CSI do Repositório de Segredos em um cluster AKS e Fornecer uma identidade para acessar o provedor do Cofre de Chaves do Azure para o Driver CSI do Repositório de Segredos no AKS. Depois de concluir essas etapas, você pode aplicar configurações extras ou executar a solução de problemas.

Opções de configuração

Ativar e desativar a rotação automática

Nota

Quando o provedor do Azure Key Vault para o Driver CSI do Secrets Store está habilitado, ele atualiza a montagem do pod e o segredo do Kubernetes definidos no secretObjects campo .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.

Nota

Quando um segredo é atualizado em um armazenamento 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 secretos.

Monte o Segredo do Kubernetes como um volume: Use os recursos de autorrotação e sincronização de segredos do K8s do Driver CSI da Loja de Segredos. O aplicativo precisa observar as alterações do volume Kubernetes Secret montado. Quando o driver 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 Secrets Store CSI Driver. O aplicativo precisa observar a mudança de arquivo do volume montado pelo driver CSI.

Use o Segredo do Kubernetes para uma variável de ambiente: reinicie o pod para obter o segredo mais recente como uma variável de ambiente. Use uma ferramenta como o Reloader para observar as alterações no Kubernetes Secret sincronizado e executar atualizações contínuas em pods.

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

  • Habilite a rotação automática de segredos em um novo cluster usando o az aks create comando 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 AKS existente

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

    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 az aks addon update comando com o rotation-poll-interval parâmetro.

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

Desativar a rotação automática

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

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

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

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

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

Sincronize o conteúdo montado com um segredo do Kubernetes

Nota

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

Você pode querer criar um segredo do Kubernetes para espelhar seu conteúdo de segredos montado. Seus segredos são sincronizados depois que você inicia um pod para montá-los. Quando você exclui os pods que consomem os segredos, seu segredo do Kubernetes também é excluído.

  • Sincronize o conteúdo montado com um segredo do Kubernetes usando o secretObjects campo ao criar um SecretProviderClass para definir o estado desejado do segredo do Kubernetes, conforme mostrado no exemplo a seguir 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)
    

    Nota

    Verifique se o objectName no campo corresponde ao secretObjects nome do arquivo do conteúdo montado. Se você usar objectAlias em vez disso, ele deve corresponder ao alias do objeto.

Definir uma variável de ambiente para fazer referência a segredos do Kubernetes

Nota

O exemplo YAML demonstra o acesso a um segredo através de variáveis env e volume/volumeMount. Isto é para fins ilustrativos. Uma aplicação típica usaria um método ou outro. No entanto, esteja ciente de que, para que um segredo esteja disponível através de variáveis env, ele primeiro 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 a seguir 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"
    

Métricas de acesso

O provedor do Azure Key Vault

As métricas são servidas via Prometheus a partir da porta 8898, mas essa porta não é exposta fora do pod por padrão.

  • Acesse as métricas através do localhost usando kubectl port-forwardo .

    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 Secrets Store
Métrico Description Etiquetas
keyvault_request A distribuição de quanto tempo levou para chegar 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 de quanto tempo levou 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>

O Driver CSI da Loja de Segredos

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

  • Acesse as métricas através do localhost usando kubectl port-forwardo .

    kubectl port-forward -n kube-system ds/aks-secrets-store-csi-driver 8095:8095 &
    curl localhost:8095/metrics
    
Métricas fornecidas pelo driver CSI da Loja de Segredos
Métrico Description Etiquetas
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 de quanto tempo levou para sincronizar o segredo do Kubernetes. os_type=<runtime os>
total_rotation_reconcile O número total de rotações é reconciliado. os_type=<runtime os>, rotated=<true or false>
total_rotation_reconcile_error O número total de rotações é reconciliado com erros. os_type=<runtime os>, rotated=<true or false>, error_type=<error code>
total_rotation_reconcile_error A distribuição de quanto tempo levou para girar o conteúdo de armazenamento de segredos para pods. os_type=<runtime os>

Migre do código aberto para o driver CSI da Loja de Segredos gerenciado pelo AKS

  1. Desinstale o driver CSI do Secrets Store de código aberto usando o comando a seguir helm delete .

    helm delete <release name>
    

    Nota

    Se você instalou o driver e o provedor usando YAMLs de implantação, poderá excluir os componentes usando o comando a seguir 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. Atualize seu cluster AKS existente com o recurso usando o az aks enable-addons comando.

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

Resolução de Problemas

Para obter as etapas de solução de problemas, consulte Solucionar problemas do provedor do Azure Key Vault para driver CSI do repositório de segredos.

Próximos passos

Para saber mais sobre o provedor do Azure Key Vault for Secrets Store CSI Driver, consulte os seguintes recursos: