Поделиться через


Развертывание интегрированных Управляемый экземпляр SQL Active Directory с поддержкой Azure Arc

В этой статье описано, как развернуть Управляемый экземпляр SQL Azure с поддержкой Azure Arc с проверкой подлинности Active Directory.

Необходимые компоненты

Прежде чем начать развертывание Управляемый экземпляр SQL, убедитесь, что у вас есть следующие предварительные требования:

Требования к соединителю

Соединитель Active Directory, управляемый клиентом, и соединитель Keytab Active Directory, управляемый системой, являются различными режимами развертывания, имеющими разные требования и шаги. Каждый режим имеет определенные требования во время развертывания. Выберите вкладку для используемого соединителя.

Для развертывания ключей, управляемого клиентом Active Directory, необходимо указать следующее:

  • Учетная запись пользователя Active Directory для SQL
  • Имена субъектов-служб (SPN) под учетной записью пользователя
  • Запись DNS A (переадресация) для основной конечной точки SQL (при необходимости — вторичной конечной точки)

Подготовка к развертыванию

В зависимости от режима развертывания выполните следующие действия, чтобы подготовиться к развертыванию Управляемый экземпляр SQL.

Чтобы подготовиться к развертыванию в режиме keytab, управляемом клиентом, выполните приведенные действия.

  1. Определите DNS-имя конечных точек SQL: выберите уникальные DNS-имена для конечных точек SQL, к которым клиенты будут подключаться за пределами кластера Kubernetes.

    • DNS-имена должны находиться в домене Active Directory или в его потомков.
    • Примеры, приведенные в этой статье, используются sqlmi-primary.contoso.local для основного DNS-имени и sqlmi-secondary.contoso.local дополнительного DNS-имени.
  2. Определите номера портов для конечных точек SQL: введите номер порта для каждой конечной точки SQL.

    • Номера портов должны находиться в допустимом диапазоне номеров портов для кластера Kubernetes.
    • Примеры, приведенные в этой статье, используются 31433 для первичного номера порта и 31434 дополнительного номера порта.
  3. Создайте учетную запись Active Directory для управляемого экземпляра: выберите имя учетной записи Active Directory для представления управляемого экземпляра.

    • Имя должно быть уникальным в домене Active Directory.
    • Примеры, приведенные в этой статье, используются sqlmi-account для имени учетной записи Active Directory.

    Чтобы создать учетную запись, выполните следующие действия.

    1. На контроллере домена откройте средство Пользователи и компьютеры Active Directory. Создайте учетную запись для представления управляемого экземпляра.
    2. Введите пароль учетной записи, соответствующий политике пароля домена Active Directory. Этот пароль будет использоваться в некоторых шагах, описанных в следующих разделах.
    3. Убедитесь, что учетная запись включена. Для учетной записи не требуются специальные разрешения.
  4. Создайте записи DNS для конечных точек SQL на DNS-серверах Active Directory: на одном из DNS-серверов Active Directory создайте записи A (записи перенаправления) для DNS-имени, выбранного на шаге 1.

    • Записи DNS должны указывать на IP-адрес, который конечная точка SQL будет прослушивать для подключений за пределами кластера Kubernetes.
    • Вам не нужно создавать записи указателя обратного поиска (PTR) в связи с записями A.
  5. Создайте имена субъектов-служб: чтобы SQL мог принимать проверку подлинности Active Directory в конечных точках SQL, необходимо зарегистрировать два субъекта-службы в учетной записи, созданной на предыдущем шаге. Для основной конечной точки необходимо зарегистрировать два субъекта-службы. Если требуется проверка подлинности Active Directory для вторичной конечной точки, имена субъектов-служб также должны быть зарегистрированы для вторичной конечной точки.

    Чтобы создать и зарегистрировать имена субъектов-служб, выполните приведенные ниже действия.

    1. Чтобы создать имена субъектов-служб, используйте следующий формат:

      MSSQLSvc/<DNS name>
      MSSQLSvc/<DNS name>:<port>
      
    2. На одном из контроллеров домена выполните следующие команды, чтобы зарегистрировать имена субъектов-служб:

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

      Команды могут выглядеть следующим образом:

      setspn -S MSSQLSvc/sqlmi-primary.contoso.local sqlmi-account
      setspn -S MSSQLSvc/sqlmi-primary.contoso.local:31433 sqlmi-account
      
    3. Если требуется проверка подлинности Active Directory на вторичной конечной точке, выполните те же команды, чтобы добавить имена субъектов-служб для вторичной конечной точки:

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

      Команды могут выглядеть следующим образом:

      setspn -S MSSQLSvc/sqlmi-secondary.contoso.local sqlmi-account
      setspn -S MSSQLSvc/sqlmi-secondary.contoso.local:31434 sqlmi-account
      
  6. Создайте файл keytab, имеющий записи учетной записи и имени субъекта-службы: чтобы SQL мог пройти проверку подлинности в Active Directory и принять проверку подлинности от пользователей Active Directory, укажите файл keytab с помощью секрета Kubernetes.

    • Файл keytab содержит зашифрованные записи для учетной записи Active Directory, созданной для управляемого экземпляра и имен субъектов-служб.

    • SQL Server использует этот файл в качестве учетных данных для Active Directory.

    • Чтобы создать файл keytab, можно выбрать один из нескольких средств:

      • adutil: доступно для Linux (см . общие сведения о adutil)
      • ktutil: доступно в Linux
      • ktpass: доступно в Windows
      • пользовательские скрипты;

    Чтобы создать файл keytab специально для управляемого экземпляра:

    1. Используйте один из следующих пользовательских скриптов:

      Скрипты принимают несколько параметров и создают файл keytab и файл спецификации YAML для секрета Kubernetes, содержащего ключ.

    2. В скрипте замените значения параметров значениями для развертывания управляемого экземпляра.

      Для входных параметров используйте следующие значения:

      • --realm: домен Active Directory в верхнем регистре. Пример: CONTOSO.LOCAL
      • --account: учетная запись Active Directory, в которой зарегистрированы имена субъектов-служб. Пример: sqlmi-account
      • --port: номер порта основной конечной точки SQL. Пример: 31433
      • --dns-name: DNS-имя для основной конечной точки SQL.
      • --keytab-file: путь к файлу keytab.
      • --secret-name: имя секрета keytab для создания спецификации.
      • --secret-namespace: пространство имен Kubernetes, содержащее секрет keytab.
      • --secondary-port: дополнительный номер порта конечной точки SQL (необязательно). Пример: 31434
      • --secondary-dns-name: DNS-имя для вторичной конечной точки SQL (необязательно).

      Выберите имя секрета Kubernetes, на котором размещен ключ. Используйте пространство имен, в котором развернут управляемый экземпляр.

    3. Выполните следующую команду, чтобы создать ключ:

      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>
      

      Команда может выглядеть следующим образом:

      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. Выполните следующую команду, чтобы убедиться, что ключ является правильным:

      klist -kte <keytab file>
      
  7. Разверните секрет Kubernetes для keytab: используйте файл спецификации секрета Kubernetes, который вы создали на предыдущем шаге, чтобы развернуть секрет.

    Файл спецификации выглядит примерно так:

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

    Чтобы развернуть секрет Kubernetes, выполните следующую команду:

    kubectl apply -f <file>
    

    Ваша команда может выглядеть следующим образом:

    kubectl apply -f sqlmi-keytab-secret.yaml
    

