Aracılığıyla paylaş


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.

  1. 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
    
  2. 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-namebelirtmeyin--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:

  1. komutunu kullanarak az identity create bir kubelet kimliği oluşturun.

    az identity create --name myIdentity --resource-group myResourceGroup
    
  2. 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)
    
  3. 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

  1. 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 
    
  2. 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-ipve service-cidr parametrelerini de eklemeniz docker-bridge-addressgerekebilir.

    • 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'e kube-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
      }
      
  3. 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

  1. 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
    
  2. 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.

  1. 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"]
    
  2. 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
    
  3. 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

  1. 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
    
  2. komutunu kullanarak gmsa-demo.yaml dosyasındaki kubectl apply değişiklikleri uygulayın.

    kubectl apply -f gmsa-demo.yaml
    
  3. 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çin gmsa-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
    
  4. EXTERNAL-IP Adres bekleme durumundan gerçek bir genel IP adresine değiştiğinde kubectl 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
    
  5. Hizmetin dış IP adresine gmsa-demo bir web tarayıcısı açın.

  6. 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: Negotiateemin 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.yamlve ö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.