Share via


Microsoft Entra kimlik doğrulamasını kullanarak Prometheus verilerini Azure İzleyici'ye gönderme

Bu makalede, Microsoft Entra kimlik doğrulamasını kullanarak Azure Kubernetes Service (AKS) kümenizde veya Azure Arc özellikli Kubernetes kümenizde çalışan kendi kendine yönetilen bir Prometheus sunucusundan veri göndermek için uzaktan yazmanın nasıl ayarlanacağı açıklanır.

Küme yapılandırmaları

Bu makale aşağıdaki küme yapılandırmaları için geçerlidir:

  • Azure Kubernetes Service kümesi
  • Azure Arc özellikli Kubernetes kümesi
  • Farklı bir bulutta veya şirket içinde çalışan Kubernetes kümesi

Not

AKS kümesi veya Azure Arc özellikli kubernetes kümesi için yönetilen kimlik doğrulaması kullanmanızı öneririz. Daha fazla bilgi için bkz . Prometheus için Azure İzleyici yönetilen hizmeti yönetilen kimlik için uzaktan yazma.

Önkoşullar

Desteklenen sürümler

  • Microsoft Entra ID uygulama kimlik doğrulaması için v2.48'den büyük Prometheus sürümleri gereklidir.

Azure İzleyici çalışma alanı

Bu makale, Prometheus ölçümlerini bir Azure İzleyici çalışma alanına göndermeyi kapsar. Azure İzleyici çalışma alanı oluşturmak için bkz . Azure İzleyici çalışma alanını yönetme.

İzinler

Bu makaledeki adımları tamamlamak için küme veya kaynak için Yönetici istrator izinleri gereklidir.

Microsoft Entra Id için bir uygulama ayarlama

Microsoft Entra kimlik doğrulamasını kullanarak bir uygulama için Prometheus uzaktan yazma özelliğini ayarlama işlemi aşağıdaki görevleri tamamlayı içerir:

  1. Microsoft Entra ID ile bir uygulamayı kaydetme.
  2. Microsoft Entra uygulamasının istemci kimliğini alın.
  3. Çalışma alanı veri toplama kuralındaki İzleme Ölçümleri Yayımcısı rolünü uygulamaya atayın.
  4. Bir Azure anahtar kasası oluşturun ve bir sertifika oluşturun.
  5. Microsoft Entra uygulamasına bir sertifika ekleyin.
  6. Küme için bir CSI sürücüsü ve depolama alanı ekleyin.
  7. Uzaktan yazma ayarlamak için bir sepet kapsayıcısı dağıtın.

Görevler aşağıdaki bölümlerde açıklanmıştır.

Microsoft Entra Id ile uygulama kaydetme

Bir uygulamayı Microsoft Entra Id'ye kaydetme ve hizmet sorumlusu oluşturma adımlarını tamamlayın.

Microsoft Entra uygulamasının istemci kimliğini alma

  1. Azure portalında Microsoft Entra Id menüsüne gidin ve Uygulama kayıtları'yi seçin.
  2. Uygulama listesinde, kayıtlı uygulamanın Uygulama (istemci) kimliği değerini kopyalayın.

Microsoft Entra uygulamasının uygulama veya istemci kimliğini gösteren ekran görüntüsü.

Çalışma alanı veri toplama kuralındaki İzleme Ölçümleri Yayımcısı rolünü uygulamaya atama

Uygulamaya, Azure İzleyici çalışma alanınızla ilişkili veri toplama kuralında İzleme Ölçümleri Yayımcısı rolü atanmalıdır.

  1. Azure İzleyici çalışma alanınızın kaynak menüsünde Genel Bakış'ı seçin. Veri toplama kuralı için bağlantıyı seçin.

    Azure İzleyici çalışma alanı tarafından kullanılan veri toplama kuralını gösteren ekran görüntüsü.

  2. Veri toplama kuralının kaynak menüsünde Erişim denetimi (IAM) öğesini seçin.

  3. Ekle'yi ve ardından Rol ataması ekle'yi seçin.

    Access denetim sayfalarına rol ataması eklemeyi gösteren ekran görüntüsü.

  4. İzleme Ölçümleri Yayımcısı rolünü ve ardından İleri'yi seçin.

    Rol atamalarının listesini gösteren ekran görüntüsü.

  5. Kullanıcı, grup veya hizmet sorumlusu'nun ardından Üye seç'i seçin. Oluşturduğunuz uygulamayı seçin ve ardından Seç'i seçin.

    Uygulamanın seçilmesini gösteren ekran görüntüsü.

  6. Rol atamasını tamamlamak için Gözden geçir ve ata'yı seçin.

