Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Important
Le module complémentaire Clusters Big Data Microsoft SQL Server 2019 sera mis hors service. La prise en charge de la plateforme Clusters Big Data Microsoft SQL Server 2019 se terminera le 28 février 2025. Tous les utilisateurs existants de SQL Server 2019 avec Software Assurance seront entièrement pris en charge sur la plateforme, et le logiciel continuera à être maintenu par les mises à jour cumulatives SQL Server jusqu’à ce moment-là. Pour plus d’informations, consultez le billet de blog d’annonce et les Options Big Data sur la plateforme Microsoft SQL Server.
Sur un cluster Big Data SQL Server en mode Active Directory, une tentative de connexion peut échouer et la tentative de connexion retourne l’erreur suivante :
Login failed. The login is from an untrusted domain and cannot be used with Integrated authentication.
Cela peut se produire lorsque vous avez configuré des entrées DNS en tant que CNAME pointant vers un nom d’alias de proxy inverse qui distribue le trafic aux nœuds Kubernetes.
Origine
Lorsque les points de terminaison sont configurés avec des entrées DNS avec CNAME pointant vers un nom d’alias de proxy inverse qui distribue le trafic aux nœuds Kubernetes :
- Le processus d’authentification Kerberos recherche un nom de principal de service (SPN) qui correspond à l’entrée pour CNAME ; pas le nom de principal principal de service vrai inscrit par BDC dans Active Directory
- Échec de l’authentification
Confirmer la cause racine
Une fois l’authentification échoué, vérifiez le cache des tickets Kerberos.
Pour vérifier le cache des tickets, utilisez klist
la commande.
Recherchez un ticket avec un SPN correspondant au point de terminaison auquel vous avez essayé de vous connecter.
Le ticket attendu n'est pas disponible.
Dans cet exemple, un point de terminaison principal, bdc-sql
, l’enregistrement DNS est configuré en tant que CNAME pour un proxy inverse nommé ServerReverseProxy
Resolve-DnsName bdc-sql
La section suivante présente les résultats de la commande précédente.
Name Type TTL Section NameHost
---- ---- --- ------- --------
bdc-sql.mydomain.com CNAME 3600 Answer ReverseProxyServer.mydomain.com
Name : ReverseProxyServer.mydomain.com
QueryType : A
TTL : 3600
Section : Answer
IP4Address : 193.168.5.10
Remarque
La section suivante fait référence tshark
.
tshark
est un utilitaire de ligne de commande installé dans le cadre de l’utilitaire de suivi réseau Wireshark ).
Pour voir le SPN demandé à partir d’Active Directory, utilisez tshark
. La commande suivante limite la capture du suivi réseau aux communications du protocole Kerberos et n'affiche que les messages krb-error (30)
. Ces messages doivent contenir des messages de demande SPN ayant échoué.
tshark -Y "kerberos && kerberos.msg_type == 30" -T fields -e kerberos.error_code -e kerberos.SNameString
À partir d’un autre interpréteur de commandes, essayez de vous connecter au pod maître :
klist purge
sqlcmd -S bdc-sql.mydomain.com,31433 -E
Consultez l’exemple de sortie suivant.
klist purge
Current LogonId is 0:0xf6b58
Deleting all tickets:
Ticket(s) purged!
sqlcmd -S bdc-sql.mydomain.com,31433 -E
sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login failed. The login is from an untrusted domain and cannot be used with Integrated authentication.
Vérifiez la tshark
sortie.
Capturing on 'Ethernet 3'
25 krbtgt,RLAZURE.COM
7 MSSQLSvc,ReverseProxyServer.mydomain.com:31433
2 packets captured
Remarquez les demandes du client SPN MSSQLSvc,ReverseProxyServer.mydomain.com:31433
qui n'existe pas. La tentative de connexion échoue finalement avec l’erreur 7. Erreur 7 signifie KRB5KDC_ERR_S_PRINCIPAL_UNKNOWN Server not found in Kerberos database
.
Dans la configuration correcte, le client demande au SPN inscrit par BDC. Dans l’exemple, le spN correct aurait été MSSQLSvc,bdc-sql.mydomain.com:31433
.
Remarque
Erreur 25 signifie KDC_ERR_PREAUTH_REQUIRED
: pré-authentification supplémentaire requise. Elle peut être ignorée en toute sécurité.
KDC_ERR_PREAUTH_REQUIRED
est retourné sur la requête Kerberos AD initiale. Par défaut, le client Kerberos Windows n’inclut pas les informations de pré-authentification dans cette première requête.
Pour afficher la liste des SPN inscrits par BDC pour le point de terminaison maître, exécutez setspn -L mssql-master
.
Consultez l’exemple de sortie suivant :
Registered ServicePrincipalNames for CN=mssql-master,OU=bdc,DC=mydomain,DC=com:
MSSQLSvc/bdc-sqlread.mydomain.com:31436
MSSQLSvc/-sqlread:31436
MSSQLSvc/bdc-sqlread.mydomain.com
MSSQLSvc/bdc-sqlread
MSSQLSvc/bdc-sql.mydomain.com:31433
MSSQLSvc/bdc-sql:31433
MSSQLSvc/bdc-sql.mydomain.com
MSSQLSvc/bdc-sql
MSSQLSvc/master-p-svc.mydomain.com:1533
MSSQLSvc/master-p-svc:1533
MSSQLSvc/master-p-svc.mydomain.com:1433
MSSQLSvc/master-p-svc:1433
MSSQLSvc/master-p-svc.mydomain.com
MSSQLSvc/master-p-svc
MSSQLSvc/master-svc.mydomain.com:1533
MSSQLSvc/master-svc:1533
MSSQLSvc/master-svc.mydomain.com:1433
MSSQLSvc/master-svc:1433
MSSQLSvc/master-svc.mydomain.com
MSSQLSvc/master-svc
Dans les résultats ci-dessus, l’adresse du proxy inverse ne doit pas être inscrite.
Résoudre
Cette section montre deux façons de résoudre le problème. Après avoir apporté les modifications appropriées, exécutez ipconfig -flushdns
et klist purge
dans votre client. Ensuite, essayez de vous reconnecter.
Option 1 :
Supprimez l’enregistrement CNAME pour chaque point de terminaison BDC dans DNS et remplacez par plusieurs A
enregistrements qui pointent vers chaque nœud Kubernetes ou chaque maître Kubernetes si vous avez plusieurs maîtres.
Conseil / Astuce
Le script décrit ci-dessous utilise PowerShell. Pour plus d’informations, consultez Installation de PowerShell sur Linux .
Vous pouvez utiliser le script PowerShell suivant pour mettre à jour les enregistrements de points de terminaison DNS. Exécutez le script à partir de n’importe quel ordinateur connecté au même domaine :
#Specify the DNS server, example contoso.local
$Domain_DNS_name=mydomain.com'
#DNS records for bdc endpoints
$Controller_DNS_name = 'bdc-control'
$Managment_proxy_DNS_name= 'bdc-proxy'
$Master_Primary_DNS_name = 'bdc-sql'
$Master_Secondary_DNS_name = 'bdc-sqlread'
$Gateway_DNS_name = 'bdc-gateway'
$AppProxy_DNS_name = 'bdc-appproxy'
#Performing Endpoint DNS records Checks..
#Build array of endpoints
$BdcEndpointsDns = New-Object System.Collections.ArrayList
[void]$BdcEndpointsDns.Add($Controller_DNS_name)
[void]$BdcEndpointsDns.Add($Managment_proxy_DNS_name)
[void]$BdcEndpointsDns.Add($Master_Primary_DNS_name)
[void]$BdcEndpointsDns.Add($Master_Secondary_DNS_name)
[void]$BdcEndpointsDns.Add($Gateway_DNS_name)
[void]$BdcEndpointsDns.Add($AppProxy_DNS_name)
#Build array for results
$BdcEndpointsDns_Result = New-Object System.Collections.ArrayList
foreach ($DnsName in $BdcEndpointsDns) {
try {
$endpoint_DNS_record = Resolve-DnsName $DnsName -Type A -Server $Domain_DNS_IP_address -ErrorAction Stop
foreach ($ip in $endpoint_DNS_record.IPAddress) {
[void]$BdcEndpointsDns_Result.Add("OK - $DnsName is an A record with an IP $ip")
}
}
catch {
[void]$BdcEndpointsDns_Result.Add("MisConfiguration - $DnsName is not an A record or does not exists")
}
}
#show the results
$BdcEndpointsDns_Result
Option 2 :
Vous pouvez également contourner le problème en modifiant le CNAME pour qu’il pointe vers l’adresse IP du proxy inverse plutôt que le nom du proxy inverse.
Confirmer la résolution
Après avoir résolé le correctif avec l’une des options ci-dessus, confirmez le correctif en vous connectant au cluster Big Data avec Active Directory.
Étapes suivantes
Vérifiez l’entrée DNS inversée (enregistrement PTR) pour le contrôleur de domaine.