Azure Kubernetes Hizmeti (AKS) ile hizmet sorumluları

Azure API'leriyle etkileşim kurmak için AKS kümesi için Azure Active Directory (AD) hizmet sorumlusu veya yönetilen kimlik gerekir. Azure yük dengeleyici veya kapsayıcı kayıt defteri (ACR) gibi diğer Azure kaynaklarını dinamik olarak oluşturmak ve yönetmek için hizmet sorumlusu veya yönetilen kimlik gerekir.

Bu makalede, AKS kümeleriniz için bir hizmet sorumlusunun nasıl oluşturulacağı ve kullanılacağı gösterilmektedir.

Başlamadan önce

Azure AD hizmet sorumlusu oluşturmak için, Azure AD kiracınızla bir uygulamayı kaydetme ve uygulamanızı aboneliğinizdeki bir role atama izinlerinizin olması gerekir. Gerekli izinlere sahip değilseniz Azure AD veya abonelik yöneticinizden gerekli izinleri atamasını istemeniz veya AKS kümesiyle kullanmanız için bir hizmet sorumlusu oluşturma ön işlemlerini tamamlamanız gerekebilir.

Farklı bir Azure AD kiracısına yönelik bir hizmet sorumlusu kullanıyorsanız, kümeyi dağıtırken kullanılabilir izinlere yönelik ek noktalar vardır. Dizin bilgilerini okumak ve yazmak için uygun izinlere sahip olmadığınız olabilir. Daha fazla bilgi için bkz. Azure Active Directory'da varsayılan kullanıcı izinleri Azure Active Directory?

Ayrıca Azure CLI 2.0.59 veya sonraki bir sürümün yüklü ve yapılandırılmış olması gerekir. Sürümü bulmak için az --version komutunu çalıştırın. Yüklemeniz veya yükseltmeniz gerekirse, bkz. Azure CLI yükleme.

Otomatik olarak bir hizmet sorumlusu oluşturma ve kullanma

Azure portal az aks create komutunu kullanarak bir AKS kümesi oluşturursanız, Azure yönetilen bir kimlik oluşturur.

Aşağıdaki Azure CLI örneğinde bir hizmet sorumlusu belirtilmemiştir. Bu senaryoda Azure CLI, AKS kümesi için bir yönetilen kimlik oluşturur.

az aks create --name myAKSCluster --resource-group myResourceGroup

El ile hizmet sorumlusu oluşturma

El ile hizmet sorumlusunu Azure CLI ile oluşturmak için az ad sp create-for-rbac komutunu kullanın.

az ad sp create-for-rbac --name myAKSClusterServicePrincipal

Çıktı aşağıdaki örneğe benzerdir. Kendi appId ve password’lerinizi not edin. Bu değerler bir sonraki bölümde AKS kümesi oluşturduğunuzda kullanılır.

{
  "appId": "559513bd-0c19-4c1a-87cd-851a26afd5fc",
  "displayName": "myAKSClusterServicePrincipal",
  "name": "http://myAKSClusterServicePrincipal",
  "password": "e763725a-5eee-40e8-a466-dc88d980f415",
  "tenant": "72f988bf-86f1-41af-91ab-2d7cd011db48"
}

Bir AKS kümesi için hizmet sorumlusu belirtin

az aks create komutunu kullanarak bir AKS kümesi oluşturduğunuzda var olan bir hizmet sorumlusunu kullanmak üzere, az ad sp create-for-rbac komutunun çıktısından appId ve password’i belirtmek için --service-principal ve --client-secret parametrelerini kullanın:

az aks create \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --service-principal <appId> \
    --client-secret <password>

Not

Özelleştirilmiş gizli bilgi ile var olan bir hizmet sorumlusu kullanıyorsanız, gizli değerin en fazla 190 bayt olduğundan emin olur.

