Bagikan melalui


Menyebarkan SQL Managed Instance terintegrasi Direktori Aktif yang diaktifkan oleh Azure Arc

Dalam artikel ini, pelajari cara menyebarkan Azure SQL Managed Instance dengan dukungan Azure Arc dengan autentikasi Direktori Aktif.

Prasyarat

Sebelum memulai penyebaran SQL Managed Instance, pastikan Anda memiliki prasyarat ini:

  • Domain Direktori Aktif
  • Pengontrol data Azure Arc yang disebarkan
  • Konektor Active Directory yang disebarkan dengan keytab yang dikelola pelanggan atau keytab yang dikelola sistem

persyaratan Koneksi or

Konektor Active Directory keytab yang dikelola pelanggan dan konektor Active Directory keytab yang dikelola sistem adalah mode penyebaran yang berbeda yang memiliki persyaratan dan langkah yang berbeda. Setiap mode memiliki persyaratan khusus selama penyebaran. Pilih tab untuk konektor yang Anda gunakan.

Untuk penyebaran keytab yang dikelola pelanggan Active Directory, Anda harus menyediakan:

  • Akun pengguna Direktori Aktif untuk SQL
  • Nama perwakilan layanan (SPN) di bawah akun pengguna
  • Catatan DNS A (teruskan) untuk titik akhir utama SQL (dan secara opsional, titik akhir sekunder)

Bersiap untuk penyebaran

Bergantung pada mode penyebaran Anda, selesaikan langkah-langkah berikut untuk mempersiapkan penyebaran SQL Managed Instance.

