Dela via


Distribuera Active Directory-integrerad SQL Managed Instance aktiverad av Azure Arc

I den här artikeln lär du dig hur du distribuerar Azure Arc-aktiverad Azure SQL Managed Instance med Active Directory-autentisering.

Förutsättningar

Innan du påbörjar distributionen av SQL Managed Instance kontrollerar du att du har följande förutsättningar:

Anslut eller krav

Den kundhanterade nyckelfliken Active Directory-anslutningsappen och den systemhanterade nyckelfliken Active Directory-anslutningsappen är olika distributionslägen som har olika krav och steg. Varje läge har specifika krav under distributionen. Välj fliken för den anslutningsapp som du använder.

För en distribution av en kundhanterad nyckelflik i Active Directory måste du ange:

  • Ett Active Directory-användarkonto för SQL
  • Tjänstens huvudnamn (SPN) under användarkontot
  • DNS A-post (vidarebefordra) för den primära slutpunkten för SQL (och eventuellt en sekundär slutpunkt)

Förbereda för distribution

Beroende på distributionsläget utför du följande steg för att förbereda distributionen av SQL Managed Instance.

Så här förbereder du distributionen i kundhanterat nyckelfliksläge:

  1. Identifiera ett DNS-namn för SQL-slutpunkterna: Välj unika DNS-namn för DE SQL-slutpunkter som klienterna ska ansluta till utanför Kubernetes-klustret.

    • DNS-namnen ska finnas i Active Directory-domänen eller i dess underordnade domäner.
    • Exemplen i den här artikeln används sqlmi-primary.contoso.local för det primära DNS-namnet och sqlmi-secondary.contoso.local för det sekundära DNS-namnet.
  2. Identifiera portnumren för SQL-slutpunkterna: Ange ett portnummer för var och en av SQL-slutpunkterna.

    • Portnumren måste vara i det acceptabla intervallet med portnummer för ditt Kubernetes-kluster.
    • Exemplen i den här artikeln används 31433 för det primära portnumret och 31434 för det sekundära portnumret.
  3. Skapa ett Active Directory-konto för den hanterade instansen: Välj ett namn för Active Directory-kontot som ska representera din hanterade instans.

    • Namnet måste vara unikt i Active Directory-domänen.
    • Exemplen i den här artikeln används sqlmi-account för Active Directory-kontonamnet.

    Så här skapar du kontot:

    1. Öppna verktyget Active Directory - användare och datorer på domänkontrollanten. Skapa ett konto som representerar den hanterade instansen.
    2. Ange ett kontolösenord som uppfyller active directory-domänens lösenordsprincip. Du använder det här lösenordet i några av stegen i nästa avsnitt.
    3. Kontrollera att kontot är aktiverat. Kontot behöver inga särskilda behörigheter.
  4. Skapa DNS-poster för SQL-slutpunkterna i Active Directory DNS-servrarna: I en av Active Directory DNS-servrarna skapar du A-poster (vidarebefordra uppslagsposter) för det DNS-namn som du valde i steg 1.

    • DNS-posterna ska peka på DEN IP-adress som SQL-slutpunkten lyssnar efter anslutningar utanför Kubernetes-klustret.
    • Du behöver inte skapa PTR-poster (reverse-lookup Pointer) i samband med A-posterna.
  5. Skapa SPN:er: För att SQL ska kunna acceptera Active Directory-autentisering mot SQL-slutpunkterna måste du registrera två SPN i det konto som du skapade i föregående steg. Två SPN måste registreras för den primära slutpunkten. Om du vill ha Active Directory-autentisering för den sekundära slutpunkten måste SPN:erna också registreras för den sekundära slutpunkten.

    Så här skapar och registrerar du SPN:er:

    1. Använd följande format för att skapa SPN:erna:

      MSSQLSvc/<DNS name>
      MSSQLSvc/<DNS name>:<port>
      
    2. På en av domänkontrollanterna kör du följande kommandon för att registrera SPN:erna:

      setspn -S MSSQLSvc/<DNS name> <account>
      setspn -S MSSQLSvc/<DNS name>:<port> <account>
      

      Dina kommandon kan se ut som i följande exempel:

      setspn -S MSSQLSvc/sqlmi-primary.contoso.local sqlmi-account
      setspn -S MSSQLSvc/sqlmi-primary.contoso.local:31433 sqlmi-account
      
    3. Om du vill ha Active Directory-autentisering på den sekundära slutpunkten kör du samma kommandon för att lägga till SPN för den sekundära slutpunkten:

      setspn -S MSSQLSvc/<DNS name> <account>
      setspn -S MSSQLSvc/<DNS name>:<port> <account>
      

      Dina kommandon kan se ut som i följande exempel:

      setspn -S MSSQLSvc/sqlmi-secondary.contoso.local sqlmi-account
      setspn -S MSSQLSvc/sqlmi-secondary.contoso.local:31434 sqlmi-account
      
  6. Generera en nyckelfliksfil som har poster för kontot och SPN: För att SQL ska kunna autentisera sig till Active Directory och acceptera autentisering från Active Directory-användare anger du en nyckelfliksfil med hjälp av en Kubernetes-hemlighet.

    • Nyckelfliksfilen innehåller krypterade poster för Det Active Directory-konto som genereras för den hanterade instansen och SPN:erna.

    • SQL Server använder den här filen som autentiseringsuppgifter mot Active Directory.

    • Du kan välja mellan flera verktyg för att generera en nyckelfliksfil:

      • adutil: Tillgängligt för Linux (se Introduktion till adutil)
      • ktutil: Tillgängligt i Linux
      • ktpass: Tillgängligt i Windows
      • Anpassade skript

    Så här genererar du nyckelfliksfilen specifikt för den hanterade instansen:

    1. Använd något av följande anpassade skript:

      Skripten accepterar flera parametrar och genererar en nyckelfliksfil och en YAML-specifikationsfil för Kubernetes-hemligheten som innehåller nyckelfliken.

    2. I skriptet ersätter du parametervärdena med värden för distributionen av den hanterade instansen.

      Använd följande värden för indataparametrarna:

      • --realm: Active Directory-domänen i versaler. Exempel: CONTOSO.LOCAL
      • --account: Det Active Directory-konto där SPN:erna är registrerade. Exempel: sqlmi-account
      • --port: Det primära SQL-slutpunktsportnumret. Exempel: 31433
      • --dns-name: DNS-namnet för den primära SQL-slutpunkten.
      • --keytab-file: Sökvägen till nyckelfliksfilen.
      • --secret-name: Namnet på nyckelflikshemligheten som ska generera en specifikation för.
      • --secret-namespace: Kubernetes-namnområdet som innehåller nyckelflikshemligheten.
      • --secondary-port: Det sekundära SQL-slutpunktsportnumret (valfritt). Exempel: 31434
      • --secondary-dns-name: DNS-namnet för den sekundära SQL-slutpunkten (valfritt).

      Välj ett namn för Kubernetes-hemligheten som är värd för nyckelfliken. Använd namnområdet där den hanterade instansen distribueras.

    3. Kör följande kommando för att skapa en nyckelflik:

      AD_PASSWORD=<password> ./create-sql-keytab.sh --realm <Active Directory domain in uppercase> --account <Active Directory account name> --port <endpoint port> --dns-name <endpoint DNS name> --keytab-file <keytab file name/path> --secret-name <keytab secret name> --secret-namespace <keytab secret namespace>
      

      Kommandot kan se ut som i följande exempel:

      AD_PASSWORD=<password> ./create-sql-keytab.sh --realm CONTOSO.LOCAL --account sqlmi-account --port 31433 --dns-name sqlmi.contoso.local --keytab-file sqlmi.keytab --secret-name sqlmi-keytab-secret --secret-namespace sqlmi-ns
      
    4. Kör följande kommando för att kontrollera att nyckelfliken är korrekt:

      klist -kte <keytab file>
      
  7. Distribuera Kubernetes-hemligheten för nyckelfliken: Använd den Hemliga Kubernetes-specifikationsfilen som du skapar i föregående steg för att distribuera hemligheten.

    Specifikationsfilen ser ut ungefär som i det här exemplet:

    apiVersion: v1
    kind: Secret
    type: Opaque
    metadata:
      name: <secret name>
      namespace: <secret namespace>
    data:
      keytab: <keytab content in Base64>
    

    Kör det här kommandot för att distribuera Kubernetes-hemligheten:

    kubectl apply -f <file>
    

    Kommandot kan se ut så här:

    kubectl apply -f sqlmi-keytab-secret.yaml
    

