Azure Kubernetes-netwerkbeleid

Netwerkbeleid biedt microsegmentatie voor pods, net zoals netwerkbeveiligingsgroepen (NSG's) bieden microsegmentatie voor VM's. De implementatie van Azure Network Policy Manager ondersteunt de standaardspecificatie van Kubernetes-netwerkbeleid. U kunt labels gebruiken om een groep pods te selecteren en een lijst met regels voor inkomend en uitgaand verkeer te definiëren om verkeer naar en van deze pods te filteren. Meer informatie over het Kubernetes-netwerkbeleid vindt u in de Kubernetes-documentatie.

Diagram of Kubernetes network policies overview.

De implementatie van Azure Network Policy Management werkt met de Azure CNI die integratie van virtuele netwerken biedt voor containers. Network Policy Manager wordt ondersteund in Linux en Windows Server. De implementatie dwingt verkeer filteren af door IP-regels voor toestaan en weigeren te configureren op basis van het gedefinieerde beleid in Linux IPTables of Host Network Service (HNS) ACLPolicies voor Windows Server.

Beveiliging plannen voor uw Kubernetes-cluster

Wanneer u beveiliging voor uw cluster implementeert, gebruikt u netwerkbeveiligingsgroepen (NSG's) om verkeer te filteren dat uw clustersubnet binnenkomt en verlaat (noord-zuid-verkeer). Gebruik Azure Network Policy Manager voor verkeer tussen pods in uw cluster (oost-west-verkeer).

Azure Network Policy Manager gebruiken

Azure Network Policy Manager kan op de volgende manieren worden gebruikt om microsegmentatie te bieden voor pods.

Azure Kubernetes Service (AKS)

Network Policy Manager is systeemeigen beschikbaar in AKS en kan worden ingeschakeld op het moment dat het cluster wordt gemaakt.

Zie Verkeer tussen pods beveiligen met behulp van netwerkbeleid in Azure Kubernetes Service (AKS) voor meer informatie.

Doe het zelf (DIY) Kubernetes-clusters in Azure

Voor DIY-clusters installeert u eerst de CNI-invoegtoepassing en schakelt u deze in op elke virtuele machine in een cluster. Zie Deploy plug-in for a Kubernetes cluster (Invoegtoepassing implementeren voor een Kubernetes-cluster) voor gedetailleerde instructies.

Zodra het cluster is geïmplementeerd, voert u de volgende kubectl opdracht uit om de Azure Network Policy Manager-daemon die is ingesteld op het cluster te downloaden en toe te passen.

Voor Linux:

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

Voor Windows:

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

De oplossing is ook open source en de code is beschikbaar in de Azure Container Networking-opslagplaats.

Netwerkconfiguraties bewaken en visualiseren met Azure NPM

Azure Network Policy Manager bevat informatieve Prometheus-metrische gegevens waarmee u uw configuraties kunt bewaken en beter kunt begrijpen. Het biedt ingebouwde visualisaties in Azure Portal of Grafana Labs. U kunt beginnen met het verzamelen van deze metrische gegevens met behulp van Azure Monitor of een Prometheus-server.

Voordelen van metrische gegevens van Azure Network Policy Manager

Gebruikers konden eerder alleen meer te weten komen over hun netwerkconfiguratie met iptables en ipset opdrachten die worden uitgevoerd in een clusterknooppunt, wat een uitgebreide en moeilijk te begrijpen uitvoer oplevert.

Over het algemeen bieden de metrische gegevens het volgende:

  • Aantal beleidsregels, ACL-regels, ipsets, ipset-vermeldingen en vermeldingen in een bepaalde ipset

  • Uitvoeringstijden voor afzonderlijke aanroepen van het besturingssysteem en voor het verwerken van kubernetes-resource-gebeurtenissen (mediaan, 90e percentiel en 99e percentiel)

  • Foutinformatie voor het verwerken van kubernetes-resource-gebeurtenissen (deze resource-gebeurtenissen mislukken wanneer een aanroep van het besturingssysteem mislukt)

Gebruiksvoorbeelden voor metrische gegevens

Waarschuwingen via een Prometheus AlertManager

Bekijk als volgt een configuratie voor deze waarschuwingen .

  1. Waarschuwing wanneer Network Policy Manager een fout heeft met een besturingssysteemaanroep of bij het vertalen van een netwerkbeleid.

  2. Waarschuwing wanneer de mediaantijd voor het toepassen van wijzigingen voor een create-gebeurtenis meer dan 100 milliseconden bedroeg.

Visualisaties en foutopsporing via ons Grafana-dashboard of Azure Monitor-werkmap
  1. Bekijk hoeveel IPTables-regels uw beleid maakt (met een groot aantal IPTables-regels kan de latentie enigszins toenemen).

  2. Koppel clusteraantallen (bijvoorbeeld ACL's) aan uitvoeringstijden.

  3. Haal de mensvriendelijke naam van een ipset op in een bepaalde IPTables-regel (bijvoorbeeld azure-npm-487392 vertegenwoordigt).podlabel-role:database

Alle ondersteunde metrische gegevens

De volgende lijst bevat ondersteunde metrische gegevens. Elk quantile label heeft mogelijke waarden 0.5, 0.9en 0.99. Elk had_error label heeft mogelijke waarden false en truegeeft aan of de bewerking is geslaagd of mislukt.

Naam meetwaarde Beschrijving Prometheus Metric Type Etiketten
npm_num_policies aantal netwerkbeleidsregels Meter -
npm_num_iptables_rules aantal IPTables-regels Meter -
npm_num_ipsets aantal IPSets Meter -
npm_num_ipset_entries aantal IP-adresvermeldingen in alle IPSets Meter -
npm_add_iptables_rule_exec_time runtime voor het toevoegen van een IPTables-regel Samenvatting quantile
npm_add_ipset_exec_time runtime voor het toevoegen van een IPSet Samenvatting quantile
npm_ipset_counts (geavanceerd) aantal vermeldingen binnen elke afzonderlijke IPSet MeterVec set_name & set_hash
npm_add_policy_exec_time runtime voor het toevoegen van een netwerkbeleid Samenvatting quantile & had_error
npm_controller_policy_exec_time runtime voor het bijwerken/verwijderen van een netwerkbeleid Samenvatting quantileoperation & had_error (met waarden update of delete)
npm_controller_namespace_exec_time runtime voor het maken/bijwerken/verwijderen van een naamruimte Samenvatting quantile&& operation ( had_error met waardencreate, updateof delete)
npm_controller_pod_exec_time runtime voor het maken/bijwerken/verwijderen van een pod Samenvatting quantile&& operation ( had_error met waardencreate, updateof delete)

Er zijn ook metrische gegevens 'exec_time_count' en 'exec_time_sum' voor elke metrische samenvattingswaarde 'exec_time'.

De metrische gegevens kunnen worden geschraapt via Azure Monitor voor containers of via Prometheus.

Instellen voor Azure Monitor

De eerste stap is het inschakelen van Azure Monitor voor containers voor uw Kubernetes-cluster. De stappen vindt u in Azure Monitor voor containers, overzicht. Zodra Azure Monitor voor containers is ingeschakeld, configureert u de Azure Monitor voor containers ConfigMap om integratie van Network Policy Manager en verzameling van metrische gegevens van Prometheus Network Policy Manager in te schakelen.

Azure Monitor voor containers ConfigMap bevat een integrations sectie met instellingen voor het verzamelen van metrische gegevens van Network Policy Manager.

Deze instellingen zijn standaard uitgeschakeld in de ConfigMap. Als u de basisinstelling collect_basic_metrics = trueinschakelt, worden metrische basisgegevens van Network Policy Manager verzameld. Bij het inschakelen van de geavanceerde instelling collect_advanced_metrics = true worden geavanceerde metrische gegevens verzameld naast basisgegevens.

Nadat u de ConfigMap hebt bewerkt, slaat u deze lokaal op en past u de ConfigMap als volgt toe op uw cluster.

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

Het volgende codefragment is afkomstig van azure Monitor voor containers ConfigMap, waarin de integratie van Network Policy Manager is ingeschakeld met geavanceerde verzameling metrische gegevens.

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

Geavanceerde metrische gegevens zijn optioneel en als u ze inschakelt, worden metrische basisgegevens automatisch ingeschakeld. Geavanceerde metrische gegevens bevatten momenteel alleen Network Policy Manager_ipset_counts.

Meer informatie over verzamelingsinstellingen voor Azure Monitor voor containers in configuratietoewijzing.

Visualisatieopties voor Azure Monitor

Zodra de verzameling metrische gegevens van Network Policy Manager is ingeschakeld, kunt u de metrische gegevens in Azure Portal bekijken met behulp van containerinzichten of in Grafana.

Weergeven in Azure Portal onder inzichten voor het cluster

Open Azure Portal. Ga in de inzichten van uw cluster naar Workbooks en open Network Policy Manager (Network Policy Manager) Configuration.

Naast het weergeven van de werkmap kunt u ook rechtstreeks query's uitvoeren op de metrische Prometheus-gegevens in Logboeken onder de sectie Inzichten. Deze query retourneert bijvoorbeeld alle metrische gegevens die worden verzameld.

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

U kunt ook rechtstreeks query's uitvoeren op Log Analytics voor de metrische gegevens. Zie Aan de slag met Log Analytics-query's voor meer informatie.

Weergeven in Grafana-dashboard

Stel uw Grafana Server in en configureer een log analytics-gegevensbron, zoals hier wordt beschreven. Importeer vervolgens Grafana Dashboard met een Log Analytics-back-end in uw Grafana Labs.

Het dashboard heeft visuals die vergelijkbaar zijn met de Azure-werkmap. U kunt deelvensters toevoegen om metrische gegevens van Network Policy Manager uit de insightsmetrics-tabel te visualiseren.

Instellen voor Prometheus-server

Sommige gebruikers kunnen ervoor kiezen om metrische gegevens te verzamelen met een Prometheus-server in plaats van Azure Monitor voor containers. U hoeft slechts twee taken toe te voegen aan uw scrape-configuratie om metrische gegevens van Network Policy Manager te verzamelen.

Als u een Prometheus-server wilt installeren, voegt u deze Helm-opslagplaats toe aan uw cluster:

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

voeg vervolgens een server toe

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

waarbij prometheus-server-scrape-config.yaml bestaat uit:

- 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

U kunt de azure-npm-node-metrics taak ook vervangen door de volgende inhoud of opnemen in een bestaande taak voor Kubernetes-pods:

- 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__

Waarschuwingen instellen voor AlertManager

Als u een Prometheus-server gebruikt, kunt u een AlertManager zo instellen. Hier volgt een voorbeeldconfiguratie voor de twee eerder beschreven waarschuwingsregels:

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 }}]"