Untuk mempersiapkan penyebaran dalam mode keytab yang dikelola pelanggan:

  1. Identifikasi nama DNS untuk titik akhir SQL: Pilih nama DNS unik untuk titik akhir SQL yang akan disambungkan klien dari luar kluster Kubernetes.

    • Nama DNS harus berada di domain Direktori Aktif atau di domain turunannya.
    • Contoh dalam artikel ini digunakan sqlmi-primary.contoso.local untuk nama DNS utama dan sqlmi-secondary.contoso.local untuk nama DNS sekunder.
  2. Identifikasi nomor port untuk titik akhir SQL: Masukkan nomor port untuk setiap titik akhir SQL.

    • Nomor port harus berada dalam rentang nomor port yang dapat diterima untuk kluster Kubernetes Anda.
    • Contoh dalam artikel ini digunakan 31433 untuk nomor port utama dan 31434 untuk nomor port sekunder.
  3. Membuat akun Direktori Aktif untuk instans terkelola: Pilih nama untuk akun Direktori Aktif untuk mewakili instans terkelola Anda.

    • Nama harus unik di domain Direktori Aktif.
    • Contoh dalam artikel ini digunakan sqlmi-account untuk nama akun Direktori Aktif.

    Untuk membuat akun:

    1. Pada pengontrol domain, buka alat Pengguna dan Komputer Direktori Aktif. Buat akun untuk mewakili instans terkelola.
    2. Masukkan kata sandi akun yang mematuhi kebijakan kata sandi domain Direktori Aktif. Anda akan menggunakan kata sandi ini di beberapa langkah di bagian berikutnya.
    3. Pastikan akun diaktifkan. Akun tidak memerlukan izin khusus.
  4. Buat catatan DNS untuk titik akhir SQL di server DNS Direktori Aktif: Di salah satu server DNS Direktori Aktif, buat catatan A (teruskan catatan pencarian) untuk nama DNS yang Anda pilih di langkah 1.

    • Rekaman DNS harus menunjuk ke alamat IP yang akan didengarkan titik akhir SQL untuk koneksi dari luar kluster Kubernetes.
    • Anda tidak perlu membuat rekaman Reverse-lookup Pointer (PTR) yang terkait dengan rekaman A.
  5. Buat SPN: Agar SQL dapat menerima autentikasi Direktori Aktif terhadap titik akhir SQL, Anda harus mendaftarkan dua SPN di akun yang Anda buat di langkah sebelumnya. Dua SPN harus didaftarkan untuk titik akhir utama. Jika Anda ingin autentikasi Direktori Aktif untuk titik akhir sekunder, SPN juga harus didaftarkan untuk titik akhir sekunder.

    Untuk membuat dan mendaftarkan SPN:

    1. Gunakan format berikut untuk membuat SPN:

      MSSQLSvc/<DNS name>
      MSSQLSvc/<DNS name>:<port>
      
    2. Pada salah satu pengontrol domain, jalankan perintah berikut untuk mendaftarkan SPN:

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

      Perintah Anda mungkin terlihat seperti contoh berikut:

      setspn -S MSSQLSvc/sqlmi-primary.contoso.local sqlmi-account
      setspn -S MSSQLSvc/sqlmi-primary.contoso.local:31433 sqlmi-account
      
    3. Jika Anda ingin autentikasi Direktori Aktif pada titik akhir sekunder, jalankan perintah yang sama untuk menambahkan SPN untuk titik akhir sekunder:

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

      Perintah Anda mungkin terlihat seperti contoh berikut:

      setspn -S MSSQLSvc/sqlmi-secondary.contoso.local sqlmi-account
      setspn -S MSSQLSvc/sqlmi-secondary.contoso.local:31434 sqlmi-account
      
  6. Buat file keytab yang memiliki entri untuk akun dan SPN: Agar SQL dapat mengautentikasi dirinya ke Direktori Aktif dan menerima autentikasi dari pengguna Direktori Aktif, berikan file keytab dengan menggunakan rahasia Kubernetes.

    • File keytab berisi entri terenkripsi untuk akun Direktori Aktif yang dihasilkan untuk instans terkelola dan SPN.

    • SQL Server menggunakan file ini sebagai kredensialnya terhadap Direktori Aktif.

    • Anda dapat memilih dari beberapa alat untuk menghasilkan file keytab:

      • adutil: Tersedia untuk Linux (lihat Pengantar adutil)
      • ktutil: Tersedia di Linux
      • ktpass: Tersedia di Windows
      • Skrip kustom

    Untuk menghasilkan file keytab khusus untuk instans terkelola:

    1. Gunakan salah satu skrip kustom ini:

      Skrip menerima beberapa parameter dan menghasilkan file keytab dan file spesifikasi YAML untuk rahasia Kubernetes yang berisi keytab.

    2. Dalam skrip Anda, ganti nilai parameter dengan nilai untuk penyebaran instans terkelola Anda.

      Untuk parameter input, gunakan nilai berikut:

      • --realm: Domain Direktori Aktif dalam huruf besar. Contoh: CONTOSO.LOCAL
      • --account: Akun Direktori Aktif tempat SPN terdaftar. Contoh: sqlmi-account
      • --port: Nomor port titik akhir SQL utama. Contoh: 31433
      • --dns-name: Nama DNS untuk titik akhir SQL utama.
      • --keytab-file: Jalur ke file keytab.
      • --secret-name: Nama rahasia keytab untuk menghasilkan spesifikasi.
      • --secret-namespace: Namespace Layanan Kubernetes yang berisi rahasia keytab.
      • --secondary-port: Nomor port titik akhir SQL sekunder (opsional). Contoh: 31434
      • --secondary-dns-name: Nama DNS untuk titik akhir SQL sekunder (opsional).

      Pilih nama untuk rahasia Kubernetes yang menghosting keytab. Gunakan namespace tempat instans terkelola disebarkan.

    3. Jalankan perintah berikut untuk membuat keytab:

      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>
      

      Perintah Anda mungkin terlihat seperti contoh berikut:

      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. Jalankan perintah berikut untuk memverifikasi bahwa keytab sudah benar:

      klist -kte <keytab file>
      
  7. Sebarkan rahasia Kubernetes untuk keytab: Gunakan file spesifikasi rahasia Kubernetes yang Anda buat di langkah sebelumnya untuk menyebarkan rahasia.

    File spesifikasi terlihat mirip dengan contoh ini:

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

    Untuk menyebarkan rahasia Kubernetes, jalankan perintah ini:

    kubectl apply -f <file>
    

    Perintah Anda mungkin terlihat seperti contoh ini:

    kubectl apply -f sqlmi-keytab-secret.yaml
    