Задание свойств для проверки подлинности Active Directory

Чтобы развернуть Управляемый экземпляр SQL, включенную проверкой подлинности Azure Arc для Azure Arc Active Directory, обновите файл спецификации развертывания, чтобы ссылаться на используемый экземпляр соединителя Active Directory. Ссылка на соединитель Active Directory в файле спецификации SQL автоматически настраивает SQL для проверки подлинности Active Directory.

Чтобы поддерживать проверку подлинности Active Directory в SQL в режиме ключей, управляемом клиентом, задайте следующие свойства в файле спецификации развертывания. Некоторые свойства являются обязательными, и некоторые из них являются необязательными.

Обязательное поле

  • spec.security.activeDirectory.connector.name: имя предварительно созданного пользовательского ресурса соединителя Active Directory для присоединения к проверке подлинности Active Directory. Если ввести значение для этого свойства, проверка подлинности Active Directory реализуется.
  • spec.security.activeDirectory.accountName: имя учетной записи Active Directory для управляемого экземпляра.
  • spec.security.activeDirectory.keytabSecret: имя секрета Kubernetes, на котором размещен предварительно созданный файл keytab для пользователей. Этот секрет должен находиться в том же пространстве имен, что и управляемый экземпляр. Этот параметр необходим только для развертывания Active Directory в режиме ключей, управляемых клиентом.
  • spec.services.primary.dnsName: введите DNS-имя для основной конечной точки SQL.
  • spec.services.primary.port: введите номер порта для основной конечной точки SQL.

Необязательно

  • spec.security.activeDirectory.connector.namespace: пространство имен Kubernetes для предварительного соединителя Active Directory для присоединения к проверке подлинности Active Directory. Если вы не вводите значение, используется пространство имен SQL.
  • spec.services.readableSecondaries.dnsName: введите DNS-имя для вторичной конечной точки SQL.
  • spec.services.readableSecondaries.port: введите номер порта для вторичной конечной точки SQL.

Подготовка файла спецификации развертывания

Затем подготовьте файл спецификации YAML для развертывания Управляемый экземпляр SQL. В используемом режиме введите значения развертывания в файле спецификации.

Примечание.

В файле спецификации для обоих режимов admin-login-secret значение в примере YAML обеспечивает базовую проверку подлинности. Значение параметра можно использовать для входа в управляемый экземпляр, а затем создавать имена входа для пользователей и групп Active Directory. Дополнительные сведения см. в статье "Подключение к интегрированным с Active Directory" Управляемый экземпляр SQL с поддержкой Azure Arc.

В следующем примере показан файл спецификации для режима ключей, управляемого клиентом:

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

Развертывание управляемого экземпляра

Для режима ключей, управляемого клиентом, и режима ключей, управляемого системой, разверните управляемый экземпляр с помощью подготовленного файла YAML спецификации:

  1. Сохраните файл. В следующем шаге для имени файла спецификации используется sqlmi.yaml , но можно выбрать любое имя файла.

  2. Выполните следующую команду, чтобы развернуть экземпляр с помощью спецификации:

    kubectl apply -f <specification file name>
    

    Команда может выглядеть следующим образом:

    kubectl apply -f sqlmi.yaml