Azure Kubernetes ağ ilkeleri

Ağ ilkeleri, tıpkı Ağ Güvenlik Grupları (NSG' ler) gibi podlar için mikro segmentasyon sağlar ve VM'ler için mikro segmentlere ayırma sağlar. Azure Ağ İlkesi Yöneticisi uygulaması standart Kubernetes ağ ilkesi belirtimini destekler. Etiketleri kullanarak bir pod grubu seçebilir ve bu podlara gelen ve bu podlardan gelen trafiği filtrelemek için giriş ve çıkış kurallarının listesini tanımlayabilirsiniz. Kubernetes belgelerinde Kubernetes ağ ilkeleri hakkında daha fazla bilgi edinin.

Diagram of Kubernetes network policies overview.

Azure Ağ İlkesi Yönetimi uygulaması, kapsayıcılar için sanal ağ tümleştirmesi sağlayan Azure CNI ile çalışır. Ağ İlkesi Yöneticisi Linux ve Windows Server'da desteklenir. Uygulama, Windows Server için Linux IPTable'larında veya Konak Ağ Hizmeti(HNS) ACLPolicies'te tanımlanan ilkelere göre izin ver ve reddet IP kurallarını yapılandırarak trafik filtrelemeyi zorlar.

Kubernetes kümeniz için güvenliği planlama

Kümeniz için güvenlik uygularken, ağ güvenlik gruplarını (NSG) kullanarak küme alt ağınıza giren ve kümenizden çıkan trafiği (Kuzey-Güney trafiği) filtreleyin. Kümenizdeki podlar arasındaki trafik için Azure Ağ İlkesi Yöneticisi'ni kullanın (Doğu-Batı trafiği).

Azure Ağ İlkesi Yöneticisi'ni kullanma

Azure Ağ İlkesi Yöneticisi, podlar için mikro segmentlere ayırma sağlamak için aşağıdaki yollarla kullanılabilir.

Azure Kubernetes Service (AKS)

Ağ İlkesi Yöneticisi AKS'de yerel olarak kullanılabilir ve küme oluşturma sırasında etkinleştirilebilir.

Daha fazla bilgi için bkz . Azure Kubernetes Service'te (AKS) ağ ilkelerini kullanarak podlar arasındaki trafiğin güvenliğini sağlama.

Azure'da kubernetes kümelerini kendiniz yapın (DIY)

DIY kümeleri için önce CNI eklentisini yükleyin ve kümedeki her sanal makinede etkinleştirin. Ayrıntılı yönergeler için bkz. Eklentiyi kendi dağıttığınız Kubernetes kümesi için dağıtma.

Küme dağıtıldıktan sonra aşağıdaki kubectl komutu çalıştırarak kümeye ayarlanan Azure Ağ İlkesi Yöneticisi daemon'unu indirip uygulayın.

Linux için:

kubectl apply -f https://raw.githubusercontent.com/Azure/azure-container-networking/master/npm/azure-npm.yaml

Windows için:

 kubectl apply -f https://raw.githubusercontent.com/Azure/azure-container-networking/master/npm/examples/windows/azure-npm.yaml

Çözüm ayrıca açık kaynak ve kod Azure Container Networking deposunda kullanılabilir.

Azure NPM ile ağ yapılandırmalarını izleme ve görselleştirme

Azure Ağ İlkesi Yöneticisi, yapılandırmalarınızı izlemenize ve daha iyi anlamanıza olanak sağlayan bilgilendirici Prometheus ölçümleri içerir. Azure portalında veya Grafana Labs'de yerleşik görselleştirmeler sağlar. Azure İzleyici'yi veya Prometheus sunucusunu kullanarak bu ölçümleri toplamaya başlayabilirsiniz.

Azure Ağ İlkesi Yöneticisi ölçümlerinin avantajları

Kullanıcılar daha önce yalnızca bir küme düğümünde çalıştırılan ve ipset komutları ile iptables ağ yapılandırmaları hakkında bilgi edinebiliyordu ve bu da ayrıntılı ve anlaşılması zor bir çıkış oluşturuyordu.

Genel olarak ölçümler şunları sağlar:

  • Belirli bir ip kümesindeki ilke sayısı, ACL kuralları, ipset'ler, ipset girdileri ve girdiler

  • Tek tek işletim sistemi çağrıları ve kubernetes kaynak olaylarını işlemek için yürütme süreleri (ortanca, 90. yüzdebirlik ve 99. yüzdebirlik)

  • Kubernetes kaynak olaylarını işlemeye yönelik hata bilgileri (bir işletim sistemi çağrısı başarısız olduğunda bu kaynak olayları başarısız olur)

Örnek ölçüm kullanım örnekleri

Prometheus AlertManager aracılığıyla uyarılar

Aşağıdaki gibi bu uyarılar için bir yapılandırmaya bakın.

  1. Ağ İlkesi Yöneticisi işletim sistemi çağrısında veya bir ağ ilkesini çevirirken bir hata olduğunda uyarır.

  2. Bir oluşturma olayı için değişiklikleri uygulamak için ortanca süre 100 milisaniyeden uzun olduğunda uyarır.

Grafana panomuz veya Azure İzleyici çalışma kitabımız aracılığıyla görselleştirmeler ve hata ayıklama
  1. İlkelerinizin kaç IPTable kuralı oluşturacağını görün (çok sayıda IPTable kuralına sahip olmak gecikme süresini biraz artırabilir).

  2. Küme sayılarını (örneğin, ACL'ler) yürütme süreleriyle ilişkilendirin.

  3. Belirli bir IPTable kuralındaki ipset'in insan dostu adını alın (örneğin, azure-npm-487392 temsil eder podlabel-role:database).

Desteklenen tüm ölçümler

Aşağıdaki listede desteklenen ölçümler yer alır. Herhangi bir quantile etiket , ve 0.99olası değerlerine 0.50.9sahiptir. Herhangi bir had_error etiket, işlemin başarılı mı yoksa başarısız mı olduğunu gösteren olası ve değerlerine falsetruesahiptir.

Ölçüm Adı Açıklama Prometheus Ölçüm Türü Etiketler
npm_num_policies ağ ilkesi sayısı Ölçer -
npm_num_iptables_rules IPTable kuralları sayısı Ölçer -
npm_num_ipsets IPSet sayısı Ölçer -
npm_num_ipset_entries tüm IPSet'lerdeki IP adresi girdilerinin sayısı Ölçer -
npm_add_iptables_rule_exec_time IPTables kuralı ekleme çalışma zamanı Özet quantile
npm_add_ipset_exec_time IPSet eklemek için çalışma zamanı Özet quantile
npm_ipset_counts (gelişmiş) her bir IPSet içindeki girdi sayısı GaugeVec set_name & set_hash
npm_add_policy_exec_time ağ ilkesi ekleme çalışma zamanı Özet quantile & had_error
npm_controller_policy_exec_time ağ ilkesini güncelleştirme/silme çalışma zamanı Özet quantile & had_error & operation (değerlerle update veya delete)
npm_controller_namespace_exec_time ad alanı oluşturma/güncelleştirme/silme çalışma zamanı Özet quantile& & had_erroroperation (, updateveya deletedeğerleriyle create)
npm_controller_pod_exec_time pod oluşturma/güncelleştirme/silme çalışma zamanı Özet quantile& & had_erroroperation (, updateveya deletedeğerleriyle create)

Ayrıca her "exec_time" Özet ölçümü için "exec_time_count" ve "exec_time_sum" ölçümleri de vardır.

Ölçümler kapsayıcılar için Azure İzleyici veya Prometheus aracılığıyla kazınabilir.

Azure İzleyici için ayarlama

İlk adım, Kubernetes kümeniz için kapsayıcılar için Azure İzleyici'yi etkinleştirmektir. Adımlar kapsayıcılar için Azure İzleyici'ye Genel Bakış bölümünde bulunabilir. Kapsayıcılar için Azure İzleyici'yi etkinleştirdikten sonra, Ağ İlkesi Yöneticisi tümleştirmesini ve Prometheus Ağ İlkesi Yöneticisi ölçümlerinin toplanmasını etkinleştirmek için Kapsayıcılar için Azure İzleyici ConfigMap'i yapılandırın.

Kapsayıcılar için Azure İzleyici ConfigMap'in Ağ İlkesi Yöneticisi ölçümlerini toplamaya yönelik ayarları içeren bir integrations bölümü vardır.

Bu ayarlar, ConfigMap'te varsayılan olarak devre dışı bırakılır. temel ayarını collect_basic_metrics = trueetkinleştirme, temel Ağ İlkesi Yöneticisi ölçümlerini toplar. Gelişmiş ayarın collect_advanced_metrics = true etkinleştirilmesi, temel ölçümlere ek olarak gelişmiş ölçümleri toplar.

ConfigMap'i düzenledikten sonra yerel olarak kaydedin ve ConfigMap'i aşağıdaki gibi kümenize uygulayın.

kubectl apply -f container-azm-ms-agentconfig.yaml

Aşağıdaki kod parçacığı, gelişmiş ölçüm koleksiyonuyla etkinleştirilen Ağ İlkesi Yöneticisi tümleştirmesini gösteren kapsayıcılar için Azure İzleyici ConfigMap'ten alınıyor.

integrations: |-
    [integrations.azure_network_policy_manager]
        collect_basic_metrics = false
        collect_advanced_metrics = true

Gelişmiş ölçümler isteğe bağlıdır ve bunları açmak temel ölçüm toplamayı otomatik olarak açar. Gelişmiş ölçümler şu anda yalnızca Network Policy Manager_ipset_countsiçerir.

Yapılandırma haritasında kapsayıcılar için Azure İzleyici koleksiyon ayarları hakkında daha fazla bilgi edinin.

Azure İzleyici için görselleştirme seçenekleri

Ağ İlkesi Yöneticisi ölçüm koleksiyonu etkinleştirildikten sonra, kapsayıcı içgörülerini kullanarak Azure portalında veya Grafana'da ölçümleri görüntüleyebilirsiniz.

Azure portalında küme içgörüleri altında görüntüleme

Azure portalını açın. Kümenizin içgörülerine girdikten sonra Çalışma Kitapları'na gidin ve Ağ İlkesi Yöneticisi (Ağ İlkesi Yöneticisi) Yapılandırması'nı açın.

Çalışma kitabını görüntülemenin yanı sıra, İçgörüler bölümünün altındaki "Günlükler"deki Prometheus ölçümlerini doğrudan sorgulayabilirsiniz. Örneğin, bu sorgu toplanan tüm ölçümleri döndürür.

| where TimeGenerated > ago(5h)
| where Name contains "npm_"

Ayrıca ölçümler için günlük analizini doğrudan sorgulayabilirsiniz. Daha fazla bilgi için bkz . Log Analytics Sorgularını Kullanmaya Başlama.

Grafana panosunda görüntüleme

Grafana Sunucunuzu ayarlayın ve burada açıklandığı gibi bir log analytics veri kaynağı yapılandırın. Ardından Log Analytics arka ucu olan Grafana Panosu'nu Grafana Labs'inize aktarabilirsiniz.

Panoda Azure Çalışma Kitabı'na benzer görseller bulunur. Analizler Metrics tablosundan grafiğe paneller ekleyebilir ve Ağ İlkesi Yöneticisi ölçümlerini görselleştirebilirsiniz.

Prometheus sunucusu için ayarlama

Bazı kullanıcılar kapsayıcılar için Azure İzleyici yerine Prometheus sunucusuyla ölçüm toplamayı seçebilir. Ağ İlkesi Yöneticisi ölçümlerini toplamak için yalnızca kazıma yapılandırmanıza iki iş eklemeniz gerekir.

Prometheus sunucusu yüklemek için kümenize şu helm deposını ekleyin:

helm repo add stable https://kubernetes-charts.storage.googleapis.com
helm repo update

ardından bir sunucu ekleyin

helm install prometheus stable/prometheus -n monitoring \
--set pushgateway.enabled=false,alertmanager.enabled=false, \
--set-file extraScrapeConfigs=prometheus-server-scrape-config.yaml

burada prometheus-server-scrape-config.yaml şunlardan oluşur:

- job_name: "azure-npm-node-metrics"
  metrics_path: /node-metrics
  kubernetes_sd_configs:
  - role: node
  relabel_configs:
  - source_labels: [__address__]
    action: replace
    regex: ([^:]+)(?::\d+)?
    replacement: "$1:10091"
    target_label: __address__
- job_name: "azure-npm-cluster-metrics"
  metrics_path: /cluster-metrics
  kubernetes_sd_configs:
  - role: service
  relabel_configs:
  - source_labels: [__meta_kubernetes_namespace]
    regex: kube-system
    action: keep
  - source_labels: [__meta_kubernetes_service_name]
    regex: npm-metrics-cluster-service
    action: keep
# Comment from here to the end to collect advanced metrics: number of entries for each IPSet
  metric_relabel_configs:
  - source_labels: [__name__]
    regex: npm_ipset_counts
    action: drop

Ayrıca işi aşağıdaki içerikle değiştirebilir azure-npm-node-metrics veya Kubernetes podları için önceden var olan bir işe dahil edebilirsiniz:

- job_name: "azure-npm-node-metrics-from-pod-config"
  metrics_path: /node-metrics
  kubernetes_sd_configs:
  - role: pod
  relabel_configs:
  - source_labels: [__meta_kubernetes_namespace]
    regex: kube-system
    action: keep
  - source_labels: [__meta_kubernetes_pod_annotationpresent_azure_Network Policy Manager_scrapeable]
    action: keep
  - source_labels: [__address__]
    action: replace
    regex: ([^:]+)(?::\d+)?
    replacement: "$1:10091"
    target_label: __address__

AlertManager için uyarıları ayarlama

Prometheus sunucusu kullanıyorsanız, bunun gibi bir AlertManager ayarlayabilirsiniz. Aşağıda, daha önce açıklanan iki uyarı kuralı için örnek bir yapılandırma verilmişti:

groups:
- name: npm.rules
  rules:
  # fire when Network Policy Manager has a new failure with an OS call or when translating a Network Policy (suppose there's a scraping interval of 5m)
  - alert: AzureNetwork Policy ManagerFailureCreatePolicy
    # this expression says to grab the current count minus the count 5 minutes ago, or grab the current count if there was no data 5 minutes ago
    expr: (npm_add_policy_exec_time_count{had_error='true'} - (npm_add_policy_exec_time_count{had_error='true'} offset 5m)) or npm_add_policy_exec_time_count{had_error='true'}
    labels:
      severity: warning
      addon: azure-npm
    annotations:
      summary: "Azure Network Policy Manager failed to handle a policy create event"
      description: "Current failure count since Network Policy Manager started: {{ $value }}"
  # fire when the median time to apply changes for a pod create event is more than 100 milliseconds.
  - alert: AzurenpmHighControllerPodCreateTimeMedian
    expr: topk(1, npm_controller_pod_exec_time{operation="create",quantile="0.5",had_error="false"}) > 100.0
    labels:
      severity: warning
      addon: azure-Network Policy Manager
    annotations:
      summary: "Azure Network Policy Manager controller pod create time median > 100.0 ms"
      # could have a simpler description like the one for the alert above,
      # but this description includes the number of pod creates that were handled in the past 10 minutes, 
      # which is the retention period for observations when calculating quantiles for a Prometheus Summary metric
      description: "value: [{{ $value }}] and observation count: [{{ printf `(npm_controller_pod_exec_time_count{operation='create',pod='%s',had_error='false'} - (npm_controller_pod_exec_time_count{operation='create',pod='%s',had_error='false'} offset 10m)) or npm_controller_pod_exec_time_count{operation='create',pod='%s',had_error='false'}` $labels.pod $labels.pod $labels.pod | query | first | value }}] for pod: [{{ $labels.pod }}]"

Prometheus için görselleştirme seçenekleri

Prometheus Sunucusu kullandığınızda yalnızca Grafana panosu desteklenir.

Henüz yapmadıysanız Grafana sunucunuzu ayarlayın ve bir Prometheus veri kaynağı yapılandırın. Ardından Prometheus arka ucu olan Grafana Panomuzu Grafana Labs'inize aktarabilirsiniz.

Bu panonun görselleri, kapsayıcı içgörüleri/log analytics arka ucu olan panoyla aynıdır.

Örnek panolar

Kapsayıcı içgörüleri (CI) ve Grafana'da Ağ İlkesi Yöneticisi ölçümleri için bazı örnek panolar aşağıda verilmiştir.

CI özet sayıları

Screenshot of Azure Workbook summary counts.

Zaman içindeki CI sayıları

Screenshot of Azure Workbook counts over time.

CI IPSet girdileri

Screenshot of Azure Workbook IPSet entries.

CI çalışma zamanı nicelleri

Screenshot of Azure Workbook runtime quantiles.

Grafana pano özet sayıları

Screenshot Grafana Dashboard summary counts.

Grafana pano sayısı zaman içinde

Screenshot of Grafana Dashboard counts over time.

Grafana panosu IPSet girişleri

Screenshot of Grafana Dashboard IPSet entries.

Grafana pano çalışma zamanı nicelleri

Screenshot of Grafana Dashboard runtime quantiles.

Sonraki adımlar