Поделиться через


Настройка наблюдаемости сети контейнеров для Службы Azure Kubernetes (AKS) — Управляемые Azure Prometheus и Grafana.

В этой статье показано, как настроить наблюдаемость сети контейнеров для Службы Azure Kubernetes (AKS) с помощью Управляемого Prometheus и Grafana, а также собственного Prometheus и Grafana, и визуализировать собранные метрики.

С помощью наблюдения за сетью контейнеров можно собирать данные о сетевом трафике кластеров AKS. Она обеспечивает централизованную платформу для мониторинга работоспособности приложений и сети. В настоящее время метрики хранятся в Prometheus и Grafana можно использовать для их визуализации. Наблюдательность сети контейнеров также обеспечивает возможность включения Hubble. Эти возможности поддерживаются как для кластеров Cilium, так и для кластеров, отличных от Cilium.

Наблюдение за сетью контейнеров является одной из функций расширенных сетевых служб контейнеров. Дополнительные сведения о службах расширенной сетевой интеграции контейнеров для Azure Kubernetes Service (AKS) см. в статье Что такое службы расширенной сетевой интеграции контейнеров для Azure Kubernetes Service (AKS)?

Это важно

Начиная с 30 ноября 2025 года AKS больше не будет поддерживать или предоставлять обновления безопасности для Azure Linux 2.0. Начиная с 31 марта 2026 года образы узлов будут удалены, и вы не сможете масштабировать пулы узлов. Выполните миграцию в поддерживаемую версию Linux Azure, обновив пулы узлов до поддерживаемой версии Kubernetes или выполните миграцию на osSku AzureLinux3. Дополнительные сведения см. в статье [Устаревание] Пулы узлов Azure Linux 2.0 в AKS.

Prerequisites

  • Минимальная версия Azure CLI, необходимая для действий, описанных в этой статье, — 2.56.0. Чтобы узнать версию, выполните команду az --version. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.

Включение расширенных служб сетей контейнеров

Для продолжения необходимо иметь кластер AKS с включенными расширенными службами сетей контейнеров.

Команда az aks create с флагом --enable-acnsрасширенных сетевых служб контейнеров создает новый кластер AKS со всеми функциями расширенных сетевых служб контейнеров. Эти функции охватывают следующие возможности:

  • Наблюдение за сетью контейнеров. Предоставляет аналитические сведения о сетевом трафике. Дополнительные сведения см. в разделе "Наблюдаемость сети контейнеров".

  • Безопасность сети контейнеров: предлагает такие функции безопасности, как фильтрация полного доменного имени. Дополнительные сведения см. в статье "Безопасность сети контейнеров".

Note

Кластеры с плоскостью данных Cilium поддерживают наблюдаемость сети контейнеров и безопасность сети контейнеров, начиная с Kubernetes версии 1.29.

# Set an environment variable for the AKS cluster name. Make sure to replace the placeholder with your own value.
export CLUSTER_NAME="<aks-cluster-name>"

# Create an AKS cluster
az aks create \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --generate-ssh-keys \
    --location eastus \
    --max-pods 250 \
    --network-plugin azure \
    --network-plugin-mode overlay \
    --network-dataplane cilium \
    --node-count 2 \
    --pod-cidr 192.168.0.0/16 \
    --kubernetes-version 1.29 \
    --enable-acns

Включение продвинутых сетевых служб для контейнеров в существующем кластере

Команда az aks update с флагом "Расширенные сетевые службы контейнеров" --enable-acnsобновляет существующий кластер AKS со всеми функциями расширенных сетевых служб контейнеров, включая наблюдение за сетями контейнеров и функцию безопасности сети контейнеров .

Note

Только кластеры с плоскостем данных Cilium поддерживают функции безопасности сети контейнеров расширенных сетевых служб контейнеров.

az aks update \
    --resource-group $RESOURCE_GROUP \
    --name $CLUSTER_NAME \
    --enable-acns

Получение учетных данных кластера