Azure portalı kullanarak bir AKS kümesi dağıtırsanız, Kubernetes kümesi oluştur iletişim kutusunun Kimlik doğrulaması sayfasında Hizmet sorumlusu yapılandır’ı seçin. Var olanı kullan’ı seçin ve aşağıdaki değerleri belirtin:

  • Hizmet sorumlusu istemci kimliği, appId’nizdir
  • Hizmet sorumlusu istemci parolası, parola değeridir

Azure Vote’a göz atma görüntüsü

Diğer Azure kaynaklarına erişim yetkisi

AKS kümesi hizmet sorumlusu, diğer kaynaklara erişmek için kullanılabilir. Örneğin AKS kümenizi mevcut bir Azure sanal ağ alt ağına dağıtmak veya Azure Container Registry 'a (ACR) bağlanmak için bu kaynaklara erişim yetkisi vermek için hizmet sorumlusuna temsilci olarak bağlanmanız gerekir.

İzinleri temsilci olarak atamak için az role assignment create komutunu kullanarak bir rol ataması oluşturun. kaynak appId grubu veya sanal ağ kaynağı gibi belirli bir kapsama attayabilirsiniz. Ardından rol, aşağıdaki örnekte gösterildiği gibi hizmet sorumlusuna kaynak üzerinde hangi izinlerin olduğunu tanımlar:

az role assignment create --assignee <appId> --scope <resourceScope> --role Contributor

Bir kaynağın tam kaynak kimliği --scope olmalıdır; örneğin, /subscriptions/ <guid> /resourceGroups/myResourceGroup veya /subscriptions/ <guid> /resourceGroups/myResourceGroupVnet/providers/Microsoft.Network/virtualNetworks/myVnet

Not

Katkıda Bulunan rol atamalarını düğüm kaynak grubundan kaldırdıysanız aşağıdaki işlemler başarısız olabilir. Sistem Yönetilen Kimliği kullanan kümelere izin verilmesinin doldurmak 60 dakika sürebilir.

Aşağıdaki bölümlerde, ortak temsilciler için gerekenler ayrıntılı olarak açıklanmaktadır.

Azure Container Registry

Kapsayıcı görüntü Azure Container Registry (ACR) kullanıyorsanız AKS kümenizin görüntü okuması ve çekmesi için hizmet sorumlusuna izinler verebilirsiniz. Şu anda önerilen yapılandırma, az aks create veya az aks update komutunu kullanarak kayıt defteriyle tümleştirilecek ve hizmet sorumlusuna uygun rolün atanmasıdır. Ayrıntılı adımlar için bkz. Azure Container Registry'Azure Kubernetes Service.

Sanal ağın, alt ağın veya genel IP adreslerinin başka bir kaynak grubunda olduğu gelişmiş ağ kullanabilirsiniz. Sanal ağ içindeki alt ağda Ağ Katılımcısı yerleşik rolünü attayın. Alternatif olarak, bu kaynak grubunda ağ kaynaklarına erişim izinleri olan özel bir rol oluşturabilirsiniz. Diğer ayrıntılar için bkz. AKS hizmeti izinleri.

Depolama

Başka bir kaynak grubunda var olan Disk kaynaklarına erişmeniz gerekir. Aşağıdaki rol izinleri kümesine birini attayabilirsiniz:

  • Özel bir rol oluşturun ve aşağıdaki rol izinlerini tanımlayın:
    • Microsoft.Compute/diskler/okuma
    • Microsoft.Compute/diskler/yazma
  • Veya kaynak Depolama Hesap Katkıda Bulunanı yerleşik rolünü attayın

Azure Container Instances

AKS ile tümleşmek için Virtual Kubelet kullanıyorsanız ve AKS kümesinden ayrı bir kaynak grubunda Azure Container Instances (ACI) çalıştırmayı seçerseniz AKS hizmet sorumlusuna ACI kaynak grubunda Katkıda Bulunan izinleri ver gerekir.

Diğer konular

