Como usar o Service Connector no AKS (Serviço de Kubernetes do Azure)
O AKS (Serviço de Kubernetes do Azure) é um dos serviços de computação com suporte do Service Connector. Este artigo tem como objetivo ajudá-lo a entender:
- Quais operações são feitas no cluster ao criar uma conexão de serviço.
- Como usar os recursos kubernetes que o Service Connector cria.
- Como solucionar problemas e exibir logs do Service Connector em um cluster do AKS.
Pré-requisitos
- Este guia pressupõe que você já conhece os conceitos básicos do Service Connector.
Quais operações o Service Connector faz no cluster
Dependendo dos diferentes serviços de destino e tipos de autenticação selecionados ao criar uma conexão de serviço, o Service Connector faz operações diferentes no cluster do AKS. Listaremos as possíveis operações feitas pelo Service Connector.
Adicionar a extensão kubernetes as Service Connector
Uma extensão kubernetes nomeada sc-extension
é adicionada ao cluster na primeira vez que uma conexão de serviço é criada. Posteriormente, a extensão ajuda a criar recursos do kubernetes no cluster do usuário, sempre que uma solicitação de conexão de serviço chega ao Service Connector. Você pode encontrar a extensão no seu cluster do AKS no portal do Azure, no menu Extensões + aplicativos.
A extensão também é onde os metadados de conexões de cluster são armazenados. Desinstalar a extensão torna todas as conexões no cluster indisponíveis. O operador de extensão é hospedado no namespace sc-system
do cluster.
Criar recursos do kubernetes
O Service Connector cria alguns recursos do kubernetes para o namespace especificado pelo usuário ao criar uma conexão de serviço. Os recursos do kubernetes armazenam as informações de conexão, que são necessárias pelas definições de carga de trabalho do usuário ou pelo código do aplicativo para conversar com os serviços de destino. Dependendo de diferentes tipos de autenticação, recursos diferentes do kubernetes são criados. Para os tipos de autenticaçãoConnection String
e Service Principal
, um segredo do kubernetes é criado. Para o tipo de autenticação Workload Identity
, uma conta de serviço do kubernetes também é criada além de um segredo do kubernetes.
Você pode encontrar os recursos do kubernetes criados pelo Service Connector para cada conexão de serviço no portal do Azure no recurso kubernetes, no menu do Service Connector.
Excluir uma conexão de serviço não exclui o recurso do Kubernetes associado. Se necessário, remova seu recurso manualmente, usando, por exemplo, o comando kubectl delete.
Habilitar o complemento azureKeyvaultSecretsProvider
Se o serviço de destino for o Azure Key Vault e o Driver CSI do Repositório Secreto estiver habilitado ao criar uma conexão de serviço, o Service Connector habilitará o complemento azureKeyvaultSecretsProvider
para o cluster.
Siga o tutorial Conectar-se ao Azure Key Vault usando o driver CSI para configurar uma conexão com o Azure Key Vault usando o driver CSI do Repositório Secreto.
Habilitar a identidade da carga de trabalho e o emissor do OpenID Connect (OIDC)
Se o tipo de autenticação for Workload Identity
ao criar uma conexão de serviço, o Service Connector habilitará a identidade da carga de trabalho e o emissor do OIDC para o cluster.
Quando o tipo de autenticação é Workload Identity
, uma identidade gerenciada atribuída pelo usuário é necessária para criar a credencial de identidade federada. Saiba mais sobre o que são identidades de carga de trabalho ou siga o tutorial para configurar uma conexão com o Armazenamento do Microsoft Azure usando a identidade da carga de trabalho.
Como usar os recursos do kubernetes criados pelo Service Connector
Recursos diferentes do kubernetes são criados quando o tipo de serviço de destino e o tipo de autenticação são diferentes. As seções a seguir mostram como usar os recursos do kubernetes criados pelo Service Connector em sua definição de cargas de trabalho de cluster e códigos de aplicativo.
Segredo do Kubernetes
Um segredo do kubernetes é criado quando o tipo de autenticação é Connection String
ou Service Principal
. A definição da carga de trabalho do cluster pode referenciar o segredo diretamente. O snippet a seguir é um exemplo.
apiVersion: batch/v1
kind: Job
metadata:
namespace: default
name: sc-sample-job
spec:
template:
spec:
containers:
- name: raw-linux
image: alpine
command: ['printenv']
envFrom:
- secretRef:
name: <SecretCreatedByServiceConnector>
restartPolicy: OnFailure
Em seguida, os códigos do aplicativo podem consumir a cadeia de conexão no segredo da variável de ambiente. Você pode verificar o código de exemplo para saber mais sobre os nomes das variáveis de ambiente e como usá-los em seus códigos de aplicativo para autenticar em diferentes serviços de destino.
Conta de Serviço do Kubernetes
Uma conta de serviço do kubernetes e um segredo são criados quando o tipo de autenticação é Workload Identity
. A definição da carga de trabalho do cluster pode referenciar a conta de serviço e o segredo para autenticar por meio da identidade da carga de trabalho. O snippet a seguir fornece um exemplo.
apiVersion: batch/v1
kind: Job
metadata:
namespace: default
name: sc-sample-job
labels:
azure.workload.identity/use: "true"
spec:
template:
spec:
serviceAccountName: <ServiceAccountCreatedByServiceConnector>
containers:
- name: raw-linux
image: alpine
command: ['printenv']
envFrom:
- secretRef:
name: <SecretCreatedByServiceConnector>
restartPolicy: OnFailure
Você pode verificar o tutorial para saber como se conectar ao Armazenamento do Microsoft Azure usando a identidade da carga de trabalho.
Como solucionar problemas e exibir logs
Se ocorrer um erro e não puder ser atenuado ao tentar novamente ao criar uma conexão de serviço, os métodos a seguir poderão ajudar a coletar mais informações para solução de problemas.
Verificar a extensão do kubernetes do Service Connector
A extensão de kubernetes do Service Connector é criada com base nas extensões de cluster do Kubernetes habilitadas para Azure Arc. Use os comandos a seguir para investigar se há erros durante a instalação ou atualização da extensão.
- Instale a extensão
k8s-extension
da CLI do Azure.
az extension add --name k8s-extension
- Obtenha o status da extensão do Service Connector. Verifique a propriedade
statuses
na saída do comando para ver se há erros.
az k8s-extension show \
--resource-group MyClusterResourceGroup \
--cluster-name MyCluster \
--cluster-type managedClusters \
--name sc-extension
Verificar logs de cluster do kubernetes
Se houver um erro durante a instalação da extensão e a mensagem de erro na propriedade statuses
não fornecer informações suficientes sobre o que aconteceu, você poderá verificar ainda mais os logs do kubernetes com as etapas a seguir.
Conectar-se ao cluster do AKS.
az aks get-credentials \ --resource-group MyClusterResourceGroup \ --name MyCluster
A extensão do Service Connector é instalada no namespace
sc-system
por meio do gráfico helm, verifique o namespace e a versão do helm seguindo comandos.- Verifique se o namespace existe.
kubectl get ns
- Verifique o status da versão do helm.
helm list -n sc-system
Durante a instalação ou atualização da extensão, um trabalho do kubernetes chamado
sc-job
cria os recursos do kubernetes para a conexão de serviço. A falha de execução do trabalho geralmente causa a falha de extensão. Verifique o status do trabalho executando os comandos a seguir. Sesc-job
não existir no namespacesc-system
, ele deverá ter sido executado com êxito. Esse trabalho foi projetado para ser excluído automaticamente após a execução bem-sucedida.- Verifique se o trabalho existe.
kubectl get job -n sc-system
- Obtenha o status do trabalho.
kubectl describe job/sc-job -n sc-system
- Exiba os logs de trabalho.
kubectl logs job/sc-job -n sc-system
Erros e mitigações comuns
Conflito
Mensagem de erro: Operation returned an invalid status code: Conflict
.
Motivo: esse erro geralmente ocorre ao tentar criar uma conexão de serviço enquanto o cluster do AKS (Serviço de Kubernetes do Azure) está em um estado de atualização. A atualização de conexão de serviço entra em conflito com a atualização em andamento. Isso também pode acontecer quando sua assinatura não for registrada para o provedor de recursos Microsoft.KubernetesConfiguration
.
Atenuação:
Execute o comando a seguir para verificar se sua assinatura está registrada para o provedor de recursos
Microsoft.KubernetesConfiguration
.az provider register -n Microsoft.KubernetesConfiguration
Verifique se o cluster está em um estado "Bem-sucedido" e tente novamente a criação.
Timeout
Mensagem de erro:
Long running operation failed with status 'Failed'. Unable to get a response from the Agent in time
.Timed out waiting for the resource to come to a ready/completed state
Motivo: esse erro geralmente ocorre quando o trabalho do Kubernetes usado para criar ou atualizar a extensão de cluster do Service Connector não é agendado devido a limitações de recursos ou outros problemas.
Mitigação: consulte Verificar logs de cluster do Kubernetes para identificar e resolver os motivos detalhados. Um problema comum é que nenhum nó está disponível devido à preempção. Nesse caso, considere adicionar mais nós ou habilitar o dimensionamento automático para seus nós.
Acesso a recursos não autorizados
Mensagem de erro: You do not have permission to perform ... If access was recently granted, please refresh your credentials
.
Motivo: o Service Connector requer permissões para operar os recursos do Azure aos quais você deseja se conectar, a fim de executar operações de conexão em seu nome. Esse erro indica a falta de permissões necessárias em alguns recursos do Azure.
Mitigação: verifique as permissões nos recursos do Azure especificados na mensagem de erro. Obtenha as permissões necessárias e repita a criação.
Registro de assinatura ausente
Mensagem de erro:The subscription is not registered to use namespace 'Microsoft.KubernetesConfiguration'
Motivo: o conector de serviço exige que a assinatura seja registrada para Microsoft.KubernetesConfiguration
, que é o provedor de recursos para Extensões de cluster do Kubernetes habilitado para Azure Arc.
Mitigação: registre o provedor de recursos Microsoft.KubernetesConfiguration
executando o comando a seguir. Para obter mais informações sobre erros de registro do provedor de recursos, consulte este tutorial.
az provider register -n Microsoft.KubernetesConfiguration
Outros problemas
Se as mitigações acima não resolverem o problema, tente redefinir a extensão do cluster do conector de serviço removendo-a e repetindo a criação. Espera-se que esse método resolva a maioria dos problemas relacionados à extensão de cluster do Conector do Serviço.
Use os seguintes comandos da CLI para redefinir a extensão:
az extension add --name k8s-extension
az k8s-extension delete \
--resource-group <MyClusterResourceGroup> \
--cluster-name <MyCluster> \
--cluster-type managedClusters \
--name sc-extension
Próximas etapas
Saiba como integrar diferentes serviços de destino e ler sobre suas configurações e métodos de autenticação.