Mengonfigurasi Akun Layanan Terkelola grup (gMSA) untuk kontainer Windows dengan Azure Kubernetes Service di Azure Stack HCI dan Windows Server

Berlaku untuk: AKS di Azure Stack HCI 22H2, AKS di Windows Server

Untuk menggunakan Autentikasi AD, Anda dapat mengonfigurasikan kontainer Akun Layanan Terkelila grup (gMSA) untuk Windows guna dijalankan dengan host gabungan non-domain. Akun Layanan Terkelola grup adalah jenis akun layanan khusus yang diperkenalkan di Windows Server 2012 yang dirancang untuk memungkinkan beberapa komputer berbagi identitas tanpa harus mengetahui kata sandi. Kontainer Windows tidak dapat digabungkan secara domain, tetapi banyak aplikasi Windows yang berjalan dalam kontainer Windows masih memerlukan Autentikasi AD.

Catatan

Untuk mempelajari cara komunitas Kubernetes mendukung penggunaan gMSA dengan kontainer Windows, lihat Mengonfigurasi gMSA.

Arsitektur gMSA untuk kontainer dengan host gabungan non-domain

gMSA untuk kontainer dengan host gabungan non-domain menggunakan identitas pengguna portabel alih-alih identitas host untuk mengambil info masuk gMSA. Oleh karena itu, secara manual menggabungkan node pekerja Windows ke domain tidak lagi diperlukan. Identitas pengguna disimpan sebagai rahasia di Kubernetes. Diagram di bawah ini menunjukkan proses mengonfigurasi gMSA untuk kontainer dengan host gabungan non-domain:

Diagram grup Akun Layanan Terkelola versi dua

gMSA untuk kontainer dengan host gabungan non-domain memberikan fleksibilitas membuat kontainer dengan gMSA tanpa menggabungkan simpul host ke domain. Memulai Windows Server 2019, ccg.exe didukung, yang memungkinkan mekanisme plug-in mengambil info masuk gMSA dari Active Directory. Anda dapat menggunakan identitas itu untuk memulai kontainer. Untuk informasi selengkapnya tentang ccg.exe, lihat antarmuka ICcgDomainAuthCredentials.

Perbandingan gMSA untuk kontainer dengan host gabungan non-domain dan host gabungan domain

Ketika awal diperkenalkan,gMSA mengharuskan host kontainer untuk bergabung secara domain, yang menciptakan banyak overhead untuk secara manual menggabungkan node pekerja Windows ke domain. Pembatasan ini telah diatasi dengan gMSA untuk kontainer dengan host gabungan non-domain, sehingga pengguna sekarang dapat menggunakan gMSA dengan host yang tidak bergabung dengan domain. Perbaikan lain untuk gMSA meliputi hal-hal berikut:

  • Menghilangkan persyaratan untuk secara manual menggabungkan node pekerja Windows ke domain, yang menyebabkan banyak overhead. Untuk skenario penskalaan, ini akan menyederhanakan proses.
  • Dalam skenario pembaruan bergulir, pengguna tidak lagi harus menggabungkan kembali node ke domain.
  • Proses yang lebih mudah dalam mengelola akun komputer simpul pekerja untuk mengambil kata sandi akun layanan gMSA.
  • Proses end-to-end yang lebih sederhana untuk mengonfigurasi gMSA dengan Kubernetes.

Sebelum Anda mulai

Untuk menjalankan kontainer Windows dengan akun layanan terkelola grup, Anda memerlukan hal berikut:

  • Domain Active Directory dengan setidaknya satu pengendali domain yang menjalankan Windows Server 2012 atau yang lebih baru. Tidak ada persyaratan tingkat fungsional forest atau domain untuk menggunakan gMSA, tetapi kata sandi gMSA hanya dapat didistribusikan oleh pengendali domain yang menjalankan Windows Server 2012 atau yang lebih baru. Untuk informasi selengkapnya, lihat Persyaratan Active Directory untuk gMSA.
  • Izin untuk membuat akun gMSA. Untuk membuat akun gMSA, Anda harus menjadi Administrator Domain atau menggunakan akun yang telah diberi izin untuk membuat objek msDS-GroupManagedServiceAccount.
  • Akses ke internet untuk mengunduh modul PowerShell CredentialSpec. Jika Anda bekerja di lingkungan yang terputus, Anda dapat menyimpan modul di komputer dengan akses internet dan menyalinnya ke mesin pengembangan atau host kontainer Anda.
  • Untuk memastikan autentikasi gMSA dan AD berfungsi, pastikan node kluster Azure Stack HCI dan Windows Server dikonfigurasi untuk menyinkronkan waktunya dengan pengendali domain atau sumber waktu lain. Anda juga harus memastikan Hyper-V dikonfigurasi untuk menyinkronkan waktu ke mesin virtual apa pun.

