Tutorial ini menunjukkan cara membuat aplikasi web ASP.NET yang menggunakan IIS dengan Autentikasi Windows Terintegrasi dan cara men-deploy-nya menggunakan container Windows ke cluster Google Kubernetes Engine (GKE) yang memiliki node Windows Server yang bergabung dengan domain. Konfigurasi ini berguna untuk men-deploy aplikasi ASP.NET dalam container Windows di Google Cloud sehingga aplikasi dapat melakukan autentikasi ke resource Windows lainnya. Tutorial ini juga menunjukkan cara membuat Akun Layanan Terkelola grup (gMSA) di Active Directory dan cara mengonfigurasi deployment aplikasi web di GKE untuk menggunakannya.
Tutorial ini ditujukan untuk admin sistem. Anda dianggap sudah memahami Active Directory dan memiliki pengalaman menggunakan Google Kubernetes Engine (GKE).
Tujuan
- Membuat cluster GKE berisi node Windows Server yang bergabung dengan domain dan mengonfigurasi cluster untuk mendukung gMSA Active Directory.
- Membangun dan men-deploy image container aplikasi web ASP.NET yang menggunakan IIS dengan Autentikasi Windows Terintegrasi.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloud yang dapat ditagih berikut:
- Compute Engine
- GKE
- Artifact Registry
- Other costs that are associated with the related tutorial Configuring Active Directory for VMs to automatically join a domain:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Sebelum memulai
Ikuti langkah-langkah dalam tutorial Mengonfigurasi Active Directory agar VM dapat bergabung dengan domain secara otomatis untuk membuat layanan Cloud Run yang bergabung dengan domain Active Directory.
Jika Anda menjalankan tutorial ini di project Google Cloud yang berbeda dengan tempat Anda membuat VM untuk menguji penggabungan domain otomatis, lakukan langkah-langkah untuk mengaktifkan project untuk penggabungan domain otomatis dalam project Google Cloud.
Setelah menyelesaikan tutorial lainnya, Anda memiliki layanan Cloud Run baru dan URL-nya dicetak di jendela PowerShell (nilai variabel
$RegisterUrl
). Catat alamat layanan, karena Anda menggunakannya dalam tutorial ini.Pastikan Anda telah mengaktifkan API untuk Compute Engine, GKE, Cloud Build, Artifact Registry, dan Cloud Resource Manager API:
Setelah menyelesaikan tutorial ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk informasi selengkapnya, lihat Pembersihan.
Arsitektur
Aplikasi berbasis Windows yang berjalan di Windows Server yang bergabung dengan domain biasanya menggunakan identitas Microsoft Active Directory (AD) untuk mengautentikasi pengguna dan aplikasi. Kasus penggunaan umum untuk hal ini adalah sebagai berikut:
- Membuat aplikasi web ASP.NET yang menggunakan Autentikasi Windows Terintegrasi untuk mengautentikasi pengguna Active Directory saat mencoba login ke aplikasi web.
- Membuat aplikasi yang menggunakan akun komputer Active Directory server untuk mengakses resource melalui jaringan, seperti berbagi SMB jarak jauh atau instance Microsoft SQL Server jarak jauh.
Container Windows tidak dapat bergabung dengan domain sehingga tidak memiliki akun komputer di Active Directory. Oleh karena itu, aplikasi web ASP.NET yang berjalan di container Windows tidak dapat mengautentikasi pengguna Active Directory melalui Autentikasi Windows Terintegrasi, sehingga tidak dapat mengakses resource yang diamankan dalam jaringan. Untuk informasi selengkapnya tentang cara ASP.NET mengakses resource yang diamankan, lihat Identitas Kumpulan Aplikasi dalam dokumentasi Microsoft.
Daripada menggunakan akun komputer, container Windows dapat menggunakan identitas Akun Layanan Terkelola grup (gMSA) Active Directory untuk mengakses Active Directory dan resource aman lainnya di jaringan, seperti berbagi file dan SQL Server instance. Untuk informasi selengkapnya, lihat Ringkasan Akun Layanan Terkelola Grup dalam dokumentasi Microsoft.
Diagram arsitektur berikut menunjukkan resource yang digunakan dalam tutorial ini:
Diagram menampilkan elemen berikut:
- VM Pengembangan. Dalam tutorial ini, Anda akan membuat VM Windows Server yang digunakan untuk membangun image container aplikasi web ASP.NET dan untuk membuat gMSA.
- Cluster dan node GKE. Cluster
GKE dalam tutorial ini memiliki node
pool Linux dan node pool Windows Server yang digunakan dengan cara berikut:
- Node Linux menjalankan komponen sistem yang hanya berjalan di sistem operasi Linux, seperti server metrik GKE.
- Node Windows Server digunakan untuk menghosting container Windows Server dan bergabung ke domain Active Directory.
- Infrastruktur Active Directory. Agar node Windows GKE bergabung dengan domain, Anda harus menjalankan tutorial Mengonfigurasi Active Directory agar VM dapat bergabung dengan domain secara otomatis terlebih dahulu. Dalam tutorial tersebut, Anda akan membuat layanan Cloud Run yang bertanggung jawab untuk mendaftarkan komputer (instance) baru di Active Directory, dan memberikan sandi sementara ke setiap instance baru yang digunakan instance tersebut untuk menyelesaikan penggabungan domain. Setiap instance baru dalam node pool Windows Server memanggil layanan Cloud Run untuk menggabungkan dirinya sendiri ke domain Active Directory.
- Load balancer jaringan Saat pengguna lokal membuka browser dan menjelajahi aplikasi web ASP.NET, traffic akan melewati load balancer jaringan. Load balancer dibuat oleh GKE saat Anda membuat layanan GKE LoadBalancer untuk aplikasi web Anda. Pengguna juga melakukan autentikasi ke aplikasi web dengan meneruskan kredensial Active Directory ke aplikasi web.
Membuat infrastruktur
Setelah menyelesaikan tutorial terkait, Anda akan membuat komponen infrastruktur untuk tutorial saat ini, yang mencakup hal berikut:
- VM Windows Server yang memiliki image container aplikasi web ASP.NET.
- Cluster GKE yang memiliki node pool Windows Server.
- Aturan firewall yang memberi Pod GKE akses ke Active Directory.
- Webhook di cluster GKE yang menangani konfigurasi dan pengisian resource gMSA dalam deployment.
Membuat VM pengembangan
Image container Windows Server yang Anda buat harus cocok dengan versi VM Windows Server tempat Anda membangun image container. Versi ini juga harus cocok dengan versi Windows Server untuk node Windows Server GKE Anda. Membuat image container atau menjalankan container di versi Windows Server yang berbeda akan menimbulkan error. Untuk mengetahui informasi persyaratan kompatibilitas container Windows lebih lanjut, lihat Mencocokkan versi host container dengan versi image container.
Tutorial ini menggunakan versi Long-Term Servicing Channel (LTSC) 2022 Windows Server untuk VM, node Windows Server di GKE, dan image container. Untuk informasi selengkapnya, lihat pemetaan versi antara versi Windows Server dan versi GKE.
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
- Jika PowerShell terbuka, tutup dengan mengetik
exit
. Tetapkan variabel lingkungan untuk nama jaringan dan subnetwork serta untuk URL layanan Active Directory:
export NETWORK_NAME=NETWORK-NAME export SUBNETWORK_NAME=SUBNETWORK-NAME export AD_JOIN_SERVICE_URL=AD-JOIN-SERVICE-URL
Ganti kode berikut:
NETWORK-NAME
: Jaringan VPC tempat men-deploy VM.SUBNETWORK-NAME
: Subnet tempat men-deploy VM.AD-JOIN-SERVICE-URL
: URL layanan Cloud Run yang Anda deploy di bagian Sebelum memulai.
Tetapkan project ID dan region Google Cloud Anda untuk lingkungan saat ini:
gcloud config set project PROJECT-ID gcloud config set compute/zone ZONE-NAME
Ganti kode berikut:
PROJECT-ID
: ID project Google Cloud Anda.ZONE-NAME
: Zona tempat men-deploy semua VM. Untuk mengurangi latensi, sebaiknya pilih zona di region yang sama dengan tempat Anda men-deploy layanan Cloud Run yang bergabung dengan domain Active Directory.
Buat akun layanan untuk VM pengembangan:
export SERVICE_ACCOUNT_NAME=dev-vm export SERVICE_ACCOUNT_EMAIL=$SERVICE_ACCOUNT_NAME@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME \ --display-name="Development VM Service Account"
Berikan akses akun layanan ke Artifact Registry:
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \ --member="serviceAccount:$SERVICE_ACCOUNT_EMAIL" \ --role="roles/artifactregistry.writer"
Beri akses akun layanan ke GKE:
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \ --member="serviceAccount:$SERVICE_ACCOUNT_EMAIL" \ --role="roles/container.admin"
Akun layanan diberi peran
container.admin
karena peran ini memiliki izin untuk membuat cluster GKE dalam project dan mengelola resource dalam cluster, termasuk resource role-based access control (RBAC). Resource RBAC diperlukan untuk mengontrol Pod mana yang diizinkan untuk menggunakan gMSA.Buat VM Windows Server 2022 baru:
gcloud compute instances create gmsa-dev-vm \ --image-project windows-cloud \ --image-family windows-2022-core \ --machine-type n1-standard-2 \ --boot-disk-type=pd-ssd \ --boot-disk-size=100GB \ --network $NETWORK_NAME \ --subnet $SUBNETWORK_NAME \ --service-account=$SERVICE_ACCOUNT_EMAIL \ --scopes https://www.googleapis.com/auth/cloud-platform \ --metadata sysprep-specialize-script-ps1="iex((New-Object System.Net.WebClient).DownloadString('$AD_JOIN_SERVICE_URL')); Add-WindowsFeature RSAT-AD-PowerShell"
Jika Anda berencana men-deploy aplikasi dalam container ke container Windows Server 2019, ubah parameter value
--image-family
menjadiwindows-2019-core-for-containers
.Cakupan
https://www.googleapis.com/auth/cloud-platform
memungkinkan instance mengakses semua Google Cloud API, bergantung pada peran IAM yang ditentukan untuk akun layanan instance.VM dibuat dengan alamat IP eksternal agar dapat berkomunikasi dengan internet. Anda harus memiliki VM dengan akses internet agar dapat mendownload beberapa utilitas, seperti git dan kubectl, dan mendownload aplikasi web ASP.NET dari GitHub.
Selama tahap
sysprep
, instance baru akan digabungkan ke domain Active Directory agar Anda dapat mengakses instance dari jarak jauh menggunakan akun domain Anda. Skrip dalam perintahsysprep
juga menginstal modul PowerShell untuk Active Directory.
Membuat repositori Docker Artifact Registry
Di Cloud Shell, tetapkan lokasi default untuk repositori Artifact Registry baru:
gcloud config set artifacts/location LOCATION
Ganti
LOCATION
dengan region tempat Anda ingin membuat repositori Artifact Registry. Untuk mengurangi latensi, sebaiknya pilih region yang sama dengan tempat Anda men-deploy VM pengembangan.Buat repositori Docker Artifact Registry:
gcloud artifacts repositories create windows-container-images \ --repository-format=docker
Membuat cluster GKE
Di Cloud Shell, tetapkan variabel lingkungan untuk nama cluster GKE:
export GKE_CLUSTER_NAME=cluster-1
Buat cluster GKE:
gcloud container clusters create $GKE_CLUSTER_NAME \ --release-channel rapid \ --network $NETWORK_NAME \ --subnetwork $SUBNETWORK_NAME \ --enable-ip-alias
Menyetel parameter
--release-channel
kerapid
akan men-deploy cluster GKE dengan versi Kubernetes terbaru. Parameter--enable-ip-alias
mengaktifkan IP alias. IP alias diperlukan untuk node Windows Server.
Membuat node pool Windows Server di GKE
Saat Anda membuat cluster GKE baru melalui CLI, cluster tersebut akan dibuat dengan node pool Linux. Untuk menggunakan Windows Server di GKE, Anda perlu membuat node pool Windows Server.
Cluster GKE harus memiliki setidaknya satu node Linux untuk menjalankan container internal (sistem) cluster. Cluster GKE tidak dapat dibuat hanya dengan node Windows Server.
Di Cloud Shell, tetapkan variabel lingkungan untuk nama node pool server Windows:
export NODE_POOL_NAME=windows-server-pool
Buat node pool Windows Server GKE:
gcloud container node-pools create $NODE_POOL_NAME \ --cluster $GKE_CLUSTER_NAME \ --machine-type n1-standard-2 \ --image-type WINDOWS_LTSC_CONTAINERD \ --windows-os-version=ltsc2022 \ --num-nodes 2 \ --no-enable-autoupgrade \ --metadata sysprep-specialize-script-ps1="iex((New-Object System.Net.WebClient).DownloadString('$AD_JOIN_SERVICE_URL'))"
Jika Anda berencana men-deploy aplikasi dalam container ke container Windows Server 2019, ubah parameter
--windows-os-version
menjadiltsc2019
.Kunci metadata
sysprep-specialize-script-ps1
adalah kunci bawaan yang mengarah ke skrip PowerShell yang dijalankan selama langkah GCESysprep, sebelum instance melakukan booting untuk pertama kalinya.Cmdlet
iex
mendownload skrip PowerShell dari layanan penggabungan domain Active Directory yang Anda deploy ke Cloud Run. Kemudian, skrip yang menggabungkan instance baru tersebut akan dijalankan ke domain Active Directory.Parameter
--no-enable-autoupgrade
menonaktifkan upgrade otomatis node untuk semua node dalam kumpulan. Hal ini dilakukan karena mengupgrade image Windows node dapat menyebabkan inkompatibilitas antara versi Windows Server node dan versi Windows Server Pod. Untuk mengetahui informasi selengkapnya, lihat Mengupgrade node pool Windows Server.Setelah setiap node dibuat, skrip PowerShell
domain-join
menggabungkan node tersebut ke domain.Tunggu beberapa menit hingga node pool dibuat, lalu jalankan perintah berikut untuk memverifikasi bahwa semua node digabungkan dengan domain:
kubectl get node \ -l cloud.google.com/gke-nodepool=$NODE_POOL_NAME \ -o custom-columns=":metadata.name" --no-headers \ | xargs -I{} gcloud compute instances get-serial-port-output {} --port 1 \ | grep "sysprep-specialize-script-ps1:.*success" --ignore-case
Jika node telah digabungkan ke domain, output-nya adalah sebagai berikut:
timestamp GCEMetadataScripts: sysprep-specialize-script-ps1: Successfully registered computer account. timestamp GCEMetadataScripts: sysprep-specialize-script-ps1: Computer successfully joined to domain Specify --start=152874 in the next get-serial-port-output invocation to get only the new output starting from here.
Jika Anda ingin melihat output skrip lengkap, hapus
.*success
dari perintahgrep
.
Memberi Pod GKE akses ke Active Directory
Anda perlu membuat aturan firewall yang mengizinkan Pod cluster GKE untuk mengakses pengontrol domain menggunakan protokol berikut:
- Kerberos (UDP/88, TCP/88)
- NTP (UDP/123)
- RPC (TCP/135, TCP/49152-65535)
- LDAP (UDP/389, TCP/389)
- SMB (UDP/445, TCP/445)
- LDAP GC (TCP/3268)
- Layanan Web Active Directory (TCP/9389)
Anda dapat menerapkan aturan berdasarkan akun layanan yang telah ditetapkan untuk pengontrol domain, atau menerapkannya menggunakan tag jaringan seperti yang dilakukan dalam tutorial ini. Untuk mempelajari port terkait Active Directory lebih lanjut, lihat dokumentasi tentang persyaratan protokol dan port Active Directory serta menggunakan Active Directory di seluruh firewall.
Jika menggunakan Layanan Terkelola untuk Microsoft Active Directory (Microsoft AD Terkelola), Anda dapat melewati prosedur ini.
Di Cloud Shell, dapatkan rentang alamat IP Pod cluster GKE:
CLUSTER_IP_RANGE=`gcloud container clusters describe $GKE_CLUSTER_NAME --format="value(clusterIpv4Cidr)"`
Buat aturan firewall untuk memberi Pod GKE akses ke Active Directory:
gcloud compute firewall-rules create allow-gke-pods-to-ad \ --network $NETWORK_NAME \ --allow udp:88,tcp:88,udp:123,tcp:135,tcp:49152-65535,udp:389,tcp:389,udp:445,tcp:445,tcp:3268,tcp:9389 \ --source-ranges=$CLUSTER_IP_RANGE \ --target-tags DC-TAG
Ganti
DC-TAG
dengan tag jaringan yang ditetapkan ke VM pengontrol domain Anda.
Mengonfigurasi GKE untuk mendukung penggunaan gMSA
Untuk menggunakan gMSA di node Windows Server, Anda perlu membuat objek gMSA di Active Directory, membuat resource gMSA yang cocok di GKE, dan mengaktifkan Pod yang baru dibuat untuk mengambil kredensial gMSA-nya.
Di Cloud Shell, download dan jalankan skrip webhook gMSA:
export K8S_GMSA_DEPLOY_DOWNLOAD_REV=b685a27adc40511bb5756dfb3ada2e8578ee72e1 curl https://raw.githubusercontent.com/kubernetes-sigs/windows-gmsa/$K8S_GMSA_DEPLOY_DOWNLOAD_REV/admission-webhook/deploy/deploy-gmsa-webhook.sh -o deploy-gmsa-webhook.sh && chmod +x deploy-gmsa-webhook.sh ./deploy-gmsa-webhook.sh --file ./gmsa-webhook.yml --namespace gmsa-webhook --overwrite rm -drf gmsa-webhook-certs
Skrip ini menambahkan manifes definisi resource kustom (CRD) gMSA ke cluster GKE dan men-deploy webhook yang menyediakan spesifikasi gMSA ke Pod. Kini Anda dapat menyimpan spesifikasi gMSA di cluster dan mengonfigurasi gMSA untuk Pod dan container.
Untuk mempelajari Kubernetes dan gMSA lebih lanjut, baca Mengonfigurasi GMSA untuk Pod dan container Windows.
Cluster GKE Anda sekarang siap untuk menjalankan aplikasi Windows yang memerlukan penggunaan gMSA. Misalnya, Anda dapat menjalankan aplikasi web ASP.NET di node Windows Server. Anda dapat mengonfigurasi aplikasi untuk memproses login pengguna dengan autentikasi Windows atau meminta aplikasi agar menggunakan gMSA Pod untuk mengakses jaringan berbagi jarak jauh atau database SQL Server.
Melakukan Integrasi dengan Active Directory
Berikutnya, Anda membuat gMSA untuk aplikasi web ASP.NET di Active Directory, mengonfigurasi cara dan oleh siapa aplikasi tersebut dapat digunakan, lalu menambahkan konfigurasinya ke GKE.
Login dan memulai PowerShell
- Hubungkan ke VM
gmsa-dev-vm
. Login ke Windows menggunakan akun Active Directory yang diizinkan untuk membuat gMSA.
Akun Anda harus menjadi anggota grup
Domain Admins
atau harus dapat membuat objekmsDS-GroupManagedServiceAccount
. Untuk informasi lebih lanjut, lihat Menyediakan Akun Layanan Terkelola grup.Jika menggunakan Microsoft AD Terkelola, akun Anda harus merupakan anggota grup
Cloud Service Managed Service Account Administrators
. Untuk informasi selengkapnya, lihat Mendelegasikan administrasi Akun Layanan Terkelola.Ketikkan
15
untuk keluar dari menu ke command line (PowerShell).
Menginstal runtime container
Windows Server 2022 memerlukan runtime container, seperti Docker Community Edition (CE), untuk membuat dan menjalankan container Windows. Untuk informasi cara menginstal runtime container di Windows Server lebih lanjut, lihat Memulai: Mempersiapkan Windows untuk container dalam dokumentasi Microsoft.
Jika membuat VM pengembangan menggunakan image windows-2019-core-for-containers
,
Anda dapat melewati prosedur berikut ini karena image sudah
menginstal Docker.
Instal Docker Community Edition (CE):
Invoke-WebRequest -UseBasicParsing -o install-docker-ce.ps1 ` "https://raw.githubusercontent.com/microsoft/Windows-Containers/Main/helpful_tools/Install-DockerCE/install-docker-ce.ps1" .\install-docker-ce.ps1
Jika selama proses penginstalan koneksi desktop jarak jauh terputus, hubungkan kembali ke VM.
Tunggu hingga proses penginstalan selesai, lalu ketik
exit
untuk menutup jendela PowerShell baru.Ketikkan
15
untuk keluar dari menu ke command line (PowerShell).
Membuat kunci root KDS
Sebelum membuat gMSA, Anda harus memastikan bahwa pengontrol domain Active Directory Anda memiliki kunci root Key Distribution Services (KDS). Active Directory menggunakan kunci root KDS untuk membuat sandi bagi gMSA.
Jika menggunakan Microsoft AD Terkelola, Anda dapat melewati prosedur berikut karena Microsoft AD Terkelola akan membuat kunci root KDS saat Anda membuat domain.
Pada
gmsa-dev-vm
, periksa apakah Active Directory sudah memiliki kunci root KDS:Get-KdsRootKey
Perintah ini akan menampilkan ID kunci jika ada.
Jika Anda tidak mendapatkan ID kunci sebagai respons, buat kunci tersebut:
Add-KdsRootKey -EffectiveTime ((get-date).addhours(-10))
Membuat gMSA
Saat membuat gMSA, Anda harus memberikan nama komputer yang memiliki akses ke gMSA. Sebagai praktik terbaik keamanan, Anda harus memberikan izin ke gMSA hanya untuk instance tempat aplikasi berjalan. Saat Anda membuat node pool Windows Server yang bergabung dengan domain, grup Active Directory baru akan dibuat untuk komputer node pool. Nama grup sesuai dengan nama grup instance terkelola (MIG) yang dibuat GKE untuk node pool.
Di PowerShell, tetapkan variabel untuk project ID Google Cloud, nama cluster, nama node pool Windows, nama gMSA, dan nama domain AD:
$ProjectId = "PROJECT-ID" $GkeClusterName = "cluster-1" $PermittedNodePool = "windows-server-pool" $GmsaName = "WebApp-01" $AdDomain = (Get-ADDomain).DNSRoot
Ganti
PROJECT-ID
dengan project ID Google Cloud Anda.Tetapkan konfigurasi cluster untuk alat
gcloud
:gcloud config set project $ProjectId gcloud config set compute/zone "ZONE-NAME"
Ganti
ZONE-NAME
dengan zona tempat Anda men-deploy cluster GKE.Ambil nama domain grup Active Directory yang dibuat untuk node pool:
$InstanceGroupUri = gcloud container node-pools describe $PermittedNodePool ` --cluster $GkeClusterName ` --format="value(instanceGroupUrls)" $InstanceGroupName=([System.Uri]$instanceGroupUri).Segments[-1] $GroupDN=(Get-ADGroup -Filter "name -eq '$InstanceGroupName'") Write-Host $GroupDN.DistinguishedName
Buat gMSA:
New-ADServiceAccount -Name $GmsaName ` -DNSHostName "$GmsaName.$AdDomain" ` -PrincipalsAllowedToRetrieveManagedPassword $GroupDN
Verifikasi bahwa gMSA telah dibuat:
Get-ADServiceAccount -Identity $GmsaName
Jika gMSA telah dibuat, output-nya akan terlihat mirip dengan berikut ini:
DistinguishedName : CN=WebApp01,CN=Managed Service Accounts,DC=corp,DC=example,DC=com Enabled : True Name : WebApp01 ObjectClass : msDS-GroupManagedServiceAccount ObjectGUID : 5afcff45-cf15-467d-aaeb-d65e53288253 SamAccountName : WebApp01$ SID : S-1-5-21-780151012-601164977-3226406772-2103 UserPrincipalName :
Menambahkan gMSA ke GKE
Untuk menggunakan gMSA di cluster Kubernetes, Anda perlu membuat resource gMSA di Kubernetes dan mengonfigurasi namespace dan akun mana yang diizinkan untuk menggunakannya.
Pada
gmsa-dev-vm
, di PowerShell, instal alatgit
:Install-Script -Name Install-Git -Force Install-Git.ps1 $env:Path += ";c:\program files\git\bin"
Instal alat
kubectl
:$version = (Invoke-WebRequest -UseBasicParsing -Uri "https://dl.k8s.io/release/stable.txt").Content $uri = "https://dl.k8s.io/release/$version/bin/windows/amd64/kubectl.exe" New-Item -Type Directory $env:ProgramFiles\kubectl Start-BitsTransfer -Source $uri -Destination $env:ProgramFiles\kubectl\ $env:Path += ";$env:ProgramFiles\kubectl"
Instal biner
gke-gcloud-auth-plugin
:gcloud components install gke-gcloud-auth-plugin
Tunggu beberapa menit hingga proses penginstalan selesai.
Lakukan inisialisasi alat
kubectl
dengan kredensial cluster GKE Anda:gcloud container clusters get-credentials $GkeClusterName
Buat file spesifikasi kredensial gMSA:
Install-Module CredentialSpec -Force $GmsaName = $GmsaName.ToLower() $CredSpecFile = Join-Path $env:TEMP "$GmsaName-credspec.json" New-CredentialSpec -AccountName $GmsaName -Path $CredSpecFile $CredentialsSpec=@{ "apiVersion" = "windows.k8s.io/v1"; "kind" = "GMSACredentialSpec"; "metadata" = @{"name" = $GmsaName} "credspec" = (Get-Content $CredSpecFile | ConvertFrom-Json) } $CredentialsSpec | ConvertTo-Json -Depth 5 | Set-Content $CredSpecFile
Nama resource
GMSACredentialSpec
di Kubernetes harus menggunakan karakter huruf kecil.Skrip mengubah kapitalisasi variabel
$GmsaName
untuk mematuhi batasan ini.Skrip akan menampilkan pesan peringatan bahwa pengujian Akun Layanan Terkelola gagal, seperti yang diharapkan. VM pengembangan Anda bukan anggota grup yang ditetapkan ke gMSA. Oleh karena itu, Anda tidak dapat menguji gMSA dari VM. Pesan peringatan tidak menghentikan perintah untuk membuat spesifikasi kredensial gMSA.
Tambahkan spesifikasi kredensial gMSA ke cluster GKE:
kubectl apply -f $CredSpecFile
Clone repositori GitHub:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples cd kubernetes-engine-samples/windows/aspnet-gmsa/
Tambahkan objek RBAC gMSA ke cluster Anda:
kubectl apply -f gmsa-rbac-webapp-01.yaml
gmsa-rbac-webapp-01.yaml
membuat objek RBACClusterRole
untuk gMSA, lalu mengikat peran cluster baru ke akun layanan default di namespacedefault
. Jika Anda men-deploy aplikasi ke namespace yang berbeda, edit filegmsa-rbac-webapp-01.yaml
dan ubah namespace untuk binding peran dan untuk akun layanan.
Men-deploy dan menggunakan aplikasi web
Berikutnya, Anda mem-build aplikasi web dan image container, men-deploy image container baru ke cluster GKE, lalu membuka aplikasi web di browser untuk memverifikasi bahwa aplikasi web dapat menggunakan gMSA.
Membangun dan men-deploy aplikasi web ASP.NET
Pada
gmsa-dev-vm
, di PowerShell, tetapkan variabel untuk lokasi registry, nama registry, dan tag image:$RegistryLocation = "LOCATION-docker.pkg.dev" $ProjectsRegistry = "$RegistryLocation/$ProjectId" $ImageTag = "$ProjectsRegistry/windows-container-images/test-gmsa:latest"
Ganti
LOCATION
dengan lokasi Anda membuat repositori Artifact Registry.Bangun image container:
docker build -t $ImageTag -f Dockerfile-WINDOWS_LTSC2022 .
Untuk membangun image container bagi Windows Server 2019, tetapkan parameter value
-f
keDockerfile-WINDOWS_LTSC2019
.Kirim image container ke Artifact Registry:
gcloud auth configure-docker $RegistryLocation --quiet docker push $ImageTag
Download file YAML aplikasi dan update dengan konfigurasi gMSA Anda:
$ApplicationYaml = Join-Path $env:TEMP "gmsa-test-webapp-01.yaml" (Get-Content gmsa-test-webapp-01.yaml.template) ` -Replace '\${image_path}',$ImageTag | ` Set-Content $ApplicationYaml
Jika Anda membuat node Windows Server 2019 di GKE, edit file YAML aplikasi dan ubah nilai
cloud.google.com/gke-windows-os-version
dari2022
menjadi2019
.Deploy aplikasi web ke cluster GKE Anda:
kubectl apply -f $ApplicationYaml
Memastikan aplikasi web ASP.NET berjalan
Aplikasi web diekspos ke internet menggunakan layanan LoadBalancer
.
Sebelum dapat mengakses aplikasi web, Anda harus menunggu Pod dan
layanan di-deploy. Men-deploy Pod memerlukan waktu beberapa menit karena
image container Windows Server Core berukuran besar (image aplikasi web berukuran
lebih dari 7 GB) dan perlu waktu bagi node untuk mendownload image dan
membuat container.
Periksa status Pod:
kubectl get pods --selector=app=gmsa-test-webapp-01
Ulangi perintah hingga output menunjukkan bahwa status Pod adalah Running:
NAME READY STATUS RESTARTS AGE gmsa-test-webapp-01-76c6d64975-zrtgq 1/1 Running 0 28s
Jika status Pod tetap Pending dan tidak berubah menjadi ContainerCreating atau Running, periksa image sumber node Windows Anda untuk memastikan itu adalah Windows Server 2022. Anda juga dapat memeriksa tabel pemetaan versi untuk melihat pemetaan versi GKE ke versi Windows Server. Jika versi tidak cocok, buat duplikat file
Dockerfile-WINDOWS_LTSC2022
, tetapkan image container dasar dalam file baru agar cocok dengan versi Windows Server node Anda, lalu ulangi langkah-langkah untuk membangun dan men-deploy aplikasi web ASP.NET.Periksa status layanan:
kubectl get service --selector=app=gmsa-test-webapp-01
Ulangi perintah hingga output menunjukkan bahwa layanan memiliki alamat IP eksternal:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE gmsa-test-webapp-01 LoadBalancer 10.44.2.112 external-ip 80:32233/TCP 17s
Perhatikan nilai external-ip dalam output; Anda memerlukan nilai ini nanti.
Menjalankan pengujian awal di aplikasi web ASP.NET
Pod kini berjalan dan dapat diakses dari internet melalui load balancer jaringan. Berikutnya, Anda menjalankan pengujian awal untuk memverifikasi bahwa container berhasil di-deploy dan memiliki izin untuk menggunakan gMSA.
Di browser, buka
http://EXTERNAL-IP
untuk melihat aplikasi web pengujian gMSA.Ganti
EXTERNAL-IP
dengan alamat IP yang Anda dapatkan di prosedur sebelumnya.Scroll ke bagian Preflight Checks, lalu klik tombol Run Preflight Checks untuk memverifikasi bahwa semua pengujian lulus.
Jika pengujian lulus, output-nya adalah sebagai berikut:
[PASS] Active Directory RSAT PowerShell Module Installed [PASS] IIS Document Root found C:\inetpub\wwwroot\ [PASS] PowerShell Scripts Folder found C:\inetpub\wwwroot\Powershell\ [PASS] Container Diagnostic Script found C:\inetpub\wwwroot\Powershell\\containerDiag.ps1 [PASS] Domain Diagnostic Script found C:\inetpub\wwwroot\Powershell\\domainDiag.ps1 [RES] Result: PASS All checks passed! Please proceed to run the different tests.
Scroll ke bagian Container Information, lalu klik tombol Run Script. Pastikan Anda melihat informasi tentang container dan node, serta tidak ada error yang ditampilkan.
Menggunakan gMSA di Container Windows
Sekarang Anda dapat memverifikasi bahwa penyiapan gMSA berfungsi secara benar dengan menjalankan beberapa pengujian di aplikasi web. Setiap pengujian menggunakan gMSA untuk tujuan yang berbeda. Jika semua pengujian berhasil, artinya Anda telah mengonfigurasi gMSA dengan benar.
Memvalidasi konfigurasi container gMSA
Scroll ke Konektivitas Domain ketik nama gMSA Anda (
WebApp-01
) di kotak Account Name lalu klik Run Script. Tunggu beberapa detik hingga pengujian selesai.Outputnya mirip dengan berikut ini:
***** C O N T A I N E R D I A G N O S T I C S ***** [INFO] Starting script execution at 01-05-2021-13:53:11 [INFO] Using gMSA: WebApp-01 [PASS] gMSA Account found in Active Directory CN=WebApp01,CN=Managed Service Accounts,DC=corp,DC=example,DC=com [PASS] This Container (gmsa-test-webapp01-5bc485b8d5-9lbb7) is running on a GKE Windows Node that is authorized to use WebApp01 [INFO] Script execution complete at 01-05-2021-13:53:12 ***** E N D O F D I A G N O S T I C S *****
Skrip ini menggunakan dua cmdlet PowerShell untuk menguji akses ke gMSA:
Get-ADServiceAccount
: cmdlet ini mengambil informasi tentang gMSA. Jika cmdlt ini berhasil berjalan, berarti container berjalan dengan gMSA yang valid.Test-ADServiceAccount
: cmdlet ini akan menguji apakah dapat mengambil kredensial gMSA. Jika cmdlt berhasil berjalan, container sedang berjalan di node Windows Server yang diizinkan untuk mengakses kredensial gMSA.
Memproses login pengguna dengan Autentikasi Windows
- Di menu navigasi atas di halaman, klik Login.
- Saat diminta untuk memasukkan kredensial, masukkan nama pengguna dan sandi domain Anda.
Jika Anda melihat halaman Secure yang menampilkan informasi akun dan tidak dimintai kredensial, berarti browser otomatis membuat Anda login menggunakan identitas saat ini.
Setelah diautentikasi, Anda akan melihat halaman Secure. Pastikan Anda melihat tiga bagian berikut:
- Informasi pengguna: Menampilkan nama pengguna Anda dan jenis autentikasi yang digunakan.
- Grup: Menampilkan daftar grup tempat Anda bergabung. Nama grup dalam daftar diambil dari Active Directory.
- Klaim Pengguna: Menampilkan daftar klaim untuk pengguna seperti yang disediakan oleh Active Directory saat login. Klaim keanggotaan grup menampilkan SID Grup Active Directory, bukan namanya.
Selain mendukung Autentikasi Windows Terintegrasi, aplikasi web ASP.NET dapat menggunakan gMSA untuk autentikasi saat memanggil server jarak jauh. Dengan gMSA, aplikasi web dan aplikasi lain yang berjalan di container Windows dapat mengakses resource dalam jaringan yang memerlukan autentikasi Windows, seperti instance SQL Server dan berbagi jaringan berbasis SMB.
Pemecahan masalah
Jika Anda menemukan pesan error selama proses penyiapan atau saat pengujian aplikasi web, lihat halaman pemecahan masalah berikut:
- Memecahkan Masalah Windows Server di GKE
- Dokumentasi Kubernetes tentang memecahkan masalah container Windows Server
- Dokumentasi Microsoft tentang memecahkan masalah gMSA untuk Container Windows
Pertimbangan tambahan untuk aplikasi produksi
Petunjuk yang telah Anda ikuti ditulis guna memberikan jalur optimal untuk tujuan tutorial. Untuk lingkungan produksi, Anda dapat mengubah beberapa prosedur untuk meningkatkan hasilnya, seperti yang dijelaskan di bagian berikut.
Pertimbangan node pool Windows Server
Jika berencana untuk men-deploy aplikasi Anda sendiri yang menggunakan gMSA dan aplikasi mendukung sesi klien, sebaiknya buat minimal dua node dalam node pool. Memiliki beberapa node memungkinkan Anda menggunakan penyimpanan sesi di luar proses untuk memverifikasi bahwa aplikasi Anda dapat menangani sesi terdistribusi dengan benar.
Dalam tutorial ini, Anda akan membuat satu node pool Windows Server untuk menghosting
aplikasi Anda. Namun, mungkin ada situasi ketika Anda ingin membuat
beberapa node pool Windows Server di cluster—misalnya, satu node pool
dengan persistent disk (PD) HDD dan node pool lainnya dengan PD SSD. Jika Anda perlu
men-deploy aplikasi ke beberapa node pool, berikan array objek grup Active Directory ke parameter PrincipalsAllowedToRetrieveManagedPassword
, saat Anda
membuat gMSA menggunakan cmdlet New-ADServiceAccount
.
Pertimbangan gMSA dan nama utama layanan (SPN)
Jika aplikasi mengharuskan Anda mengautentikasi pengguna menggunakan Kerberos (misalnya,
untuk mendukung delegasi identitas), Anda perlu mengakses aplikasi menggunakan
DNS kustom dan mengonfigurasi gMSA dengan
nama utama layanan (SPN).
Misalnya, jika load balancer mengekspos aplikasi di
GKE melalui https://my-web-app/
, Anda perlu membuat
SPN bernama HTTP/my-web-app
dengan salah satu cara berikut:
Untuk gMSA baru, buat gMSA dengan SPN yang diperlukan. Contoh:
New-ADServiceAccount -Name $GmsaName ` -DNSHostName "$GmsaName.$AdDomain" ` -PrincipalsAllowedToRetrieveManagedPassword $Groups ` -ServicePrincipalNames "HTTP/my-web-app", "HTTP/my-web-app.$AdDomain"
Untuk gMSA yang sudah ada, panggil
Set-ADServiceAccount
untuk menambahkan SPN yang diperlukan ke gMSA. Contoh:Set-ADServiceAccount $GmsaName -ServicePrincipalNames @{Add="HTTP/my-web-app", "HTTP/my-web-app.$AdDomain"}
Bergantung pada konfigurasi DNS, Anda mungkin juga perlu membuat SPN untuk
HTTP/www.my-web-app
dan HTTP/www.my-web-app.$AdDomain
.
Untuk protokol non-HTTP, seperti layanan WCF yang dikonfigurasi dengan binding
TCP dan Autentikasi Windows, Anda mungkin perlu membuat jenis SPN
lainnya, seperti SPN HOST/
.
Memilih identitas kumpulan aplikasi IIS
Aplikasi Web ASP.NET berjalan di Windows pada server web IIS. Di IIS, Anda
mengonfigurasi grup aplikasi web dengan proses yang sama. Grup ini
disebut
kumpulan aplikasi.
Setiap kumpulan aplikasi dihosting dalam proses khusus yang bernama w3wp
. Kumpulan aplikasi
IIS memberikan konfigurasi proses, seperti apakah proses tersebut
berupa proses 32-bit atau 64-bit, dan semuanya memberikan identitas proses. Saat
menjalankan aplikasi web di penampung Windows, Anda menetapkan identitas proses
kumpulan aplikasi untuk menggunakan akun
Layanan Jaringan
bawaan.
Akun identitas kumpulan aplikasi lokal, yang juga didukung oleh IIS, tidak diperlukan dalam penampung Windows. Akun identitas kumpulan aplikasi dibuat oleh IIS sebagai sarana untuk menerapkan batas keamanan lokal saat menjalankan beberapa aplikasi web pada instance IIS yang sama. Dengan container Windows, tempat setiap aplikasi web dihosting dalam container terpisah, Anda tidak perlu membuat batas keamanan dalam container tersebut karena container itu sendiri memberikan batas keamanan.
Meskipun identitas kumpulan aplikasi dikonfigurasi untuk menggunakan akun Layanan Jaringan, jika aplikasi membuat permintaan ke resource eksternal yang memerlukan autentikasi, aplikasi akan melakukan autentikasi dengan menggunakan gMSA yang Anda konfigurasikan untuk container Windows.
Pembersihan
Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Menghapus resource individu
Jika ingin mempertahankan project Google Cloud, tetapi tidak ingin menghapus resource Google Cloud yang dibuat untuk tutorial ini, Anda dapat menghapus resource satu per satu.
Mengembalikan perubahan Active Directory
- Hubungkan ke VM pengembangan dan login sebagai pengguna yang memiliki akses administratif ke domain Active Directory Anda.
Di VM
gmsa-dev-vm
, jika PowerShell belum terbuka, buka:PowerShell
Hapus gMSA:
Remove-ADServiceAccount -Identity "WebApp-01" -Confirm:$false
Menghapus resource cloud
In the Google Cloud console, activate Cloud Shell.
Lakukan inisialisasi lingkungan
gcloud
:gcloud config set project PROJECT-ID gcloud config set compute/zone ZONE-NAME gcloud config set artifacts/location LOCATION
Ganti kode berikut:
PROJECT-ID
: ID project Google Cloud Anda.ZONE-NAME
: Zona tempat Anda men-deploy cluster GKE dan VM pengembangan.LOCATION
: Region tempat Anda men-deploy repositori Artifact Registry.
Hapus VM pengembangan:
gcloud compute instances delete gmsa-dev-vm --quiet
Hapus akun layanan:
gcloud iam service-accounts delete dev-vm@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com --quiet
Hapus cluster GKE:
gcloud container clusters delete cluster-1 --quiet
Jika Anda sudah membuat aturan firewall untuk pengontrol Active Directory, hapus aturan tersebut:
gcloud compute firewall-rules delete allow-gke-pods-to-ad --quiet
Hapus repositori Docker Artifact Registry:
gcloud artifacts repositories delete windows-container-images --quiet
Untuk menyelesaikan, ikuti langkah-langkah pembersihan di Mengonfigurasi Active Directory agar VM dapat bergabung dengan domain secara otomatis.
Langkah berikutnya
- Baca tentang container Windows Server di GKE.
- Pelajari cara membuat cluster GKE menggunakan node pool Windows Server.
- Baca cara tambahan untuk men-deploy aplikasi Windows Server.
- Tinjau praktik terbaik kami untuk men-deploy hutan resource Active Directory di Google Cloud.