Azure Kubernetes Service (AKS) kümenizdeki Windows Server düğümleriniz için Grup Yönetilen Hizmet Hesaplarını (GMSA) etkinleştirme
Grup Yönetilen Hizmet Hesapları (GMSA), otomatik parola yönetimi, basitleştirilmiş hizmet asıl adı (SPN) yönetimi ve yönetimi diğer yöneticilere devretme olanağı sağlayan birden çok sunucu için yönetilen bir etki alanı hesabıdır. Azure Kubernetes Service (AKS) ile Windows Server düğümlerinizde GMSA'yı etkinleştirebilirsiniz. Bu, Windows Server düğümlerinde çalışan kapsayıcıların GMSA ile tümleştirilmesine ve GMSA tarafından yönetilmesine olanak tanır.
Önkoşullar
- Kubernetes 1.19 veya üzeri. Sürümünüzü denetlemek için bkz . Kullanılabilir yükseltmeleri denetleme. Sürümünüzü yükseltmek için bkz . AKS kümesini yükseltme.
- Azure CLI sürüm 2.35.0 veya üzeri. Sürümü bulmak için
az --version
komutunu çalıştırın. Yüklemeniz veya yükseltmeniz gerekirse, bkz. Azure CLI yükleme. - AKS kümenizde etkinleştirilmiş yönetilen kimlikler .
- Azure Key Vault oluşturma veya güncelleştirme izinleri.
- Active Directory Etki Alanı Hizmeti veya şirket içi Active Directory üzerinde GMSA yapılandırma izinleri.
- Etki alanı denetleyicisinde Active Directory Web Hizmetleri etkinleştirilmiş olmalı ve AKS kümesi tarafından 9389 numaralı bağlantı noktasında erişilebilir olmalıdır.
Not
Microsoft ayrıca AKS üzerinde gMSA'nın yapılandırılması için amaca yönelik olarak oluşturulmuş bir PowerShell modülü de sağlar. Daha fazla bilgi için bkz . Azure Kubernetes Service üzerinde gMSA.
Active Directory etki alanı denetleyicisinde GMSA'yi yapılandırma
AKS ile GMSA kullanmak için, etki alanı denetleyicinizde yapılandırılan GMSA kimlik bilgilerine erişmek için standart bir etki alanı kullanıcı kimlik bilgilerine ihtiyacınız vardır. Etki alanı denetleyicinizde GMSA'yı yapılandırmak için bkz . Grup Tarafından Yönetilen Hizmet Hesaplarını kullanmaya başlama. Standart etki alanı kullanıcı kimlik bilgileri için, GMSA kimlik bilgilerine erişimi olduğu sürece mevcut bir kullanıcıyı kullanabilir veya yeni bir kullanıcı oluşturabilirsiniz.
Önemli
Active Directory Etki Alanı Hizmeti veya şirket içi Active Directory kullanmanız gerekir. Şu anda GMSA'yı AKS kümesiyle yapılandırmak için Microsoft Entra Id'yi kullanamazsınız.
Standart etki alanı kullanıcı kimlik bilgilerini Azure Key Vault'ta depolama
AKS kümeniz, etki alanı denetleyicisinden GMSA kimlik bilgilerine erişmek için standart etki alanı kullanıcı kimlik bilgilerini kullanır. AKS kümesi için bu kimlik bilgilerine güvenli erişim sağlamak için bunları Azure Key Vault'ta depolamanız gerekir.
Henüz bir Azure anahtar kasanız yoksa komutunu kullanarak
az keyvault create
bir kasa oluşturun.az keyvault create --resource-group myResourceGroup --name myGMSAVault
komutunu kullanarak standart etki alanı kullanıcı kimlik bilgilerini anahtar kasanızda gizli dizi olarak depolayın
az keyvault secret set
. Aşağıdaki örnek, etki alanı kullanıcı kimlik bilgilerini myGMSAVault anahtar kasasında GMSADomainUserCred anahtarıyla depolar.az keyvault secret set --vault-name myGMSAVault --name "GMSADomainUserCred" --value "$Domain\\$DomainUsername:$DomainUserPassword"
Not
Etki alanı için Tam Etki Alanı Adı'nı kullandığınızdan emin olun.
İsteğe bağlı: Özel DNS ile özel bir sanal ağ kullanma
ETKI alanı denetleyicinizi AKS kümesi tarafından ulaşılabilmesi için DNS aracılığıyla yapılandırmanız gerekir. Ağınızı ve DNS'nizi AKS kümenizin dışında yapılandırarak kümenizin etki alanı denetleyicisine erişmesini sağlayabilirsiniz. Alternatif olarak, etki alanı denetleyicinize erişim sağlamak üzere AKS kümenizde özel bir DNS ile özel bir sanal ağ yapılandırmak için Azure CNI'yi kullanabilirsiniz. Daha fazla bilgi için bkz . Azure Kubernetes Service'te (AKS) Azure CNI ağını yapılandırma.
İsteğe bağlı: Birden fazla DNS sunucusu yapılandırma
AKS kümenizde Windows GMSA için birden fazla DNS sunucusu yapılandırmak istiyorsanız veya v--gmsa-root-domain-name
belirtmeyin--gmsa-dns-server
. Bunun yerine, Özel DNS'yi seçip DNS sunucularını ekleyerek sanal ağa birden çok DNS sunucusu ekleyebilirsiniz.
İsteğe bağlı: Kümeniz için kendi kubelet kimliğinizi kullanın
AKS kümesine anahtar kasanıza erişim sağlamak için küme kubelet kimliğinin anahtar kasanıza erişmesi gerekir. Yönetilen kimlik etkin bir küme oluşturduğunuzda, varsayılan olarak otomatik olarak bir kubelet kimliği oluşturulur.
Küme oluşturulduktan sonra kimlik için anahtar kasanıza erişim verebilir veya aşağıdaki adımları kullanarak küme oluşturmadan önce kullanmak üzere kendi kimliğinizi oluşturabilirsiniz:
komutunu kullanarak
az identity create
bir kubelet kimliği oluşturun.az identity create --name myIdentity --resource-group myResourceGroup
komutunu kullanarak
az identity list
kimliği alın ve MANAGED_ID adlı bir değişken olarak ayarlayın.MANAGED_ID=$(az identity list --query "[].id" -o tsv)
komutunu kullanarak anahtar kasanıza kimlik erişimi verin
az keyvault set-policy
.az keyvault set-policy --name "myGMSAVault" --object-id $MANAGED_ID --secret-permissions get
Yeni aks kümesinde GMSA'yı etkinleştirme
Küme oluşturma sırasında kullanılacak yönetici kimlik bilgilerini oluşturun. Aşağıdaki komutlar sizden bir kullanıcı adı ister ve sonraki bir komutta kullanmak üzere WINDOWS_USERNAME olarak ayarlar.
echo "Please enter the username to use as administrator credentials for Windows Server nodes on your cluster: " && read WINDOWS_USERNAME
Komutunu kullanarak
az aks create
aşağıdaki parametrelerle bir AKS kümesi oluşturun:--enable-windows-gmsa
: Küme için GMSA'yi etkinleştirir.--gmsa-dns-server
: DNS sunucusunun IP adresi.--gmsa-root-domain-name
: DNS sunucusunun kök etki alanı adı.
DNS_SERVER=<IP address of DNS server> ROOT_DOMAIN_NAME="contoso.com" az aks create \ --resource-group myResourceGroup \ --name myAKSCluster \ --vm-set-type VirtualMachineScaleSets \ --network-plugin azure \ --load-balancer-sku standard \ --windows-admin-username $WINDOWS_USERNAME \ --enable-windows-gmsa \ --gmsa-dns-server $DNS_SERVER \ --gmsa-root-domain-name $ROOT_DOMAIN_NAME \ --generate-ssh-keys
Not
Özel bir sanal ağ kullanıyorsanız, parametresini kullanarak
vnet-subnet-id
sanal ağ kimliğini belirtmeniz ve yapılandırmanıza bağlı olarak ,dns-service-ip
veservice-cidr
parametrelerini de eklemenizdocker-bridge-address
gerekebilir.Kubelet kimliği için kendi kimliğinizi oluşturduysanız, kimliğinizi belirtmek için parametresini
assign-kubelet-identity
kullanın.ve
--gmsa-root-domain-name
parametrelerini belirttiğinizde--gmsa-dns-server
, ConfigMap'ekube-system/coredns
bir DNS iletme kuralı eklenir. Bu kural, podlardan dns$ROOT_DOMAIN_NAME
isteklerini öğesine iletir$DNS_SERVER
.$ROOT_DOMAIN_NAME:53 { errors cache 30 log forward . $DNS_SERVER }
komutunu kullanarak
az aks nodepool add
bir Windows Server düğüm havuzu ekleyin.az aks nodepool add \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --os-type Windows \ --name npwin \ --node-count 1
Mevcut kümede GMSA'yı etkinleştirme
Komutunu kullanarak Windows Server düğümleri ve yönetilen kimlikler etkinleştirildiğinde mevcut bir kümede GMSA'yı
az aks update
etkinleştirin.az aks update \ --resource-group myResourceGroup \ --name myAKSCluster \ --enable-windows-gmsa \ --gmsa-dns-server $DNS_SERVER \ --gmsa-root-domain-name $ROOT_DOMAIN_NAME
Kubelet kimliği için anahtar kasanıza erişim izni verme
Not
Kubelet kimliği için kendi kimliğinizi sağladıysanız bu adımı atlayın.
komutunu kullanarak kubelet kimliği için anahtar kasanıza erişim izni verin
az keyvault set-policy
.MANAGED_ID=$(az aks show -g myResourceGroup -n myAKSCluster --query "identityProfile.kubeletidentity.objectId" -o tsv) az keyvault set-policy --name "myGMSAVault" --object-id $MANAGED_ID --secret-permissions get
GMSA cred belirtimlerini yükleme
komutunu kullanarak Kubernetes kümenize bağlanacak şekilde
az aks get-credentials
yapılandırınkubectl
.az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
gmsa-spec.yaml adlı yeni bir YAML oluşturun ve aşağıdaki YAML'ye yapıştırın. Yer tutucuları kendi değerlerinizle değiştirdiğinizden emin olun.
apiVersion: windows.k8s.io/v1 kind: GMSACredentialSpec metadata: name: aks-gmsa-spec # This name can be changed, but it will be used as a reference in the pod spec credspec: ActiveDirectoryConfig: GroupManagedServiceAccounts: - Name: $GMSA_ACCOUNT_USERNAME Scope: $NETBIOS_DOMAIN_NAME - Name: $GMSA_ACCOUNT_USERNAME Scope: $DNS_DOMAIN_NAME HostAccountConfig: PluginGUID: '{CCC2A336-D7F3-4818-A213-272B7924213E}' PortableCcgVersion: "1" PluginInput: "ObjectId=$MANAGED_ID;SecretUri=$SECRET_URI" # SECRET_URI takes the form https://$akvName.vault.azure.net/secrets/$akvSecretName CmsPlugins: - ActiveDirectory DomainJoinConfig: DnsName: $DNS_DOMAIN_NAME DnsTreeName: $DNS_ROOT_DOMAIN_NAME Guid: $AD_DOMAIN_OBJECT_GUID MachineAccountName: $GMSA_ACCOUNT_USERNAME NetBiosName: $NETBIOS_DOMAIN_NAME Sid: $GMSA_SID
Not
AKS, sürümünden apiVersion
GMSACredentialSpec
windows.k8s.io/v1alpha1
sürümüne 20230903 sürümüne windows.k8s.io/v1
yükseltti.
gmsa-role.yaml adlı yeni bir YAML oluşturun ve aşağıdaki YAML'ye yapıştırın.
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: aks-gmsa-role rules: - apiGroups: ["windows.k8s.io"] resources: ["gmsacredentialspecs"] verbs: ["use"] resourceNames: ["aks-gmsa-spec"]
gmsa-role-binding.yaml adlı yeni bir YAML oluşturun ve aşağıdaki YAML'ye yapıştırın.
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: allow-default-svc-account-read-on-aks-gmsa-spec namespace: default subjects: - kind: ServiceAccount name: default namespace: default roleRef: kind: ClusterRole name: aks-gmsa-role apiGroup: rbac.authorization.k8s.io
komutunu kullanarak gmsa-spec.yaml, gmsa-role.yaml ve gmsa-role-binding.yaml değişikliklerini
kubectl apply
uygulayın.kubectl apply -f gmsa-spec.yaml kubectl apply -f gmsa-role.yaml kubectl apply -f gmsa-role-binding.yaml
GMSA yüklemesini doğrulama
gmsa-demo.yaml adlı yeni bir YAML oluşturun ve aşağıdaki YAML'ye yapıştırın.
--- kind: ConfigMap apiVersion: v1 metadata: labels: app: gmsa-demo name: gmsa-demo namespace: default data: run.ps1: | $ErrorActionPreference = "Stop" Write-Output "Configuring IIS with authentication." # Add required Windows features, since they are not installed by default. Install-WindowsFeature "Web-Windows-Auth", "Web-Asp-Net45" # Create simple ASP.NET page. New-Item -Force -ItemType Directory -Path 'C:\inetpub\wwwroot\app' Set-Content -Path 'C:\inetpub\wwwroot\app\default.aspx' -Value 'Authenticated as <B><%=User.Identity.Name%></B>, Type of Authentication: <B><%=User.Identity.AuthenticationType%></B>' # Configure IIS with authentication. Import-Module IISAdministration Start-IISCommitDelay (Get-IISConfigSection -SectionPath 'system.webServer/security/authentication/windowsAuthentication').Attributes['enabled'].value = $true (Get-IISConfigSection -SectionPath 'system.webServer/security/authentication/anonymousAuthentication').Attributes['enabled'].value = $false (Get-IISServerManager).Sites[0].Applications[0].VirtualDirectories[0].PhysicalPath = 'C:\inetpub\wwwroot\app' Stop-IISCommitDelay Write-Output "IIS with authentication is ready." C:\ServiceMonitor.exe w3svc --- apiVersion: apps/v1 kind: Deployment metadata: labels: app: gmsa-demo name: gmsa-demo namespace: default spec: replicas: 1 selector: matchLabels: app: gmsa-demo template: metadata: labels: app: gmsa-demo spec: securityContext: windowsOptions: gmsaCredentialSpecName: aks-gmsa-spec containers: - name: iis image: mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019 imagePullPolicy: IfNotPresent command: - powershell args: - -File - /gmsa-demo/run.ps1 volumeMounts: - name: gmsa-demo mountPath: /gmsa-demo volumes: - configMap: defaultMode: 420 name: gmsa-demo name: gmsa-demo nodeSelector: kubernetes.io/os: windows --- apiVersion: v1 kind: Service metadata: labels: app: gmsa-demo name: gmsa-demo namespace: default spec: ports: - port: 80 targetPort: 80 selector: app: gmsa-demo type: LoadBalancer
komutunu kullanarak gmsa-demo.yaml dosyasındaki
kubectl apply
değişiklikleri uygulayın.kubectl apply -f gmsa-demo.yaml
komutunu kullanarak
kubectl get service
örnek uygulamanın IP adresini alın.kubectl get service gmsa-demo --watch
Başlangıçta,
EXTERNAL-IP
hizmet içingmsa-demo
beklemede olarak gösterilir:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE gmsa-demo LoadBalancer 10.0.37.27 <pending> 80:30572/TCP 6s
EXTERNAL-IP
Adres bekleme durumundan gerçek bir genel IP adresine değiştiğindekubectl
izleme işlemini durdurmak için kullanınCTRL-C
.Aşağıdaki örnek çıktıda hizmete atanmış geçerli bir genel IP adresi gösterilmektedir:
gmsa-demo LoadBalancer 10.0.37.27 EXTERNAL-IP 80:30572/TCP 2m
Hizmetin dış IP adresine
gmsa-demo
bir web tarayıcısı açın.ve parolası ile kimlik doğrulaması yapıp gördüğünüzden
$NETBIOS_DOMAIN_NAME\$AD_USERNAME
Authenticated as $NETBIOS_DOMAIN_NAME\$AD_USERNAME, Type of Authentication: Negotiate
emin olun.
Var olan bir kümede GMSA'yi devre dışı bırakma
komutunu kullanarak Windows Server düğümleriyle var olan bir kümede GMSA'yi
az aks update
devre dışı bırakın.az aks update \ --resource-group myResourceGroup \ --name myAKSCluster \ --disable-windows-gmsa
Not
Az aks update komutunu kullanarak mevcut bir kümede GMSA'yı yeniden etkinleştirebilirsiniz.
Sorun giderme
Sayfa yüklenirken kimlik doğrulaması istenmez
Sayfa yüklenirse ancak kimlik doğrulaması yapmanız istenmezse, podunuzun günlüklerini görüntülemek ve kimlik doğrulamasıyla IIS'nin hazır olduğunu gördüğünüzü doğrulamak için komutunu kullanınkubectl logs POD_NAME
.
Not
Windows kapsayıcıları varsayılan olarak kubectl günlüklerini göstermez. Windows kapsayıcılarının günlükleri göstermesini sağlamak için Windows görüntünüze Günlük İzleyicisi aracını eklemeniz gerekir. Daha fazla bilgi için bkz . Windows Kapsayıcı Araçları.
Sayfayı yüklemeye çalışırken bağlantı zaman aşımı
Sayfayı yüklemeye çalışırken bağlantı zaman aşımı alırsanız komutunu kullanarak kubectl get pods --watch
örnek uygulamanın çalıştığını doğrulayın. Bazen örnek uygulama podu çalışmadan önce örnek uygulama hizmetinin dış IP adresi kullanılabilir.
Pod başlatılamıyor ve pod olaylarında winapi hatası görünüyor
Podunuz komutu çalıştırdıktan kubectl get pods --watch
ve birkaç dakika bekledikten sonra başlamazsa komutunu kullanın kubectl describe pod POD_NAME
. Pod olaylarında winapi hatası görürseniz, bu büyük olasılıkla GMSA cred belirtim yapılandırmanızda bir hatadır. gmsa-spec.yaml dosyasındaki tüm değiştirme değerlerinin doğru olduğunu doğrulayın, yeniden çalıştırın kubectl apply -f gmsa-spec.yaml
ve örnek uygulamayı yeniden dağıtın.
Sonraki adımlar
Daha fazla bilgi için bkz . Azure Kubernetes Service (AKS) ile ilgili Windows kapsayıcılarıyla ilgili dikkat edilmesi gerekenler.
Azure Kubernetes Service