Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Importante
El complemento Clústeres de macrodatos de Microsoft SQL Server 2019 se va a retirar. La compatibilidad con Clústeres de macrodatos de SQL Server 2019 finalizará el 28 de febrero de 2025. Todos los usuarios existentes de SQL Server 2019 con Software Assurance serán totalmente compatibles con la plataforma, y el software se seguirá conservando a través de actualizaciones acumulativas de SQL Server hasta ese momento. Para más información, consulte la entrada de blog sobre el anuncio y Opciones de macrodatos en la plataforma Microsoft SQL Server.
En un clúster de macrodatos de SQL Server en modo de Active Directory, se puede producir un error en un intento de conexión y el intento de conexión devuelve el siguiente error:
Login failed. The login is from an untrusted domain and cannot be used with Integrated authentication.
Esto puede ocurrir cuando ha configurado entradas DNS como CNAME que apunta a un nombre de alias del proxy inverso que distribuye el tráfico a los nodos de Kubernetes.
Causa principal
Cuando los puntos de conexión están configurados con registros DNS que utilizan CNAME para apuntar a un nombre de alias de un proxy inverso que distribuye el tráfico a los nodos de Kubernetes:
- El proceso de autenticación Kerberos busca un nombre de entidad de seguridad de servicio (SPN) que coincida con la entrada de CNAME, y no con el verdadero SPN registrado por BDC en Active Directory.
- Error de autenticación
Confirmación de la causa principal
Después de que se produzca un error en la autenticación, compruebe la caché de vales kerberos.
Para comprobar la memoria caché de tickets, use el comando klist
.
Busque un ticket con un SPN que coincida con el punto de conexión al cual intentaste conectarte.
El billete esperado no está ahí.
En este ejemplo, un endpoint maestro, bdc-sql
, el registro DNS es un CNAME configurado a un proxy inverso denominado ServerReverseProxy
Resolve-DnsName bdc-sql
En la sección siguiente se muestran los resultados del comando anterior.
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
Nota:
En la sección siguiente se hace referencia a tshark
.
tshark
es una utilidad de línea de comandos instalada como parte de la utilidad de seguimiento de red wireshark ).
Para ver el SPN solicitado desde Active Directory, use tshark
. El siguiente comando limita la captura de seguimiento de red a la comunicación del protocolo Kerberos y muestra solo mensajes de krb-error (30)
. Estos mensajes deben contener mensajes de solicitud SPN fallida.
tshark -Y "kerberos && kerberos.msg_type == 30" -T fields -e kerberos.error_code -e kerberos.SNameString
Desde otro terminal de comandos, intente conectarse al pod maestro.
klist purge
sqlcmd -S bdc-sql.mydomain.com,31433 -E
Consulte la salida del ejemplo siguiente.
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.
Revise la tshark
salida.
Capturing on 'Ethernet 3'
25 krbtgt,RLAZURE.COM
7 MSSQLSvc,ReverseProxyServer.mydomain.com:31433
2 packets captured
Observe las solicitudes SPN MSSQLSvc,ReverseProxyServer.mydomain.com:31433
de cliente que no existen. El intento de conexión finalmente produce el error 7. El error 7 significa KRB5KDC_ERR_S_PRINCIPAL_UNKNOWN Server not found in Kerberos database
.
En la configuración correcta, el cliente solicita el SPN registrado por BDC. En el ejemplo, el SPN correcto habría sido MSSQLSvc,bdc-sql.mydomain.com:31433
.
Nota:
El error 25 significa KDC_ERR_PREAUTH_REQUIRED
: se requiere autenticación previa adicional. Se puede omitir de forma segura.
KDC_ERR_PREAUTH_REQUIRED
se devuelve en la solicitud de AD Kerberos inicial. De forma predeterminada, el cliente Kerberos de Windows no incluye información de autenticación previa en esta primera solicitud.
Para ver la lista de SPN registrados por BDC para el punto de conexión maestro, ejecute setspn -L mssql-master
.
Consulte la salida del ejemplo siguiente:
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
En los resultados anteriores la dirección de proxy inverso no debe registrarse.
Resolver
En esta sección se muestran dos maneras de resolver el problema. Después de realizar los cambios adecuados, ejecute ipconfig -flushdns
y klist purge
en el cliente. A continuación, intente conectarse de nuevo.
Opción 1
Quite el registro CNAME de cada punto de conexión de BDC en DNS y reemplácelo por varios registros A
que apunten a cada nodo de Kubernetes o a cada maestro de Kubernetes si tiene más de un maestro.
Sugerencia
El script descrito a continuación usa PowerShell. Consulte Instalación de PowerShell en Linux para obtener más información.
Puede usar el siguiente script de PowerShell para actualizar los registros de puntos de conexión DNS. Ejecute el script desde cualquier equipo conectado al mismo dominio:
#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
Opción 2
Como alternativa, es posible solucionar el problema modificando el CNAME para que apunte a la dirección IP del proxy inverso en lugar del nombre del proxy inverso.
Confirmar resolución
Después de resolar la corrección con una de las opciones anteriores, confirme la corrección mediante la conexión al clúster de macrodatos con Active Directory.
Pasos siguientes
Verifique la entrada de DNS inversa (registro PTR) para el controlador de dominio.