Einrichten von Advanced Network Observability für Azure Kubernetes Service (AKS) (Vorschau)
In diesem Artikel erfahren Sie, wie Sie Advanced Network Observability für Azure Kubernetes Service (AKS) unter Verwendung eigener Prometheus- und Grafana-Instanzen zur Visualisierung der Metriken.
Mit Advanced Network Observability können Sie Daten über die Netzwerkdatenverkehrsdaten Ihrer AKS-Cluster sammeln. Eine zentrale Plattform für die Überwachung der Anwendungs- und Netzwerkintegrität wird aktiviert. Derzeit werden Metriken in Prometheus gespeichert, und Grafana kann verwendet werden, um sie zu visualisieren. Advanced Network Observability bietet auch die Möglichkeit, Hubble zu aktivieren. Diese Funktionen werden sowohl für Cilium- als auch für Nicht-Cilium-Cluster unterstützt.
Advanced Network Observability ist eine der Funktionen von Erweiterte Container-Netzwerkdienste. Weitere Informationen zu Erweiterte Container-Netzwerkdienste für Azure Kubernetes Service (AKS) finden Sie unter Was ist Erweiterte Container-Netzwerkdienste für Azure Kubernetes Service (AKS)?.
Wichtig
Advanced Network Observability befindet sich derzeit in der VORSCHAU. Die zusätzlichen Nutzungsbestimmungen für Microsoft Azure-Vorschauen enthalten rechtliche Bedingungen. Sie gelten für diejenigen Azure-Features, die sich in der Beta- oder Vorschauversion befinden oder aber anderweitig noch nicht zur allgemeinen Verfügbarkeit freigegeben sind.
Voraussetzungen
- Ein Azure-Konto mit einem aktiven Abonnement. Sollten Sie kein Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.
Verwenden Sie die Bash-Umgebung in Azure Cloud Shell. Weitere Informationen finden Sie unter Schnellstart für Bash in Azure Cloud Shell.
Wenn Sie CLI-Referenzbefehle lieber lokal ausführen, installieren Sie die Azure CLI. Wenn Sie Windows oder macOS ausführen, sollten Sie die Azure CLI in einem Docker-Container ausführen. Weitere Informationen finden Sie unter Ausführen der Azure CLI in einem Docker-Container.
Wenn Sie eine lokale Installation verwenden, melden Sie sich mithilfe des Befehls az login bei der Azure CLI an. Führen Sie die in Ihrem Terminal angezeigten Schritte aus, um den Authentifizierungsprozess abzuschließen. Informationen zu anderen Anmeldeoptionen finden Sie unter Anmelden mit der Azure CLI.
Installieren Sie die Azure CLI-Erweiterung beim ersten Einsatz, wenn Sie dazu aufgefordert werden. Weitere Informationen zu Erweiterungen finden Sie unter Verwenden von Erweiterungen mit der Azure CLI.
Führen Sie az version aus, um die installierte Version und die abhängigen Bibliotheken zu ermitteln. Führen Sie az upgrade aus, um das Upgrade auf die aktuelle Version durchzuführen.
- Für die Schritte in diesem Artikel ist die Azure CLI mindestens in Version 2.56.0 erforderlich. Führen Sie
az --version
aus, um die Version zu ermitteln. Informationen zum Durchführen einer Installation oder eines Upgrades finden Sie bei Bedarf unter Installieren der Azure CLI.
Installieren der Azure CLI-Erweiterung aks-preview
Installieren oder aktualisieren Sie die Azure CLI-Vorschauerweiterung mithilfe des Befehls az extension add
oder az extension update
.
# 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
Registrieren des AdvancedNetworkingPreview
-Featureflags
Registrieren Sie das Featureflag AdvancedNetworkingPreview
mithilfe des Befehls az feature register
.
az feature register --namespace "Microsoft.ContainerService" --name "AdvancedNetworkingPreview"
Überprüfen Sie mit dem Befehl az feature show
, ob die Registrierung erfolgreich war. Es dauert einige Minuten, bis die Registrierung abgeschlossen ist.
az feature show --namespace "Microsoft.ContainerService" --name "AdvancedNetworkingPreview"
Sobald die Funktion Registered
anzeigt, aktualisieren Sie die Registrierung des Ressourcenanbieters Microsoft.ContainerService
mit dem Befehl az provider register
.
Erstellen einer Ressourcengruppe
Eine Ressourcengruppe ist ein logischer Container, in dem Azure-Ressourcen bereitgestellt und verwaltet werden. Erstellen Sie mit dem Befehl az group create
eine Ressourcengruppe.
# 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
Erstellen eines AKS-Clusters mit Advanced Network Observability
Erstellen Sie einen AKS-Cluster mit Advanced Network Observability mit einer Nicht-Cilium-Datenebene mit dem Befehl az aks create
und dem Flag --enable-advanced-networking-observability
.
# 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
Aktivieren von Advanced Network Observability in einem vorhandenen Cluster
Aktivieren Sie Advanced Network Observability in einem vorhandenen Cluster mit dem Befehl az aks update
.
Hinweis
Cluster mit der Cilium-Datenebene unterstützen Advanced Observability ab Kubernetes-Version 1.29.
az aks update \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--enable-advanced-network-observability
Abrufen von Clusteranmeldeinformationen
Rufen Sie Ihre Clusteranmeldeinformationen mithilfe des Befehls az aks get-credentials
ab.
az aks get-credentials --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP
Visualisierung mithilfe von Grafana
Fügen Sie Ihrer vorhandenen Prometheus-Konfiguration den folgenden Ausleseauftrag hinzu, und starten Sie Ihren Prometheus-Server neu:
- 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
Vergewissern Sie sich unter Ziele von Prometheus, dass die network-obs-pods vorhanden sind.
Melden Sie sich bei Grafana an, und importieren Sie die folgenden Beispieldashboards mithilfe der folgenden IDs:
- Cluster: zeigt Metriken auf Knotenebene für Ihre Cluster an. (ID: 18814)
- DNS (Cluster): zeigt DNS-Metriken für einen Cluster oder eine Auswahl von Knoten an. (ID: 20925)
- DNS (Workload): zeigt DNS-Metriken für die angegebene Workload an (z. B. Pods eines DaemonSet oder einer Bereitstellung wie CoreDNS). (ID: [20926] https://grafana.com/grafana/dashboards/20926-kubernetes-networking-dns-workload/)
- Drops (Workload): zeigt Drops zu/von der angegebenen Workload an (z. B. Pods einer Bereitstellung oder eines DaemonSet). (ID: 20927).
- Poddatenflüsse (Namespace): zeigt L4/L7-Paketdatenflüsse in den / aus dem angegebenen Namespace an (d. h. Pods im Namespace). (ID: 20928)
- Poddatenflüsse (Workload):zeigt L4/L7-Paketdatenflüsse zu/von der angegebenen Workload an (z. B. Pods einer Bereitstellung oder eines DaemonSet). (ID: 20929)
Hinweis
- Je nach Ihren Einstellungen für Prometheus/Grafana-Instanzen erfordern einige Dashboardbereiche möglicherweise Optimierungen, um alle Daten anzuzeigen.
- Cilium unterstützt derzeit keine DNS-Metriken/Dashboards.
Installieren Sie die Hubble CLI, um auf die davon gesammelten Daten zuzugreifen, indem Sie die folgenden Befehle verwenden:
# 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}
Visualisieren der Hubble-Datenflüsse
Stellen Sie mit dem Befehl
kubectl get pods
sicher, dass die Hubble-Pods ausgeführt werden.kubectl get pods -o wide -n kube-system -l k8s-app=hubble-relay
Ihre Ausgabe sollte in etwa dem folgendem Beispiel entsprechen:
hubble-relay-7ddd887cdb-h6khj 1/1 Running 0 23h
Richten Sie die Portweiterleitung für Hubble Relay mithilfe des Befehls
kubectl port-forward
ein.kubectl port-forward -n kube-system svc/hubble-relay --address 127.0.0.1 4245:443
Mutual TLS (mTLS) stellt die Sicherheit des Hubble Relay-Servers sicher. Um den Hubble-Client zum Abrufen von Datenflüssen zu aktivieren, müssen Sie die entsprechenden Zertifikate abrufen und den Client mit diesen konfigurieren. Wenden Sie die Zertifikate mit den folgenden Befehlen an:
#!/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
Überprüfen Sie, ob die Geheimnisse mit dem folgenden
kubectl get secrets
-Befehl generiert wurden:kubectl get secrets -n kube-system | grep hubble-
Ihre Ausgabe sollte in etwa dem folgendem Beispiel entsprechen:
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
Stellen Sie mit dem Befehl
hubble relay service
sicher, dass der Hubble Relay-Pod ausgeführt wird.hubble relay service
Visualisieren mithilfe von Hubble UI
Um Hubble UI zu verwenden, speichern Sie Folgendes in „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
Wenden Sie das Manifest „hubble-ui.yaml“ mithilfe des folgenden Befehls auf Ihren Cluster an:
kubectl apply -f hubble-ui.yaml
Machen Sie den Dienst verfügbar, indem Sie die Portweiterleitung mithilfe des Befehls
kubectl port-forward
einrichten.kubectl port-forward svc/hubble-ui 12000:80
Greifen Sie auf Hubble UI zu, indem Sie
http://localhost:12000/
in Ihren Webbrowser eingeben.
Bereinigen von Ressourcen
Wenn Sie nicht vorhaben, diese Anwendung zu verwenden, löschen Sie die anderen Ressourcen, die Sie in diesem Artikel erstellt haben, mit dem Befehl az group delete
.
az group delete --name $RESOURCE_GROUP
Nächste Schritte
In diesem Artikel haben Sie erfahren, wie Sie Advanced Network Observability für Ihren AKS-Cluster installieren und aktivieren.
Weitere Informationen zu Erweiterte Container-Netzwerkdienste für Azure Kubernetes Service (AKS) finden Sie unter Was ist Erweiterte Container-Netzwerkdienste für Azure Kubernetes Service (AKS)?.
Informationen zum Erstellen eines AKS-Clusters mit Advanced Network Observability und von Azure verwalteten Prometheus- und Grafana-Instanzen finden Sie unter Einrichten von Network Observability für Azure Kubernetes Service (AKS) Azure-verwaltetes Prometheus und Grafana.
Azure Kubernetes Service