Azure anahtar kasası oluşturma ve sertifika oluşturma

  1. Henüz bir Azure anahtar kasanız yoksa bir kasa oluşturun.
  2. Key Vault'a sertifika ekleme'deki yönergeleri kullanarak bir sertifika oluşturun.
  3. Sertifikayı Key Vault'tan dışarı aktarma yönergelerini kullanarak sertifikayı CER biçiminde indirin.

Microsoft Entra uygulamasına sertifika ekleme

  1. Microsoft Entra uygulamanızın kaynak menüsünde Sertifikalar ve gizli diziler'i seçin.

  2. Sertifikalar sekmesinde Sertifikayı karşıya yükle'yi seçin ve indirdiğiniz sertifikayı seçin.

    Bir Microsoft Entra uygulaması için sertifika yükleme işlemini gösteren ekran görüntüsü.

Uyarı

Sertifikaların son kullanma tarihi vardır. Sertifikaları geçerli tutmak kullanıcının sorumluluğundadır.

Küme için bir CSI sürücüsü ve depolama alanı ekleme

Not

Azure Key Vault CSI sürücü yapılandırması, pod'a bağlı bir sertifika almanın yollarından yalnızca biridir. Uzaktan yazma kapsayıcısı, uzaktan yazmayı ayarlamak için yalnızca Sepet kapsayıcısı dağıtma adımındaki değer için <AZURE_CLIENT_CERTIFICATE_PATH> poddaki bir sertifikanın yerel yoluna ihtiyaç duyar.

Bu adım yalnızca kümenizi oluştururken Gizli Dizi deposu için Azure Key Vault Sağlayıcısı CSI Sürücüsünü açmadıysanız gereklidir.

  1. Kümeniz için Gizli Dizi Deposu CSI Sürücüsü için Azure Key Vault Sağlayıcısı'nı açmak için aşağıdaki Azure CLI komutunu çalıştırın:

    az aks enable-addons --addons azure-keyvault-secrets-provider --name <aks-cluster-name> --resource-group <resource-group-name>
    
  2. Kimliğe anahtar kasasına erişim vermek için şu komutları çalıştırın:

    # show client id of the managed identity of the cluster
    az aks show -g <resource-group> -n <cluster-name> --query addonProfiles.azureKeyvaultSecretsProvider.identity.clientId -o tsv
    
    # set policy to access keys in your key vault
    az keyvault set-policy -n <keyvault-name> --key-permissions get --spn <identity-client-id>
    
    # set policy to access secrets in your key vault
    az keyvault set-policy -n <keyvault-name> --secret-permissions get --spn <identity-client-id>
    
    # set policy to access certs in your key vault
    az keyvault set-policy -n <keyvault-name> --certificate-permissions get --spn <identity-client-id>
    
  3. Aşağıdaki YAML'yi secretproviderclass.yml adlı bir dosyaya kaydederek oluşturunSecretProviderClass. anahtar kasanızdan alınacak , keyvaultName, tenantIdve nesnelerinin değerlerini userAssignedIdentityIDdeğiştirin. Hangi değerlerin kullanılacağı hakkında bilgi için bkz . Gizli Dizi Deposu CSI Sürücüsü için Azure Key Vault Sağlayıcısı'na erişmek için kimlik sağlama.

    # This is a SecretProviderClass example using user-assigned identity to access your key vault
    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: azure-kvname-user-msi
    spec:
      provider: azure
      parameters:
        usePodIdentity: "false"
        useVMManagedIdentity: "true"          # Set to true for using managed identity
        userAssignedIdentityID: <client-id>   # Set the client ID of the user-assigned managed identity to use
        keyvaultName: <key-vault-name>        # Set to the name of your key vault
        cloudName: ""                         # [OPTIONAL for Azure] if not provided, the Azure environment defaults to AzurePublicCloud
        objects:  |
          array:
            - |
              objectName: <name-of-cert>
              objectType: secret              # object types: secret, key, or cert
              objectFormat: pfx
              objectEncoding: base64
              objectVersion: ""
        tenantId: <tenant-id>                 # The tenant ID of the key vault
    
  4. Kümenizde aşağıdaki komutu çalıştırarak uygulayın SecretProviderClass :

    kubectl apply -f secretproviderclass.yml
    