Visualisatieopties voor Prometheus

Wanneer u een Prometheus-server gebruikt, wordt alleen het Grafana-dashboard ondersteund.

Als u dat nog niet hebt gedaan, stelt u uw Grafana-server in en configureert u een Prometheus-gegevensbron. Importeer vervolgens ons Grafana-dashboard met een Prometheus-back-end in uw Grafana Labs.

De visuals voor dit dashboard zijn identiek aan het dashboard met een back-end voor containerinzichten/log analytics.

Voorbeelddashboards

Hieronder vindt u een voorbeelddashboard voor metrische gegevens van Network Policy Manager in CONTAINER Insights (CI) en Grafana.

AANTAL CI-samenvattingen

Screenshot of Azure Workbook summary counts.

AANTAL CI's in de loop van de tijd

Screenshot of Azure Workbook counts over time.

CI IPSet-vermeldingen

Screenshot of Azure Workbook IPSet entries.

CI Runtime-kwantielen

Screenshot of Azure Workbook runtime quantiles.

Samenvattingen van Grafana-dashboards

Screenshot Grafana Dashboard summary counts.

Grafana-dashboard telt in de loop van de tijd

Screenshot of Grafana Dashboard counts over time.

IPSet-vermeldingen voor Grafana-dashboard

Screenshot of Grafana Dashboard IPSet entries.

Kwantielen van grafana-dashboardruntime

Screenshot of Grafana Dashboard runtime quantiles.

Volgende stappen