Ange egenskaper för Active Directory-autentisering

Om du vill distribuera SQL Managed Instance som aktiveras av Azure Arc för Azure Arc Active Directory-autentisering uppdaterar du distributionsspecifikationsfilen så att den refererar till den Active Directory-anslutningsinstans som ska användas. Om du refererar till Active Directory-anslutningsappen i SQL-specifikationsfilen konfigureras automatiskt SQL för Active Directory-autentisering.

Om du vill ha stöd för Active Directory-autentisering i SQL i kundhanterat nyckelfliksläge anger du följande egenskaper i distributionsspecifikationsfilen. Vissa egenskaper krävs och vissa är valfria.

Obligatoriskt

  • spec.security.activeDirectory.connector.name: Namnet på den befintliga anpassade Active Directory-anslutningsresursen som ska anslutas för Active Directory-autentisering. Om du anger ett värde för den här egenskapen implementeras Active Directory-autentisering.
  • spec.security.activeDirectory.accountName: Namnet på Active Directory-kontot för den hanterade instansen.
  • spec.security.activeDirectory.keytabSecret: Namnet på Den Kubernetes-hemlighet som är värd för den i förväg skapade nyckelfliksfilen för användare. Den här hemligheten måste finnas i samma namnområde som den hanterade instansen. Den här parametern krävs endast för Active Directory-distributionen i kundhanterat nyckelfliksläge.
  • spec.services.primary.dnsName: Ange ett DNS-namn för den primära SQL-slutpunkten.
  • spec.services.primary.port: Ange ett portnummer för den primära SQL-slutpunkten.