После получения учетных данных кластера с помощью az aks get-credentials команды.

az aks get-credentials --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP

Управляемые Azure Prometheus и Grafana

Пропустить этот раздел, если используется BYO Prometheus и Grafana

Используйте следующий пример, чтобы установить и включить Prometheus и Grafana для кластера AKS.

Создание ресурса Azure Monitor

#Set an environment variable for the Grafana name. Make sure to replace the placeholder with your own value.
export AZURE_MONITOR_NAME="<azure-monitor-name>"

# Create Azure monitor resource
az resource create \
    --resource-group $RESOURCE_GROUP \
    --namespace microsoft.monitor \
    --resource-type accounts \
    --name $AZURE_MONITOR_NAME \
    --location eastus \
    --properties '{}'

Создание управляемого экземпляра Grafana в Azure

Используйте az grafana create для создания экземпляра Grafana. Имя экземпляра Grafana должно быть уникальным.

# Set an environment variable for the Grafana name. Make sure to replace the placeholder with your own value.
export GRAFANA_NAME="<grafana-name>"

# Create Grafana instance
az grafana create \
    --name $GRAFANA_NAME \
    --resource-group $RESOURCE_GROUP 

Размещение идентификаторов ресурсов Azure Managed Grafana и Azure Monitor в переменных

Используйте az grafana show , чтобы поместить идентификатор ресурса Grafana в переменную. Используйте az resource show , чтобы поместить идентификатор ресурса Azure Monitor в переменную. Замените myGrafana названием вашей инстанции Grafana.

grafanaId=$(az grafana show \
                --name $GRAFANA_NAME \
                --resource-group $RESOURCE_GROUP \
                --query id \
                --output tsv)
azuremonitorId=$(az resource show \
                    --resource-group $RESOURCE_GROUP \
                    --name $AZURE_MONITOR_NAME \
                    --resource-type "Microsoft.Monitor/accounts" \
                    --query id \
                    --output tsv)

Используйте az aks update , чтобы связать ресурсы Azure Monitor и Grafana с кластером AKS.

az aks update \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --enable-azure-monitor-metrics \
    --azure-monitor-workspace-resource-id $azuremonitorId \
    --grafana-resource-id $grafanaId

Visualization

Визуализация с использованием Azure Managed Grafana

Пропустить этот шаг при использовании BYO Grafana

Note