Siapkan gMSA di pengendali domain

Ikuti langkah-langkah di bawah ini untuk menyiapkan gMSA di pengendali domain:

  1. Di pengendali domain, siapkan Active Directory dan buat akun gMSA.

  2. Membuat akun pengguna domain. Akun/kata sandi pengguna ini akan disimpan sebagai rahasia Kubernetes dan digunakan untuk mengambil kata sandi gMSA.

  3. Untuk membuat akun gMSA dan memberikan izin untuk membaca kata sandi akun gMSA yang dibuat pada Langkah 2, jalankan perintah PowerShell New-ADServiceAccount berikut:

     New-ADServiceAccount -Name "<gmsa account name>" -DnsHostName "<gmsa account name>.<domain name>.com" -ServicePrincipalNames "host/<gmsa account name>", "host/<gmsa account name>.<domain name>.com" -PrincipalsAllowedToRetrieveManagedPassword <username you created earlier> 
    

    Untuk -PrincipalsAllowedToRetrieveManagedPassword, tentukan nama pengguna domain yang Anda buat sebelumnya seperti yang ditunjukkan pada contoh di bawah ini:

    New-ADServiceAccount -Name "WebApp01" -DnsHostName "WebApp01.akshcitest.com" -ServicePrincipalNames "host/WebApp01", "host/WebApp01.akshcitest.com" -PrincipalsAllowedToRetrieveManagedPassword "testgmsa"
    

Siapkan file JSON spesifikasi info masuk gMSA

Untuk menyiapkan file JSON spesifikasi info masuk gMSA, ikuti langkah-langkah membuat spesifikasi info masuk.

Mengonfigurasi gMSA untuk pod dan kontainer Windows dalam kluster

Komunitas Kubernetes sudah mendukung node pekerja Windows yang bergabung dengan domain untuk gMSA. Meskipun Anda tidak perlu menggabungkan domain dengan node pekerja Windows di AKS di Azure Stack HCI dan Windows Server, ada langkah konfigurasi lain yang diperlukan. Langkah-langkah ini termasuk menginstal webhook, definisi sumber daya kustom (CRD), dan spesifikasi info masuk, serta mengaktifkan kontrol akses berbasis peran (peran RBAC). Langkah-langkah berikut menggunakan perintah PowerShell yang dibuat untuk membantu menyederhanakan proses konfigurasi.

Sebelum menyelesaikan langkah-langkah di bawah ini, pastikan modul PowerShell AksHci diinstal dan kubectl dapat tersambung ke kluster Anda.

  1. Untuk menginstal webhook, jalankan perintah PowerShell Install-AksHciGmsaWebhook berikut:

    Install-AksHciGMSAWebhook -Name <cluster name>
    

    Untuk memvalidasi bahwa pod webhook berhasil dijalankan, jalankan perintah berikut:

    kubectl get pods -n kube-system | findstr gmsa
    

    Anda akan melihat satu pod dengan awalan gmsa-webhook yang sedang berjalan.

  2. Buat objek rahasia yang menyimpan info masuk pengguna Active Directory. Lengkapi data konfigurasi di bawah ini dan simpan pengaturan ke dalam file bernama secret.yaml.

    apiVersion: v1
    kind: Secret
    metadata:
       name: <secret-name>
       namespace: <secret under namespace other than the default>
    type: Opaque
    stringData:
       domain: <FQDN of the domain, for example: akshcitest.com>
       username: <domain user who can retrieve the gMSA password>
       password: <password>
    

    Selanjutnya, jalankan perintah berikut untuk membuat objek rahasia:

    kubectl apply -f secret.yaml
    

    Catatan

    Jika Anda membuat rahasia di bawah namespace layanan selain default, ingatlah untuk mengatur namespace layanan penyebaran ke namespace layanan yang sama.

  3. Gunakan cmdlet PowerShell Add-AksHciGMSACredentialSpec untuk membuat CRD gMSA, mengaktifkan kontrol akses berbasis peran (RBAC), lalu tetapkan peran ke akun layanan untuk menggunakan file spesifikasi kredensial gMSA tertentu. Langkah-langkah ini dijelaskan secara lebih detail dalam artikel Kubernetes tentang Mengonfigurasi gMSA untuk pod dan kontainer Windows.

    Gunakan spesifikasi info masuk JSON sebagai input untuk perintah PowerShell berikut (parameter dengan tanda bintang * adalah wajib):

    Add-AksHciGMSACredentialSpec -Name <cluster name>*  
      -credSpecFilePath <path to JSON credspec>* 
      -credSpecName <name for credspec as the k8s GMSACredentialSpec object>* 
      -secretName <name of secret>* 
      -secretNamespace <namespace of secret>  
      -serviceAccount <name of service account to bind to clusterrole>  
      -clusterRoleName <name of clusterrole to use the credspec>*  
      -overwrite 
    

    Untuk melihat contoh, lihat kode berikut:

    Add-AksHciGMSACredentialSpec -Name mynewcluster 
      -credSpecFilePath .\credspectest.json 
      -credSpecName credspec-mynewcluster 
      -secretName mysecret 
      -clusterRoleName clusterrole-mynewcluster
    