Mengatur properti untuk autentikasi Direktori Aktif

Untuk menyebarkan SQL Managed Instance yang diaktifkan oleh Azure Arc untuk autentikasi Azure Arc Active Directory, perbarui file spesifikasi penyebaran Anda untuk mereferensikan instans konektor Direktori Aktif yang akan digunakan. Mereferensikan konektor Direktori Aktif dalam file spesifikasi SQL secara otomatis menyiapkan SQL untuk autentikasi Direktori Aktif.

Untuk mendukung autentikasi Direktori Aktif pada SQL dalam mode keytab yang dikelola pelanggan, atur properti berikut dalam file spesifikasi penyebaran Anda. Beberapa properti diperlukan dan beberapa bersifat opsional.

Wajib

  • spec.security.activeDirectory.connector.name: Nama sumber daya kustom konektor Active Directory yang sudah ada sebelumnya untuk bergabung untuk autentikasi Direktori Aktif. Jika Anda memasukkan nilai untuk properti ini, autentikasi Direktori Aktif diimplementasikan.
  • spec.security.activeDirectory.accountName: Nama akun Direktori Aktif untuk instans terkelola.
  • spec.security.activeDirectory.keytabSecret: Nama rahasia Kubernetes yang menghosting file keytab yang telah dibuat sebelumnya untuk pengguna. Rahasia ini harus berada di namespace yang sama dengan instans terkelola. Parameter ini hanya diperlukan untuk penyebaran Direktori Aktif dalam mode keytab yang dikelola pelanggan.
  • spec.services.primary.dnsName: Masukkan nama DNS untuk titik akhir SQL utama.
  • spec.services.primary.port: Masukkan nomor port untuk titik akhir SQL utama.

Opsional

  • spec.security.activeDirectory.connector.namespace: Namespace Layanan Kubernetes dari konektor Active Directory yang sudah ada sebelumnya untuk bergabung untuk autentikasi Direktori Aktif. Jika Anda tidak memasukkan nilai, namespace layanan SQL akan digunakan.
  • spec.services.readableSecondaries.dnsName: Masukkan nama DNS untuk titik akhir SQL sekunder.
  • spec.services.readableSecondaries.port: Masukkan nomor port untuk titik akhir SQL sekunder.

Menyiapkan file spesifikasi penyebaran Anda

Selanjutnya, siapkan file spesifikasi YAML untuk menyebarkan SQL Managed Instance. Untuk mode yang Anda gunakan, masukkan nilai penyebaran Anda dalam file spesifikasi.

Catatan

Dalam file spesifikasi untuk kedua mode, admin-login-secret nilai dalam contoh YAML menyediakan autentikasi dasar. Anda dapat menggunakan nilai parameter untuk masuk ke instans terkelola, lalu membuat login untuk pengguna dan grup Direktori Aktif. Untuk informasi selengkapnya, lihat Koneksi ke SQL Managed Instance terintegrasi Direktori Aktif yang diaktifkan oleh Azure Arc.

Contoh berikut menunjukkan file spesifikasi untuk mode keytab yang dikelola pelanggan:

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

Menyebarkan instans terkelola

Untuk mode keytab yang dikelola pelanggan dan mode keytab yang dikelola sistem, sebarkan instans terkelola dengan menggunakan file YAML spesifikasi yang disiapkan:

  1. Simpan file. Contoh di langkah berikutnya menggunakan sqlmi.yaml untuk nama file spesifikasi, tetapi Anda dapat memilih nama file apa pun.

  2. Jalankan perintah berikut untuk menyebarkan instans dengan menggunakan spesifikasi:

    kubectl apply -f <specification file name>
    

    Perintah Anda mungkin terlihat seperti contoh berikut:

    kubectl apply -f sqlmi.yaml