Nastavení rozšířené pozorovatelnosti sítě pro Službu Azure Kubernetes Service (AKS) – Azure managed Prometheus a Grafana (Preview)
V tomto článku se dozvíte, jak nastavit rozšířenou pozorovatelnost sítě pro Službu Azure Kubernetes Service (AKS) pomocí spravovaného nástroje Prometheus a Grafana k vizualizaci sešrotovaných metrik.
Pomocí rozšířené pozorovatelnosti sítě můžete shromažďovat data 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. Advanced Network Observability také nabízí možnost povolit Hubble. Tyto funkce jsou podporovány jak pro shluky Cilium, tak i pro clustery bez Cilium.
Advanced Network Observability je jednou z funkcí 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)?.
Důležité
Rozšířená pozorovatelnost sítě je v současné době ve verzi PREVIEW. Právní podmínky, které platí pro funkce Azure, které jsou ve verzi beta, verzi Preview nebo které zatím nejsou veřejně dostupné, najdete v Dodatečných podmínkách použití pro Microsoft Azure verze Preview.
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.
aks-preview
Instalace rozšíření Azure CLI
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
Registrace příznaku AdvancedNetworkingPreview
funkce
az feature register --namespace "Microsoft.ContainerService" --name "AdvancedNetworkingPreview"
Pomocí příkazu zaregistrujte příznak az feature register
funkce.
az feature register --namespace "Microsoft.ContainerService" --name "AdvancedNetworkingPreview"
Pomocí příkazu ověřte úspěšnou az feature show
registraci. Dokončení registrace trvá několik minut.
az feature show --namespace "Microsoft.ContainerService" --name "AdvancedNetworkingPreview"
Jakmile se tato funkce zobrazí Registered
, aktualizujte registraci Microsoft.ContainerService
poskytovatele prostředků pomocí az provider register
příkazu.
Vytvoření skupiny zdrojů
Skupina prostředků je logický kontejner, ve kterém se nasazují a spravují prostředky Azure. Pomocí příkazu vytvořte skupinu az group create
prostředků.
# Set environment variables for the resource group name and location. Make sure to replace the placeholders with your own values.
export RESOURCE_GROUP="<resource-group-name>"
export LOCATION="<azure-region>"
# Create a resource group
az group create --name $RESOURCE_GROUP --location $LOCATION
Vytvoření clusteru AKS s pokročilým sledováním sítě
Pomocí příkazu a --enable-advanced-networking-observability
příznaku vytvořte cluster AKS s rozšířenou pozorovatelnostmi sítě s rovinou dat az aks create
mimo Cilium.
# 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 \
--network-plugin azure \
--network-plugin-mode overlay \
--pod-cidr 192.168.0.0/16 \
--enable-advanced-network-observability
Povolení rozšířené pozorovatelnosti sítě v existujícím clusteru
Pomocí příkazu povolte rozšířenou pozorovatelnost sítě v existujícím clusteru az aks update
.
Poznámka:
Clustery s rovinou dat Cilium podporují pokročilou pozorovatelnost sítě počínaje Kubernetes verze 1.29.
az aks update \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--enable-advanced-network-observability
Získání přihlašovacích údajů clusteru
Pomocí příkazu získejte 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
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 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ěte ID prostředků 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í azure Monitoru a Grafany 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 s využitím Grafany
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ů (Namespace): zobrazuje toky paketů L4/L7 do/ze zadaného oboru názvů (tj. pody v Namespace).
- Toky podů (úloha): Zobrazuje toky paketů L4/L7 do/z zadané úlohy (např. pody nasazení nebo démona).
Poznámka:
- Rovina dat 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=v0.11.0
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: serviceAccount: hibble-ui 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 se naučili, jak nainstalovat a povolit advanced network observability 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)?.
Pokud chcete vytvořit rozšířenou pozorovatelnost sítě – BYO Prometheus a Grafana, přečtěte si téma Nastavení pokročilé pozorovatelnosti sítě pro Azure Kubernetes Service (AKS) – BYO Prometheus a Grafana.
Azure Kubernetes Service