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 complementoenable-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âmetroenable-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âmetrorotation-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
.
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
Habilite novamente o complemento do provedor de segredos sem o parâmetro
enable-secret-rotation
usando o comandoaz 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 umSecretProviderClass
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 camposecretObjects
corresponde ao nome do arquivo do conteúdo montado. Se você usarobjectAlias
, 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
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
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:
Azure Kubernetes Service