AKS ve Azure AD hizmet sorumlularını kullanılırken aşağıdaki noktalara dikkat edin.

  • Kubernetes için hizmet sorumlusu, küme yapılandırmasının bir parçasıdır. Ancak, kümeyi dağıtmak için kimlik kullanmayın.
  • Varsayılan olarak, hizmet sorumlusu kimlik bilgileri bir yıl için geçerlidir. Hizmet sorumlusu kimlik bilgilerini dilediğiniz zaman güncelleştirebilir veya döndürebilirsiniz .
  • Her hizmet sorumlusunun bir Azure AD uygulamasıyla ilişkilendirilmiş olması gerekir. Bir Kubernetes kümesinin hizmet sorumlusu, geçerli herhangi bir Azure AD uygulama adıyla ilişkilendirilebilir (örneğin: https://www.contoso.org/example ). Uygulama URL'sinin gerçek bir uç nokta olması gerekmez.
  • Hizmet sorumlusu İstemci kimliğini belirttiğinizde appId değerini kullanın.
  • Kubernetes kümesindeki aracı düğümü VM 'lerinde hizmet sorumlusu kimlik bilgileri dosyada depolanır /etc/kubernetes/azure.json
  • Hizmet sorumlusunu otomatik olarak oluşturmak için az aks create komutunu kullandığınızda, hizmet sorumlusu kimlik bilgileri komutun çalıştırıldığı makinede ~/.azure/aksServicePrincipal.json dosyasına yazılır.
  • Ek AKS CLı komutlarına özel olarak bir hizmet sorumlusu geçirmezseniz, adresinde bulunan varsayılan hizmet sorumlusu ~/.azure/aksServicePrincipal.json kullanılır.
  • Ayrıca, isteğe bağlı olarak aksServicePrincipal. json dosyasını kaldırabilir ve AKS 'ler yeni bir hizmet sorumlusu oluşturur.
  • az aks create komutu tarafından oluşturulan bir AKS kümesini sildiğinizde, otomatik olarak oluşturulan hizmet sorumlusu silinmez.
    • Hizmet sorumlusunu silmek için, kümenizin Serviceprincipalprofile. ClientID ' yi sorgulayın ve az ad SP Deleteile silin. Aşağıdaki kaynak grubunu ve küme adlarını kendi değerlerinizle değiştirin:

      az ad sp delete --id $(az aks show -g myResourceGroup -n myAKSCluster --query servicePrincipalProfile.clientId -o tsv)
      

Sorun giderme

Bir AKS kümesi için hizmet sorumlusu kimlik bilgileri, Azure CLI tarafından önbelleğe alınır. Bu kimlik bilgilerinin geçerlilik süresi dolmuşsa, AKS kümelerini dağıtma hatalarıyla karşılaşırsınız. Az aks Create çalıştırılırken aşağıdaki hata iletisi, önbelleğe alınmış hizmet sorumlusu kimlik bilgileriyle ilgili bir sorun olduğunu gösteriyor olabilir:

Operation failed with status: 'Bad Request'.
Details: The credentials in ServicePrincipalProfile were invalid. Please see https://aka.ms/aks-sp-help for more details.
(Details: adal: Refresh request failed. Status Code = '401'.

Aşağıdaki komutu kullanarak kimlik bilgileri dosyasının yaşını denetleyin:

ls -la $HOME/.azure/aksServicePrincipal.json

Hizmet sorumlusu kimlik bilgileri için varsayılan süre sonu zamanı bir yıldır. Aksserviceprincipal. JSON dosyanız bir yıldan eskiyse dosyayı silin ve bır aks kümesini yeniden dağıtmayı deneyin.

Sonraki adımlar

Azure Active Directory hizmet sorumluları hakkında daha fazla bilgi için bkz. uygulama ve hizmet sorumlusu nesneleri.

Kimlik bilgilerini güncelleştirme hakkında daha fazla bilgi için bkz. AKS 'de hizmet sorumlusu için kimlik bilgilerini güncelleştirme veya döndürme.