Nastavení pozorovatelnosti služby Container Network pro Azure Kubernetes Service (AKS) – Azure managed Prometheus a Grafana
V tomto článku se dozvíte, jak nastavit pozorovatelnost služby Container Network pro Azure Kubernetes Service (AKS) pomocí spravovaných prometheus a Grafana a BYO Prometheus a Grafana a vizualizovat sešrotované metriky.
Pozorovatelnost kontejnerové sítě můžete použít ke shromažďování dat o síťovém provozu clusterů AKS. Umožňuje centralizovanou platformu pro monitorování stavu aplikace a sítě. V současné době se metriky ukládají v systému Prometheus a Grafana k jejich vizualizaci. Pozorovatelnost služby Container Network také nabízí možnost povolit Hubble. Tyto funkce jsou podporovány jak pro shluky Cilium, tak i pro clustery bez Cilium.
Pozorovatelnost služby Container Network je jednou z funkcí služby Advanced Container Networking Services. Další informace o Advanced Container Networking Services pro Azure Kubernetes Service (AKS) najdete v tématu Co je Advanced Container Networking Services pro Azure Kubernetes Service (AKS)?.
Požadavky
- Účet Azure s aktivním předplatným. Pokud ho nemáte, vytvořte si bezplatný účet před tím, než začnete.
Použijte prostředí Bash v Azure Cloud Shellu. Další informace najdete v tématu Rychlý start pro Bash v Azure Cloud Shellu.
Pokud dáváte přednost místnímu spouštění referenčních příkazů rozhraní příkazového řádku, nainstalujte Azure CLI. Pokud používáte Windows nebo macOS, zvažte spuštění Azure CLI v kontejneru Docker. Další informace najdete v tématu Jak spustit Azure CLI v kontejneru Dockeru.
Pokud používáte místní instalaci, přihlaste se k Azure CLI pomocí příkazu az login. Pokud chcete dokončit proces ověřování, postupujte podle kroků zobrazených na terminálu. Další možnosti přihlášení najdete v tématu Přihlášení pomocí Azure CLI.
Po zobrazení výzvy nainstalujte rozšíření Azure CLI při prvním použití. Další informace o rozšířeních najdete v tématu Využití rozšíření v Azure CLI.
Spuštěním příkazu az version zjistěte verzi a závislé knihovny, které jsou nainstalované. Pokud chcete upgradovat na nejnovější verzi, spusťte az upgrade.
- Minimální verze Azure CLI vyžadovaná pro kroky v tomto článku je 2.56.0. Verzi zjistíte spuštěním příkazu
az --version
. Pokud potřebujete instalaci nebo upgrade, přečtěte si téma Instalace Azure CLI.
Instalace rozšíření Azure CLI aks-Preview
Nainstalujte nebo aktualizujte rozšíření Azure CLI ve verzi Preview pomocí az extension add
příkazu nebo az extension update
příkazu.
# Install the aks-preview extension
az extension add --name aks-preview
# Update the extension to make sure you have the latest version installed
az extension update --name aks-preview
Povolení pokročilých síťových služeb kontejnerů
Abyste mohli pokračovat, musíte mít cluster AKS s povolenou službou Advanced Container Networking Services .
Příkaz az aks create
s příznakem --enable-acns
Advanced Container Networking Services vytvoří nový cluster AKS se všemi funkcemi Advanced Container Networking Services. Mezi tyto funkce patří:
Pozorovatelnost služby Container Network: Poskytuje přehled o síťovém provozu. Další informace najdete v tématu Pozorovatelnost služby Container Network.
Zabezpečení sítě kontejnerů: Nabízí funkce zabezpečení, jako je filtrování plně kvalifikovaných názvů domén. Další informace najdete v tématu Container Network Security.
Poznámka:
Clustery s rovinou dat Cilium podporují zabezpečení Container Network Observability a Container Network počínaje Kubernetes verze 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
Povolení pokročilých služeb Container Networking Services v existujícím clusteru
Příkaz az aks update
s příznakem --enable-acns
Advanced Container Networking Services aktualizuje existující cluster AKS se všemi funkcemi Advanced Container Networking Services, které zahrnují pozorovatelnost služby Container Network a funkci Zabezpečení sítě kontejnerů.
Poznámka:
Pouze clustery s rovinou dat Cilium podporují funkce zabezpečení kontejnerové sítě služby Advanced Container Networking Services.
az aks update \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--enable-acns
Získání přihlašovacích údajů clusteru
Jakmile pomocí příkazu získáte přihlašovací údaje ke clusteru az aks get-credentials
.
az aks get-credentials --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP
Azure managed Prometheus a Grafana
Pokud používáte BYO Prometheus a Grafana, přeskočte tuto část.
Pomocí následujícího příkladu nainstalujte a povolte Prometheus a Grafana pro cluster AKS.
Vytvoření prostředku Azure Monitoru
#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 '{}'
Vytvoření instance Azure Managed Grafana
K vytvoření instance Grafany použijte příkaz az grafana create . Název instance Grafana musí být jedinečný.
# 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
Umístění ID prostředků Azure Managed Grafana a Azure Monitoru do proměnných
Pomocí příkazu az grafana show umístěte ID prostředku Grafana do proměnné. Pomocí příkazu az resource show umístěte ID prostředku služby Azure Monitor do proměnné. Nahraďte myGrafana názvem vaší instance 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)
Propojení Služby Azure Monitor a Spravované grafany Azure s clusterem AKS
Pomocí příkazu az aks update propojte prostředky Azure Monitoru a Grafany s clusterem 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
Vizualizace
Vizualizace s využitím Azure Managed Grafana
Tento krok přeskočte, pokud používáte BYO Grafana
Poznámka:
Metrika hubble_flows_processed_total
se ve výchozím nastavení nešrotuje kvůli vysoké kardinalitě metrik ve velkých clusterech.
Z tohoto důvodu mají řídicí panely Toky podů panely s chybějícími daty. Pokud to chcete změnit, můžete upravit nastavení metrik ama tak, aby zahrnovala hubble_flows_processed_total
seznam udržování metrik. Informace o tom, jak to udělat, najdete v tématu Minimální příjem dat.
Pomocí příkazu se ujistěte, že pody služby Azure Monitor běží
kubectl get pods
.kubectl get pods -o wide -n kube-system | grep ama-
Výstup by měl vypadat podobně jako v následujícím příkladu výstupu:
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
Vytvořili jsme ukázkové řídicí panely. Najdete je ve složce Prometheus spravované pomocí řídicích panelů > Azure. Mají názvy jako Kubernetes / Sítě /
<name>
. Sada řídicích panelů zahrnuje:- Clustery: Zobrazuje metriky na úrovni uzlu pro vaše clustery.
- DNS (cluster): Zobrazuje metriky DNS v clusteru nebo výběru uzlů.
- DNS (Úloha): Zobrazuje metriky DNS pro zadanou úlohu (např. pody daemonSet nebo nasazení, jako je CoreDNS).
- Poklesy (úloha): ukazuje poklesy zadané úlohy (např. pody nasazení nebo daemonSet).
- Toky podů (obor názvů): zobrazuje toky paketů L4/L7 do/z zadaného oboru názvů (tj. pody v oboru názvů).
- Toky podů (úloha): Zobrazuje toky paketů L4/L7 do/z zadané úlohy (např. pody nasazení nebo démona).
Vizualizace pomocí FUNKCE BYO Grafana
Pokud používáte Grafana spravovanou v Azure, tento krok přeskočte.
Do stávající konfigurace Prometheus přidejte následující úlohu výstřižku a restartujte server 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
V cílech prometheus ověřte, že jsou k dispozici síťové pody .
Přihlaste se k Grafana a naimportujte následující ukázkové řídicí panely pomocí následujících ID:
- Clustery: Zobrazuje metriky na úrovni uzlu pro vaše clustery. (ID: 18814)
- DNS (cluster): Zobrazuje metriky DNS v clusteru nebo výběru uzlů.( ID: 20925)
- DNS (Úloha): Zobrazuje metriky DNS pro zadanou úlohu (např. pody daemonSet nebo nasazení, jako je CoreDNS). (ID: [20926] https://grafana.com/grafana/dashboards/20926-kubernetes-networking-dns-workload/)
- Poklesy (úloha): Ukazuje poklesy zadané úlohy (např. pody nasazení nebo démona).( ID: 20927).
- Toky podů (obor názvů): zobrazuje toky paketů L4/L7 do/z zadaného oboru názvů (tj. pody v oboru názvů). (ID: 20928)
- Toky podů (úloha): Zobrazuje toky paketů L4/L7 do/z zadané úlohy (např. pody nasazení nebo démona).( ID: 20929)
Poznámka:
- V závislosti na nastavení instancí Prometheus/Grafana můžou některé panely řídicích panelů vyžadovat úpravy, aby se zobrazila všechna data.
- Cilium v současné době nepodporuje metriky a řídicí panely DNS.
Instalace Rozhraní příkazového řádku Hubble
Nainstalujte Rozhraní příkazového řádku Hubble pro přístup k datům, která shromažďuje, pomocí následujících příkazů:
# Set environment variables
export HUBBLE_VERSION=v1.16.3
export HUBBLE_ARCH=amd64
#Install Hubble CLI
if [ "$(uname -m)" = "aarch64" ]; then HUBBLE_ARCH=arm64; fi
curl -L --fail --remote-name-all https://github.com/cilium/hubble/releases/download/$HUBBLE_VERSION/hubble-linux-${HUBBLE_ARCH}.tar.gz{,.sha256sum}
sha256sum --check hubble-linux-${HUBBLE_ARCH}.tar.gz.sha256sum
sudo tar xzvfC hubble-linux-${HUBBLE_ARCH}.tar.gz /usr/local/bin
rm hubble-linux-${HUBBLE_ARCH}.tar.gz{,.sha256sum}
Vizualizace toků Hubble
Pomocí příkazu se ujistěte, že jsou pody Hubble spuštěné
kubectl get pods
.kubectl get pods -o wide -n kube-system -l k8s-app=hubble-relay
Výstup by měl vypadat podobně jako v následujícím příkladu výstupu:
hubble-relay-7ddd887cdb-h6khj 1/1 Running 0 23h
Port forward Hubble Relay pomocí
kubectl port-forward
příkazu.kubectl port-forward -n kube-system svc/hubble-relay --address 127.0.0.1 4245:443
Vzájemné tls (mTLS) zajišťuje zabezpečení serveru Hubble Relay. Pokud chcete klientovi Hubble povolit načítání toků, musíte získat příslušné certifikáty a nakonfigurovat s nimi klienta. Certifikáty použijte pomocí následujících příkazů:
#!/usr/bin/env bash set -euo pipefail set -x # Directory where certificates will be stored CERT_DIR="$(pwd)/.certs" mkdir -p "$CERT_DIR" declare -A CERT_FILES=( ["tls.crt"]="tls-client-cert-file" ["tls.key"]="tls-client-key-file" ["ca.crt"]="tls-ca-cert-files" ) for FILE in "${!CERT_FILES[@]}"; do KEY="${CERT_FILES[$FILE]}" JSONPATH="{.data['${FILE//./\\.}']}" # Retrieve the secret and decode it kubectl get secret hubble-relay-client-certs -n kube-system \ -o jsonpath="${JSONPATH}" | \ base64 -d > "$CERT_DIR/$FILE" # Set the appropriate hubble CLI config hubble config set "$KEY" "$CERT_DIR/$FILE" done hubble config set tls true hubble config set tls-server-name instance.hubble-relay.cilium.io
Pomocí následujícího
kubectl get secrets
příkazu ověřte, že se tajné kódy vygenerovaly:kubectl get secrets -n kube-system | grep hubble-
Výstup by měl vypadat podobně jako v následujícím příkladu výstupu:
kube-system hubble-relay-client-certs kubernetes.io/tls 3 9d kube-system hubble-relay-server-certs kubernetes.io/tls 3 9d kube-system hubble-server-certs kubernetes.io/tls 3 9d
Pomocí příkazu se ujistěte, že pod Hubble Relay běží
hubble observe
.hubble observe --pod hubble-relay-7ddd887cdb-h6khj
Vizualizace pomocí uživatelského rozhraní Hubble
Pokud chcete použít uživatelské rozhraní Hubble, uložte následující položky do hubble-ui.yaml.
apiVersion: v1 kind: ServiceAccount metadata: name: hubble-ui namespace: kube-system --- kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: hubble-ui labels: app.kubernetes.io/part-of: retina rules: - apiGroups: - networking.k8s.io resources: - networkpolicies verbs: - get - list - watch - apiGroups: - "" resources: - componentstatuses - endpoints - namespaces - nodes - pods - services verbs: - get - list - watch - apiGroups: - apiextensions.k8s.io resources: - customresourcedefinitions verbs: - get - list - watch - apiGroups: - cilium.io resources: - "*" verbs: - get - list - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: hubble-ui labels: app.kubernetes.io/part-of: retina roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: hubble-ui subjects: - kind: ServiceAccount name: hubble-ui namespace: kube-system --- apiVersion: v1 kind: ConfigMap metadata: name: hubble-ui-nginx namespace: kube-system data: nginx.conf: | server { listen 8081; server_name localhost; root /app; index index.html; client_max_body_size 1G; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; # CORS add_header Access-Control-Allow-Methods "GET, POST, PUT, HEAD, DELETE, OPTIONS"; add_header Access-Control-Allow-Origin *; add_header Access-Control-Max-Age 1728000; add_header Access-Control-Expose-Headers content-length,grpc-status,grpc-message; add_header Access-Control-Allow-Headers range,keep-alive,user-agent,cache-control,content-type,content-transfer-encoding,x-accept-content-transfer-encoding,x-accept-response-streaming,x-user-agent,x-grpc-web,grpc-timeout; if ($request_method = OPTIONS) { return 204; } # /CORS location /api { proxy_http_version 1.1; proxy_pass_request_headers on; proxy_hide_header Access-Control-Allow-Origin; proxy_pass http://127.0.0.1:8090; } location / { try_files $uri $uri/ /index.html /index.html; } # Liveness probe location /healthz { access_log off; add_header Content-Type text/plain; return 200 'ok'; } } } --- kind: Deployment apiVersion: apps/v1 metadata: name: hubble-ui namespace: kube-system labels: k8s-app: hubble-ui app.kubernetes.io/name: hubble-ui app.kubernetes.io/part-of: retina spec: replicas: 1 selector: matchLabels: k8s-app: hubble-ui template: metadata: labels: k8s-app: hubble-ui app.kubernetes.io/name: hubble-ui app.kubernetes.io/part-of: retina spec: serviceAccountName: hubble-ui automountServiceAccountToken: true containers: - name: frontend image: mcr.microsoft.com/oss/cilium/hubble-ui:v0.12.2 imagePullPolicy: Always ports: - name: http containerPort: 8081 livenessProbe: httpGet: path: /healthz port: 8081 readinessProbe: httpGet: path: / port: 8081 resources: {} volumeMounts: - name: hubble-ui-nginx-conf mountPath: /etc/nginx/conf.d/default.conf subPath: nginx.conf - name: tmp-dir mountPath: /tmp terminationMessagePolicy: FallbackToLogsOnError securityContext: {} - name: backend image: mcr.microsoft.com/oss/cilium/hubble-ui-backend:v0.12.2 imagePullPolicy: Always env: - name: EVENTS_SERVER_PORT value: "8090" - name: FLOWS_API_ADDR value: "hubble-relay:443" - name: TLS_TO_RELAY_ENABLED value: "true" - name: TLS_RELAY_SERVER_NAME value: ui.hubble-relay.cilium.io - name: TLS_RELAY_CA_CERT_FILES value: /var/lib/hubble-ui/certs/hubble-relay-ca.crt - name: TLS_RELAY_CLIENT_CERT_FILE value: /var/lib/hubble-ui/certs/client.crt - name: TLS_RELAY_CLIENT_KEY_FILE value: /var/lib/hubble-ui/certs/client.key livenessProbe: httpGet: path: /healthz port: 8090 readinessProbe: httpGet: path: /healthz port: 8090 ports: - name: grpc containerPort: 8090 resources: {} volumeMounts: - name: hubble-ui-client-certs mountPath: /var/lib/hubble-ui/certs readOnly: true terminationMessagePolicy: FallbackToLogsOnError securityContext: {} nodeSelector: kubernetes.io/os: linux volumes: - configMap: defaultMode: 420 name: hubble-ui-nginx name: hubble-ui-nginx-conf - emptyDir: {} name: tmp-dir - name: hubble-ui-client-certs projected: defaultMode: 0400 sources: - secret: name: hubble-relay-client-certs items: - key: tls.crt path: client.crt - key: tls.key path: client.key - key: ca.crt path: hubble-relay-ca.crt --- kind: Service apiVersion: v1 metadata: name: hubble-ui namespace: kube-system labels: k8s-app: hubble-ui app.kubernetes.io/name: hubble-ui app.kubernetes.io/part-of: retina spec: type: ClusterIP selector: k8s-app: hubble-ui ports: - name: http port: 80 targetPort: 8081
Použití manifestu hubble-ui.yaml v clusteru pomocí následujícího příkazu
kubectl apply -f hubble-ui.yaml
Nastavte přesměrování portů pro uživatelské rozhraní Hubble pomocí
kubectl port-forward
příkazu.kubectl -n kube-system port-forward svc/hubble-ui 12000:80
Přejděte do uživatelského rozhraní Hubble zadáním
http://localhost:12000/
do webového prohlížeče.
Vyčištění prostředků
Pokud nemáte v plánu používat tuto aplikaci, pomocí příkazu odstraňte další prostředky, které jste vytvořili v tomto článku az group delete
.
az group delete --name $RESOURCE_GROUP
Další kroky
V tomto článku s postupy jste zjistili, jak nainstalovat a povolit pozorovatelnost služby Container Network pro cluster AKS.
Další informace o Advanced Container Networking Services pro Azure Kubernetes Service (AKS) najdete v tématu Co je Advanced Container Networking Services pro Azure Kubernetes Service (AKS)?.
Další informace o službě Container Network Security a jejích možnostech najdete v tématu Co je Container Network Security?
Azure Kubernetes Service