Uzaktan yazma ayarlamak için sepet kapsayıcısı dağıtma

  1. Aşağıdaki YAML'yi kopyalayın ve bir dosyaya kaydedin. YAML, dinleme bağlantı noktası olarak 8081 numaralı bağlantı noktasını kullanır. Farklı bir bağlantı noktası kullanıyorsanız YAML'de bu değeri değiştirin.

    prometheus:
      prometheusSpec:
        externalLabels:
          cluster: <CLUSTER-NAME>  
    
        ##	Azure Managed Prometheus currently exports some default mixins in Grafana.  
        ##  These mixins are compatible with data scraped by Azure Monitor agent on your 
        ##  Azure Kubernetes Service cluster. These mixins aren't compatible with Prometheus 
        ##  metrics scraped by the Kube Prometheus stack. 
        ##  To make these mixins compatible, uncomment the remote write relabel configuration below:
        ##	writeRelabelConfigs:
        ##	  - sourceLabels: [metrics_path]
        ##	    regex: /metrics/cadvisor
        ##	    targetLabel: job
        ##	    replacement: cadvisor
        ##	    action: replace
        ##	  - sourceLabels: [job]
        ##	    regex: 'node-exporter'
        ##	    targetLabel: job
        ##	    replacement: node
        ##	    action: replace  
        ## https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_write
        remoteWrite:
          - url: 'http://localhost:8081/api/v1/write'
        
        # Additional volumes on the output StatefulSet definition.
        # Required only for Microsoft Entra ID based auth
        volumes:
          - name: secrets-store-inline
            csi:
              driver: secrets-store.csi.k8s.io
              readOnly: true
              volumeAttributes:
                secretProviderClass: azure-kvname-user-msi
        containers:
          - name: prom-remotewrite
            image: <CONTAINER-IMAGE-VERSION>
            imagePullPolicy: Always
            # Required only for Microsoft Entra ID based auth
            volumeMounts:
              - name: secrets-store-inline
                mountPath: /mnt/secrets-store
                readOnly: true
            ports:
              - name: rw-port
                containerPort: 8081
            livenessProbe:
              httpGet:
                path: /health
                port: rw-port
                initialDelaySeconds: 10
                timeoutSeconds: 10
            readinessProbe:
              httpGet:
                path: /ready
                port: rw-port
                initialDelaySeconds: 10
                timeoutSeconds: 10
            env:
              - name: INGESTION_URL
                value: '<INGESTION_URL>'
              - name: LISTENING_PORT
                value: '8081'
              - name: IDENTITY_TYPE
                value: aadApplication
              - name: AZURE_CLIENT_ID
                value: '<APP-REGISTRATION-CLIENT-ID>'
              - name: AZURE_TENANT_ID
                value: '<TENANT-ID>'
              - name: AZURE_CLIENT_CERTIFICATE_PATH
                value: /mnt/secrets-store/<CERT-NAME>
              - name: CLUSTER
                value: '<CLUSTER-NAME>'
    
  2. YAML dosyasındaki aşağıdaki değerleri değiştirin:

    Value Açıklama
    <CLUSTER-NAME> AKS kümenizin adı.
    <CONTAINER-IMAGE-VERSION> mcr.microsoft.com/azuremonitor/containerinsights/ciprod/prometheus-remote-write/images:prom-remotewrite-20240507.1
    Uzaktan yazma kapsayıcı görüntüsü sürümü.
    <INGESTION-URL> Azure İzleyici çalışma alanının Genel Bakış sayfasından Ölçüm alımı uç noktasının değeri.
    <APP-REGISTRATION -CLIENT-ID> Uygulamanızın istemci kimliği.
    <TENANT-ID> Microsoft Entra uygulamasının kiracı kimliği.
    <CERT-NAME> Sertifikanın adı.
    <CLUSTER-NAME> Prometheus'un üzerinde çalıştığı kümenin adı.
  3. Azure Cloud Shell'i açın ve YAML dosyasını karşıya yükleyin.

  4. YAML dosyasını uygulamak ve Prometheus yapılandırmanızı güncelleştirmek için Helm'i kullanın:

    # set the context to your cluster 
    az aks get-credentials -g <aks-rg-name> -n <aks-cluster-name> 
    
    # use Helm to update your remote write config 
    helm upgrade -f <YAML-FILENAME>.yml prometheus prometheus-community/kube-prometheus-stack -namespace <namespace where Prometheus pod resides> 
    

Doğrulama ve sorun giderme

Doğrulama ve sorun giderme bilgileri için bkz. Prometheus uzaktan yazma için uzaktan yazma ve Azure İzleyici yönetilen hizmeti sorunlarını giderme.

Sonraki adımlar