Menyebarkan aplikasi

Buat file YAML penyebaran menggunakan pengaturan contoh berikut. Entri yang diperlukan meliputi serviceAccountName, gmsaCredentialSpecName, volumeMounts, dan dnsconfig.

  1. Tambahkan akun layanan:

    serviceAccountName: default
       securityContext: 
         windowsOptions: 
           gmsaCredentialSpecName:
    
  2. Tambahkan objek spesifikasi info masuk:

    securityContext: 
         windowsOptions: 
           gmsaCredentialSpecName: <cred spec name>
    
  3. Pasang rahasia untuk penyebaran:

    volumeMounts:
         - name: <volume name>
           mountPath: <vmount path>
           readOnly: true
       volumes:
         - name: <volume name>
           secret:
             secretName: <secret name>
             items:
               - key: username
                 path: my-group/my-username
    
  4. Tambahkan alamat IP pengendali domain dan nama domain di bawah dnsConfig:

    dnsConfig: 
         nameservers:
           - <IP address for domain controller>
         searches: 
           - <domain>
    

Pastikan kontainer berfungsi dengan GMSA

Setelah Anda menyebarkan kontainer, pastikan kontainer berfungsi menggunakan langkah-langkah berikut:

  1. Dapatkan ID kontainer untuk penyebaran Anda dengan menjalankan perintah berikut:

    kubectl get pods
    
  2. Buka PowerShell dan jalankan perintah berikut:

    kubectl exec -it <container id> powershell
    
  3. Setelah Anda berada di kontainer, jalankan hal berikut:

    Nltest /parentdomain 
    Nltest /sc_verify:<domain> 
    
    Connection Status = 0 0x0 NERR_Success The command completed successfully. 
    

    Output ini menunjukkan bahwa komputer telah diautentikasi oleh pengendali domain, dan saluran aman ada antara komputer klien dan pengendali domain.

  4. Periksa apakah kontainer dapat memperoleh Tiket Pemberian Tiket Kerberos (TGT) yang valid.

    klist get krbtgt
    
    A ticket to krbtgt has been retrieved successfully
    

Membersihkan pengaturan gMSA di kluster

Jika Anda perlu membersihkan pengaturan gMSA, gunakan langkah-langkah penghapusan instalan berikut.

Menghapus instalan spesifikasi info masuk

Untuk menghapus instalan, jalankan perintah PowerShell Remove-AksHcigmsaCredentialSpec berikut:

Remove-AksHciGMSACredentialSpec -Name <cluster name> -credSpecName <cred spec object name> -clusterRoleName <clusterrole object name> -serviceAccount <serviceaccount object name> -secretNamespace <namespace of the secret object>

Menghapus instalan webhook

Untuk menghapus instalan webhook, jalankan perintah PowerShell Uninstall-AksHciGMSAWebhook berikut:

Uninstall-AksHciGMSAWebhook -Name <cluster name>

Langkah berikutnya