Konfigurera Advanced Network Observability för Azure Kubernetes Service (AKS) (förhandsversion)
Den här artikeln visar hur du konfigurerar Advanced Network Observability for Azure Kubernetes Service (AKS) och använder Byo Prometheus (Bring Your Own) Prometheus och Grafana för att visualisera måtten.
Du kan använda Advanced Network Observability för att samla in data om nätverkstrafikdata i dina AKS-kluster. Det möjliggör en centraliserad plattform för övervakning av program och nätverkshälsa. För närvarande lagras mått i Prometheus och Grafana kan användas för att visualisera dem. Advanced Network Observability erbjuder också möjligheten att aktivera Hubble. Dessa funktioner stöds för både Cilium- och icke-Cilium-kluster.
Advanced Network Observability är en av funktionerna i Advanced Container Networking Services. Mer information om Advanced Container Networking Services för Azure Kubernetes Service (AKS) finns i Vad är Advanced Container Networking Services för Azure Kubernetes Service (AKS)?.
Viktigt!
Advanced Network Observability finns för närvarande i FÖRHANDSVERSION. Juridiska villkor för Azure-funktioner i betaversion, förhandsversion eller som av någon annan anledning inte har gjorts allmänt tillgängliga ännu finns i kompletterande användningsvillkor för Microsoft Azure-förhandsversioner.
Förutsättningar
- Ett Azure-konto med en aktiv prenumeration. Om du inte har ett konto kan du skapa ett kostnadsfritt konto innan du börjar.
Använd Bash-miljön i Azure Cloud Shell. Mer information finns i Snabbstart för Bash i Azure Cloud Shell.
Om du föredrar att köra CLI-referenskommandon lokalt installerar du Azure CLI. Om du kör i Windows eller macOS kan du köra Azure CLI i en Docker-container. Mer information finns i Så här kör du Azure CLI i en Docker-container.
Om du använder en lokal installation loggar du in på Azure CLI med hjälp av kommandot az login. Slutför autentiseringsprocessen genom att följa stegen som visas i terminalen. Andra inloggningsalternativ finns i Logga in med Azure CLI.
När du uppmanas att installera Azure CLI-tillägget vid första användningen. Mer information om tillägg finns i Använda tillägg med Azure CLI.
Kör az version om du vill hitta versionen och de beroende bibliotek som är installerade. Om du vill uppgradera till den senaste versionen kör du az upgrade.
- Den lägsta versionen av Azure CLI som krävs för stegen i den här artikeln är 2.56.0. Kör
az --version
för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.
Installera Azure CLI-tillägget aks-preview
Installera eller uppdatera azure CLI-förhandsgranskningstillägget az extension add
med hjälp av kommandot eller 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
Registrera funktionsflaggan AdvancedNetworkingPreview
Registrera funktionsflaggan AdvancedNetworkingPreview
az feature register
med kommandot .
az feature register --namespace "Microsoft.ContainerService" --name "AdvancedNetworkingPreview"
Verifiera lyckad registrering med hjälp av az feature show
kommandot . Det tar några minuter innan registreringen har slutförts.
az feature show --namespace "Microsoft.ContainerService" --name "AdvancedNetworkingPreview"
När funktionen visas Registered
uppdaterar du registreringen av Microsoft.ContainerService
resursprovidern med kommandot az provider register
.
Skapa en resursgrupp
En resursgrupp är en logisk container där Azure-resurser distribueras och hanteras. Skapa en resursgrupp med kommandot az group create
.
# 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
Skapa ett AKS-kluster med Advanced Network Observability
Skapa ett AKS-kluster med Advanced Network Observability med ett icke-Cilium-dataplan med hjälp av az aks create
kommandot och --enable-advanced-networking-observability
flaggan.
# 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
Aktivera advanced network observability på ett befintligt kluster
Aktivera Advanced Network Observability på ett befintligt kluster med hjälp av az aks update
kommandot .
Kommentar
Kluster med Cilium-dataplanet stöder avancerad observerbarhet från och med Kubernetes version 1.29.
az aks update \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--enable-advanced-network-observability
Hämta klusterautentiseringsuppgifter
Hämta dina autentiseringsuppgifter för klustret med hjälp av az aks get-credentials
kommandot .
az aks get-credentials --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP
Visualisering med grafana
Lägg till följande skrapjobb i din befintliga Prometheus-konfiguration och starta om Prometheus-servern:
- 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
I Mål för Prometheus kontrollerar du att nätverks-obs-poddar finns.
Logga in på Grafana och importera följande exempelinstrumentpaneler med hjälp av följande ID:n:
- Kluster: visar mått på nodnivå för dina kluster. (ID: 18814)
- DNS (Kluster): visar DNS-mått i ett kluster eller val av noder.( ID: 20925)
- DNS (Arbetsbelastning): visar DNS-mått för den angivna arbetsbelastningen (t.ex. poddar för en DaemonSet eller distribution, till exempel CoreDNS). (ID: [20926] https://grafana.com/grafana/dashboards/20926-kubernetes-networking-dns-workload/)
- Drops (Workload): visar droppar till/från den angivna arbetsbelastningen (t.ex. poddar för en distribution eller DaemonSet).( ID: 20927).
- Poddflöden (namnområde): visar L4/L7-paketflöden till/från det angivna namnområdet (dvs. poddar i namnområdet). (ID: 20928)
- Poddflöden (arbetsbelastning): visar L4/L7-paketflöden till/från den angivna arbetsbelastningen (t.ex. poddar för en distribution eller daemonSet).( ID: 20929)
Kommentar
- Beroende på dina Inställningar för Prometheus/Grafana-instanser kan vissa instrumentpaneler kräva justeringar för att visa alla data.
- Cilium stöder för närvarande inte DNS-mått/instrumentpaneler.
Installera Hubble CLI för att komma åt de data som samlas in med hjälp av följande kommandon:
# 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}
Visualisera Hubble-flödena
Kontrollera att Hubble-poddarna körs med kommandot
kubectl get pods
.kubectl get pods -o wide -n kube-system -l k8s-app=hubble-relay
Dina utdata bör se ut ungefär som följande exempelutdata:
hubble-relay-7ddd887cdb-h6khj 1/1 Running 0 23h
Konfigurera portvidarebefordring för Hubble Relay med kommandot
kubectl port-forward
.kubectl port-forward -n kube-system svc/hubble-relay --address 127.0.0.1 4245:443
Ömsesidig TLS (mTLS) säkerställer säkerheten för Hubble Relay-servern. Om du vill att Hubble-klienten ska kunna hämta flöden måste du hämta lämpliga certifikat och konfigurera klienten med dem. Använd certifikaten med hjälp av följande kommandon:
#!/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
Kontrollera att hemligheterna genererades med hjälp av följande
kubectl get secrets
kommando:kubectl get secrets -n kube-system | grep hubble-
Dina utdata bör se ut ungefär som följande exempelutdata:
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
Kontrollera att Hubble Relay-podden körs med kommandot
hubble relay service
.hubble relay service
Visualisera med hjälp av Användargränssnittet för Hubble
Om du vill använda Användargränssnittet för Hubble sparar du följande i 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
Använd manifestet hubble-ui.yaml på klustret med hjälp av följande kommando
kubectl apply -f hubble-ui.yaml
Exponera tjänsten genom att konfigurera portvidarebefordring med kommandot
kubectl port-forward
.kubectl port-forward svc/hubble-ui 12000:80
Få åtkomst till Användargränssnittet för Hubble genom att gå in
http://localhost:12000/
i webbläsaren.
Rensa resurser
Om du inte planerar att använda det här programmet tar du bort de andra resurser som du skapade i den här artikeln med hjälp av az group delete
kommandot .
az group delete --name $RESOURCE_GROUP
Nästa steg
I den här artikeln har du lärt dig hur du installerar och aktiverar Advanced Network Observability för ditt AKS-kluster.
Mer information om Advanced Container Networking Services för Azure Kubernetes Service (AKS) finns i Vad är Advanced Container Networking Services för Azure Kubernetes Service (AKS)?.
Information om hur du skapar ett AKS-kluster med Advanced Network Observability och Azure managed Prometheus och Grafana finns i Konfigurera Advanced Network Observability for Azure Kubernetes Service (AKS) Azure managed Prometheus och Grafana.
Azure Kubernetes Service