Come usare Connettore di servizi nel servizio Azure Kubernetes
Il servizio Azure Kubernetes è uno dei servizi di calcolo supportati da Connettore di servizi. Questo articolo si propone di aiutare a comprendere:
- Operazioni eseguite nel cluster durante la creazione di una connessione al servizio.
- Come usare le risorse kubernetes che Connettore di servizi crea.
- Come risolvere i problemi e visualizzare i log di Connettore di servizi in un cluster del servizio Azure Kubernetes.
Prerequisiti
- Questa guida presuppone che si conoscano già i concetti di base di Connettore di servizi.
Operazioni eseguite da Connettore di servizi nel cluster
A seconda dei diversi servizi di destinazione e dei tipi di autenticazione selezionati durante la creazione di una connessione al servizio, Connettore di servizi esegue operazioni diverse nel cluster del servizio Azure Kubernetes. Di seguito sono elencate le possibili operazioni eseguite da Connettore di servizi.
Aggiungere l'estensione kubernetes di Connettore di servizi
Un'estensione kubernetes denominata sc-extension
viene aggiunta al cluster la prima volta che viene creata una connessione al servizio. In un secondo momento, l'estensione consente di creare risorse kubernetes nel cluster dell'utente, ogni volta che viene inviata una richiesta di connessione del servizio a Connettore di servizi. È possibile trovare l'estensione nel cluster del servizio Azure Kubernetes nel portale di Azure, nel menu Estensioni e applicazioni.
L'estensione è anche la posizione in cui vengono archiviati i metadati delle connessioni del cluster. La disinstallazione dell'estensione rende non disponibili tutte le connessioni nel cluster. L'operatore di estensione è ospitato nello spazio dei nomi del cluster sc-system
.
Creare risorse kubernetes
Connettore di servizi crea alcune risorse kubernetes nello spazio dei nomi specificato dall'utente durante la creazione di una connessione al servizio. Le risorse kubernetes archiviano le informazioni di connessione necessarie per le definizioni del carico di lavoro o il codice dell'applicazione dell'utente per comunicare con i servizi di destinazione. A seconda dei diversi tipi di autenticazione, vengono create risorse kubernetes diverse. Per i tipi di autenticazione Connection String
e Service Principal
, viene creato un segreto kubernetes. Per il tipo di autenticazione Workload Identity
, viene creato anche un account del servizio kubernetes oltre a un segreto kubernetes.
È possibile trovare le risorse kubernetes create dal Connettore di servizi per ogni connessione al servizio nel portale di Azure nella risorsa kubernetes nel menu del Connettore di servizi.
L'eliminazione di una connessione al servizio non comporta l'eliminazione della risorsa Kubernetes associata. Se necessario, rimuovere manualmente la risorsa usando ad esempio il comando kubectl delete.
Abilitare il componente aggiuntivo azureKeyvaultSecretsProvider
Se il servizio di destinazione è Azure Key Vault e il driver CSI dell'archivio segreti è abilitato durante la creazione di una connessione al servizio, Connettore di servizi abilita il componente aggiuntivo azureKeyvaultSecretsProvider
per il cluster.
Seguire l'esercitazione Connettersi ad Azure Key Vault usando il driver CSI per configurare una connessione ad Azure Key Vault usando il driver CSI dell'archivio segreti.
Abilitare l'identità del carico di lavoro e l'autorità di certificazione OpenID Connect (OIDC)
Se il tipo di autenticazione è Workload Identity
durante la creazione di una connessione al servizio, Connettore di servizi abilita l'identità del carico di lavoro e l'autorità emittente OIDC per il cluster.
Quando il tipo di autenticazione è Workload Identity
, è necessaria un'identità gestita assegnata dall'utente per creare le credenziali dell'identità federata. Per altre informazioni, vedere che cosa sono le identità del carico di lavoro oppure seguire l'esercitazioneper configurare una connessione ad Archiviazione di Azure usando l'identità del carico di lavoro.
Come usare le risorse kubernetes create da Connettore di servizi
Le risorse kubernetes diverse vengono create quando il tipo di servizio di destinazione e il tipo di autenticazione sono diversi. Le sezioni seguenti illustrano come usare le risorse kubernetes create da Connettore di servizi nella definizione e nei codici dell'applicazione dei carichi di lavoro del cluster.
Segreto Kubernetes
Un segreto kubernetes viene creato quando il tipo di autenticazione è Connection String
o Service Principal
. La definizione del carico di lavoro del cluster può fare riferimento direttamente al segreto. Il frammento di codice seguente è un esempio.
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
I codici dell'applicazione possono quindi utilizzare la stringa di connessione nel segreto dalla variabile di ambiente. È possibile controllare il codice di esempio per altre informazioni sui nomi delle variabili di ambiente e su come usarli nei codici dell'applicazione per eseguire l'autenticazione a servizi di destinazione diversi.
Account del servizio Kubernetes
Sia un account del servizio kubernetes che un segreto vengono creati quando il tipo di autenticazione è Workload Identity
. La definizione del carico di lavoro del cluster può fare riferimento all'account del servizio e al segreto per l'autenticazione tramite l'identità del carico di lavoro. Il frammento di codice seguente fornisce un esempio.
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
È possibile controllare l'esercitazione per informazioni su come connettersi ad Archiviazione di Azure usando l'identità del carico di lavoro.
Come risolvere i problemi e visualizzare i log
Se si verifica un errore e non è stato possibile attenuare i tentativi durante la creazione di una connessione al servizio, i metodi seguenti consentono di raccogliere altre informazioni per la risoluzione dei problemi.
Controllare l'estensione kubernetes di Connettore di servizi
L'estensione kubernetes di Connettore di servizi si basa sulle estensioni del cluster Kubernetes abilitate per Azure Arc. Usare i comandi seguenti per verificare se sono presenti errori durante l'installazione o l'aggiornamento dell'estensione.
- Installare l'estensione dell'interfaccia della riga di comando di Azure
k8s-extension
.
az extension add --name k8s-extension
- Ottenere lo stato dell'estensione Connettore di servizi. Controllare la proprietà
statuses
nell'output del comando per verificare se sono presenti errori.
az k8s-extension show \
--resource-group MyClusterResourceGroup \
--cluster-name MyCluster \
--cluster-type managedClusters \
--name sc-extension
Controllare i log del cluster kubernetes
Se si verifica un errore durante l'installazione dell'estensione e il messaggio di errore nella proprietà statuses
non fornisce informazioni sufficienti su ciò che è successo, è possibile controllare ulteriormente i log di kubernetes seguendo questa procedura.
Connettersi al cluster del servizio Azure Kubernetes.
az aks get-credentials \ --resource-group MyClusterResourceGroup \ --name MyCluster
L'estensione Connettore di servizi viene installata nello spazio dei nomi
sc-system
tramite il grafico Helm, controllare lo spazio dei nomi e la versione helm seguendo i comandi seguenti.- Controllare l'esistenza dello spazio dei nomi.
kubectl get ns
- Controllare lo stato di rilascio helm.
helm list -n sc-system
Durante l'installazione o l'aggiornamento dell'estensione, un processo kubernetes denominato
sc-job
crea le risorse kubernetes per la connessione al servizio. L'errore di esecuzione del processo causa in genere l'errore dell'estensione. Controllare lo stato del processo eseguendo i comandi seguenti. Sesc-job
non esiste nello spazio dei nomisc-system
, dovrebbe essere stato eseguito correttamente. Questo processo è progettato per essere eliminato automaticamente dopo l'esecuzione corretta.- Controllare l'esistenza del processo.
kubectl get job -n sc-system
- Ottenere lo stato del processo.
kubectl describe job/sc-job -n sc-system
- Visualizzare i log del processo.
kubectl logs job/sc-job -n sc-system
Errori e mitigazioni comuni
Conflitto
Messaggio di errore:Operation returned an invalid status code: Conflict
.
Motivo: questo errore si verifica in genere quando si tenta di creare una connessione al servizio mentre il cluster del servizio Azure Kubernetes si trova in uno stato di aggiornamento. L'aggiornamento della connessione al servizio è in conflitto con l'aggiornamento in corso. Può verificarsi anche quando la sottoscrizione non è registrata per il Microsoft.KubernetesConfiguration
provider di risorse.
Prevenzione:
Usare il comando seguente per assicurarsi che la sottoscrizione sia registrata per il provider di risorse
Microsoft.KubernetesConfiguration
.az provider register -n Microsoft.KubernetesConfiguration
Assicurarsi che il cluster sia in uno stato "Succeeded" prima di ritentare la creazione.
Timeout
Messaggio di errore:
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: questo errore si verifica spesso quando il processo Kubernetes usato per creare o aggiornare l'estensione del cluster di Connettore di servizi non può essere pianificato a causa di limitazioni delle risorse o altri problemi.
Mitigazione: fare riferimento a Controllare i log del cluster Kubernetes per identificare e risolvere i motivi dettagliati. Un problema comune è che nessun nodo è disponibile a causa di una precedenza. In questo caso, prendere in considerazione l'aggiunta di altri nodi o l'abilitazione del ridimensionamento automatico per i nodi.
Accesso non autorizzato alle risorse
Messaggio di errore:You do not have permission to perform ... If access was recently granted, please refresh your credentials
.
Motivo: Connettore di servizi richiede le autorizzazioni per gestire le risorse di Azure a cui connettersi, per eseguire operazioni di connessione per conto dell'utente. Questo errore indica la mancanza di autorizzazioni necessarie per alcune risorse di Azure.
Mitigazione: controllare le autorizzazioni per le risorse di Azure specificate nel messaggio di errore. Ottenere le autorizzazioni necessarie e ripetere la creazione.
Registrazione della sottoscrizione mancante
Messaggio di erroreThe subscription is not registered to use namespace 'Microsoft.KubernetesConfiguration'
:
Motivo: Service Connector richiede la registrazione della sottoscrizione per Microsoft.KubernetesConfiguration
, ovvero il provider di risorse per estensioni cluster Kubernetes abilitate per Azure Arc.
Mitigazione: registrare il provider di risorse Microsoft.KubernetesConfiguration
usando il comando seguente. Per altre informazioni sugli errori di registrazione del provider di risorse, vedere questa esercitazione.
az provider register -n Microsoft.KubernetesConfiguration
Altri problemi
Se le mitigazioni precedenti non risolvono il problema, provare a reimpostare l'estensione del cluster del connettore di servizi rimuovendola e quindi ritentando la creazione. Questo metodo dovrebbe risolvere la maggior parte dei problemi relativi all'estensione cluster di Connettore di servizi.
Usare i comandi dell'interfaccia della riga di comando seguenti per reimpostare l'estensione:
az extension add --name k8s-extension
az k8s-extension delete \
--resource-group <MyClusterResourceGroup> \
--cluster-name <MyCluster> \
--cluster-type managedClusters \
--name sc-extension
Passaggi successivi
Informazioni su come integrare servizi di destinazione diversi e leggere le informazioni sulle impostazioni di configurazione e sui metodi di autenticazione.