hubble_flows_processed_total Метрика по умолчанию не удаляется из-за высокой кратности метрик в крупных кластерах. Из-за этого панели мониторинга потоков Pods имеют панели с отсутствующими данными. Чтобы включить эту метрику и заполнить отсутствующие данные, необходимо изменить ama-metrics-settings-configmap. В частности, обновите раздел списка метрик по умолчанию. Следуйте приведённым ниже шагам, чтобы обновить configmap:

  1. Скачайте обновлённую ama-metrics-settings-configmap. (https://github.com/Azure/prometheus-collector/blob/main/otelcollector/configmaps/ama-metrics-settings-configmap.yaml)
  2. Найдите networkobservabilityHubble = ""
  3. Измените его на networkobservabilityHubble = hubble.*.
  4. Теперь метрики потока Pod должны заполняться.

Чтобы узнать больше о минимальном поглощении, см. документацию по минимальному поглощению.


  1. Убедитесь, что модули pod Azure Monitor выполняются с помощью kubectl get pods команды.

    kubectl get pods -o wide -n kube-system | grep ama-
    

    Выходные данные должны выглядеть примерно так:

    ama-metrics-5bc6c6d948-zkgc9          2/2     Running   0 (21h ago)   26h
    ama-metrics-ksm-556d86b5dc-2ndkv      1/1     Running   0 (26h ago)   26h
    ama-metrics-node-lbwcj                2/2     Running   0 (21h ago)   26h
    ama-metrics-node-rzkzn                2/2     Running   0 (21h ago)   26h
    ama-metrics-win-node-gqnkw            2/2     Running   0 (26h ago)   26h
    ama-metrics-win-node-tkrm8            2/2     Running   0 (26h ago)   26h
    
  2. Мы создали примеры панелей мониторинга. Их можно найти в папке "Панели мониторинга > Azure Managed Prometheus ". Они имеют такие имена, как <name>. Набор панелей мониторинга включает:

    • Кластеры: отображаются метрики уровня узла для кластеров.
    • DNS (кластер): отображаются метрики DNS в кластере или выборе узлов.
    • DNS (рабочая нагрузка): отображаются метрики DNS для указанной рабочей нагрузки (такие как Pod-ы DaemonSet или Deployment, например, CoreDNS).
    • Drops (Рабочая нагрузка): отображает отбрасывания в/из указанной рабочей нагрузки (например, Pods развертывания или DaemonSet).
    • Потоки pod (пространство имен): показывают потоки пакетов L4/L7 к и из указанного пространства имен (то есть pod в этом пространстве имен).
    • Потоки Pod (рабочая нагрузка): отображают потоки пакетов L4/L7 в/из указанной рабочей нагрузки (например, Pod для Deployment или DaemonSet).

Визуализация с помощью BYO Grafana

Пропустите этот шаг, если используется управляемая Grafana от Azure.

  1. Добавьте следующее задание на сбор данных в существующую конфигурацию Prometheus и перезапустите сервер Prometheus.

    - job_name: networkobservability-hubble
      kubernetes_sd_configs:
        - role: pod
      relabel_configs:
        - target_label: cluster
          replacement: myAKSCluster
          action: replace
        - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_pod_label_k8s_app]
          regex: kube-system;(retina|cilium)
          action: keep
        - source_labels: [__address__]
          action: replace
          regex: ([^:]+)(?::\d+)?
          replacement: $1:9965
          target_label: __address__
        - source_labels: [__meta_kubernetes_pod_node_name]
          target_label: instance
          action: replace
      metric_relabel_configs:
        - source_labels: [__name__]
          regex: '|hubble_dns_queries_total|hubble_dns_responses_total|hubble_drop_total|hubble_tcp_flags_total' # if desired, add |hubble_flows_processed_total
          action: keep
    
  2. В разделе Targets Prometheus проверьте наличие network-obs-pods.

  3. Войдите в Grafana и импортируйте следующие примеры панелей мониторинга с помощью следующих идентификаторов:

    • Кластеры: отображаются метрики уровня узла для кластеров. (Идентификатор: 18814)
    • DNS (кластер): отображаются метрики DNS в кластере или выборе узлов. (Идентификатор: 20925)
    • DNS (рабочая нагрузка): отображаются метрики DNS для указанной рабочей нагрузки (такие как Pod-ы DaemonSet или Deployment, например, CoreDNS). (Идентификатор: [20926] https://grafana.com/grafana/dashboards/20926-kubernetes-networking-dns-workload/)
    • Потери (рабочая нагрузка): показывает потери в/из указанной рабочей нагрузки (например, Pods для Deployment или DaemonSet). (Идентификатор: 20927).
    • Потоки pod (пространство имен): показывают потоки пакетов L4/L7 к и из указанного пространства имен (то есть pod в этом пространстве имен). (Идентификатор: 20928)
    • Потоки Pod (рабочая нагрузка): отображают потоки пакетов L4/L7 в/из указанной рабочей нагрузки (например, Pod для Deployment или DaemonSet). (Идентификатор: 20929)

    Note

    • В зависимости от параметров экземпляров Prometheus/Grafana некоторые панели мониторинга требуют определенных настроек для отображения всех данных.
    • Cilium в настоящее время не поддерживает метрики и панели мониторинга DNS.

Очистка ресурсов

Если вы не планируете использовать это приложение, удалите другие ресурсы, созданные в этой статье, с помощью az group delete команды.

  az group delete --name $RESOURCE_GROUP

Дальнейшие шаги

Из этой статьи вы узнали, как установить и включить наблюдаемость сети контейнеров для кластера AKS.