Valfritt

  • spec.security.activeDirectory.connector.namespace: Kubernetes-namnområdet för den befintliga Active Directory-anslutningsappen som ska anslutas för Active Directory-autentisering. Om du inte anger något värde används SQL-namnområdet.
  • spec.services.readableSecondaries.dnsName: Ange ett DNS-namn för den sekundära SQL-slutpunkten.
  • spec.services.readableSecondaries.port: Ange ett portnummer för den sekundära SQL-slutpunkten.

Förbereda distributionsspecifikationsfilen

Förbered sedan en YAML-specifikationsfil för att distribuera SQL Managed Instance. För det läge du använder anger du dina distributionsvärden i specifikationsfilen.

Kommentar

I specifikationsfilen för båda lägena admin-login-secret ger värdet i YAML-exemplet grundläggande autentisering. Du kan använda parametervärdet för att logga in på den hanterade instansen och sedan skapa inloggningar för Active Directory-användare och -grupper. Mer information finns i Anslut till Active Directory-integrerad SQL Managed Instance aktiverad av Azure Arc.

I följande exempel visas en specifikationsfil för kundhanterat nyckelfliksläge:

apiVersion: v1
data:
  password: <your Base64-encoded password>
  username: <your Base64-encoded username>
kind: Secret
metadata:
  name: admin-login-secret
type: Opaque
---
apiVersion: sql.arcdata.microsoft.com/v3
kind: SqlManagedInstance
metadata:
  name: <name>
  namespace: <namespace>
spec:
  backup:
    retentionPeriodInDays: 7
  dev: false
  tier: GeneralPurpose
  forceHA: "true"
  licenseType: LicenseIncluded
  replicas: 1
  security:
    adminLoginSecret: admin-login-secret
    activeDirectory:
      connector:
        name: <Active Directory connector name>
        namespace: <Active Directory connector namespace>
      accountName: <Active Directory account name>
      keytabSecret: <keytab secret name>
  services:
    primary:
      type: LoadBalancer
      dnsName: <primary endpoint DNS name>
      port: <primary endpoint port number>
    readableSecondaries:
      type: LoadBalancer
      dnsName: <secondary endpoint DNS name>
      port: <secondary endpoint port number>
  storage:
    data:
      volumes:
      - accessMode: ReadWriteOnce
        className: local-storage
        size: 5Gi
    logs:
      volumes:
      - accessMode: ReadWriteOnce
        className: local-storage
        size: 5Gi

Distribuera den hanterade instansen

För både kundhanterat nyckeltab-läge och systemhanterat nyckelfliksläge distribuerar du den hanterade instansen med den förberedda YAML-specifikationsfilen:

  1. Spara filen. I exemplet i nästa steg används sqlmi.yaml som specifikationsfilnamn, men du kan välja valfritt filnamn.

  2. Kör följande kommando för att distribuera instansen med hjälp av specifikationen:

    kubectl apply -f <specification file name>
    

    Kommandot kan se ut som i följande exempel:

    kubectl apply -f sqlmi.yaml