Geavanceerde netwerkobserveerbaarheid instellen voor Azure Kubernetes Service (AKS) (preview)
In dit artikel leest u hoe u Advanced Network Observability for Azure Kubernetes Service (AKS) instelt en bring your own (BYO) Prometheus en Grafana gebruikt om de metrische gegevens te visualiseren.
U kunt Advanced Network Observability gebruiken om gegevens over de netwerkverkeersgegevens in uw AKS-clusters te verzamelen. Het maakt een gecentraliseerd platform mogelijk voor het bewaken van de toepassing en netwerkstatus. Op dit moment worden metrische gegevens opgeslagen in Prometheus en Grafana om ze te visualiseren. Advanced Network Observability biedt ook de mogelijkheid om Hubble in te schakelen. Deze mogelijkheden worden ondersteund voor zowel Cilium- als niet-Cilium-clusters.
Advanced Network Observability is een van de functies van Advanced Container Networking Services. Zie Wat is Advanced Container Networking Services (AKS) voor Azure Kubernetes Service (AKS) voor meer informatie over Advanced Container Networking Services (AKS)?
Belangrijk
Geavanceerde netwerkobserveerbaarheid is momenteel beschikbaar als PREVIEW-versie. Raadpleeg de Aanvullende voorwaarden voor Microsoft Azure-previews voor juridische voorwaarden die van toepassing zijn op Azure-functies die in bèta of preview zijn of die anders nog niet algemeen beschikbaar zijn.
Vereisten
- Een Azure-account met een actief abonnement. Als u nog geen abonnement hebt, maakt u een gratis account voordat u begint.
Gebruik de Bash-omgeving in Azure Cloud Shell. Zie quickstart voor Bash in Azure Cloud Shell voor meer informatie.
Installeer de Azure CLI, indien gewenst, om CLI-referentieopdrachten uit te voeren. Als u in Windows of macOS werkt, kunt u Azure CLI uitvoeren in een Docker-container. Zie De Azure CLI uitvoeren in een Docker-container voor meer informatie.
Als u een lokale installatie gebruikt, meldt u zich aan bij Azure CLI met behulp van de opdracht az login. Volg de stappen die worden weergegeven in de terminal, om het verificatieproces te voltooien. Raadpleeg Aanmelden bij Azure CLI voor aanvullende aanmeldingsopties.
Installeer de Azure CLI-extensie bij het eerste gebruik, wanneer u hierom wordt gevraagd. Raadpleeg Extensies gebruiken met Azure CLI voor meer informatie over extensies.
Voer az version uit om de geïnstalleerde versie en afhankelijke bibliotheken te vinden. Voer az upgrade uit om te upgraden naar de nieuwste versie.
- De minimale versie van Azure CLI die is vereist voor de stappen in dit artikel is 2.56.0. Voer
az --version
uit om de versie te bekijken. Als u Azure CLI 2.0 wilt installeren of upgraden, raadpleegt u Azure CLI 2.0 installeren.
aks-preview
De Azure CLI-extensie installeren
Installeer of werk de Preview-extensie van Azure CLI bij met behulp van de az extension add
of az extension update
opdracht.
# 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
AdvancedNetworkingPreview
De functievlag registreren
Registreer de AdvancedNetworkingPreview
functievlag met behulp van de az feature register
opdracht.
az feature register --namespace "Microsoft.ContainerService" --name "AdvancedNetworkingPreview"
Controleer of de registratie is geslaagd met behulp van de az feature show
opdracht. Het duurt enkele minuten voordat de registratie is voltooid.
az feature show --namespace "Microsoft.ContainerService" --name "AdvancedNetworkingPreview"
Nadat de functie is weergegeven Registered
, vernieuwt u de registratie van de Microsoft.ContainerService
resourceprovider met behulp van de az provider register
opdracht.
Een brongroep maken
Een resourcegroep is een logische container waarin Azure-resources worden geïmplementeerd en beheerd. Maak een resourcegroep met behulp van de az group create
opdracht.
# 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
Een AKS-cluster maken met Geavanceerde netwerkobserveerbaarheid
Maak een AKS-cluster met Advanced Network Observability met een niet-Cilium-gegevensvlak met behulp van de az aks create
opdracht en de --enable-advanced-networking-observability
vlag.
# 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
Geavanceerde netwerkobserveerbaarheid inschakelen op een bestaand cluster
Schakel Advanced Network Observability in op een bestaand cluster met behulp van de az aks update
opdracht.
Notitie
Clusters met het Cilium-gegevensvlak ondersteunen Geavanceerde waarneembaarheid vanaf Kubernetes versie 1.29.
az aks update \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--enable-advanced-network-observability
Clusterreferenties ophalen
Haal uw clusterreferenties op met behulp van de az aks get-credentials
opdracht.
az aks get-credentials --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP
Visualisatie met Grafana
Voeg de volgende scrape-taak toe aan uw bestaande Prometheus-configuratie en start de Prometheus-server opnieuw op:
- 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
Controleer in Doelen van Prometheus of de netwerk-obs-pods aanwezig zijn.
Meld u aan bij Grafana en importeer de volgende voorbeelddashboards met behulp van de volgende id's:
- Clusters: toont metrische gegevens op knooppuntniveau voor uw clusters. (Id: 18814)
- DNS (Cluster): toont metrische DNS-gegevens op een cluster of selectie van knooppunten.( Id: 20925)
- DNS (workload): toont metrische DNS-gegevens voor de opgegeven workload (bijvoorbeeld pods van een DaemonSet of implementatie, zoals CoreDNS). (Id: [20926] https://grafana.com/grafana/dashboards/20926-kubernetes-networking-dns-workload/)
- Druppels (workload): toont dalingen naar/van de opgegeven werkbelasting (bijvoorbeeld pods van een implementatie of DaemonSet).( Id: 20927).
- Pod-stromen (naamruimte): toont L4/L7-pakketstromen naar/van de opgegeven naamruimte (dat wil bijvoorbeeld Pods in de naamruimte). (Id: 20928)
- Pod-stromen (workload): toont L4/L7-pakketstromen naar/van de opgegeven workload (bijvoorbeeld Pods van een implementatie of DaemonSet).( Id: 20929)
Notitie
- Afhankelijk van de instellingen van uw Prometheus-/Grafana-exemplaren zijn voor sommige dashboardpanelen mogelijk aanpassingen vereist om alle gegevens weer te geven.
- Cilium biedt momenteel geen ondersteuning voor DNS-metrische gegevens/dashboards.
Installeer Hubble CLI voor toegang tot de gegevens die worden verzameld met behulp van de volgende opdrachten:
# 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}
De Hubble-stromen visualiseren
Zorg ervoor dat de Hubble-pods worden uitgevoerd met behulp van de
kubectl get pods
opdracht.kubectl get pods -o wide -n kube-system -l k8s-app=hubble-relay
De uitvoer moet er ongeveer uitzien als in de volgende voorbeelduitvoer:
hubble-relay-7ddd887cdb-h6khj 1/1 Running 0 23h
Stel port forwarding in voor Hubble Relay met behulp van de
kubectl port-forward
opdracht.kubectl port-forward -n kube-system svc/hubble-relay --address 127.0.0.1 4245:443
Wederzijdse TLS (mTLS) zorgt voor de beveiliging van de Hubble Relay-server. Als u wilt dat de Hubble-client stromen kan ophalen, moet u de juiste certificaten ophalen en de client ermee configureren. Pas de certificaten toe met behulp van de volgende opdrachten:
#!/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
Controleer of de geheimen zijn gegenereerd met behulp van de volgende
kubectl get secrets
opdracht:kubectl get secrets -n kube-system | grep hubble-
De uitvoer moet er ongeveer uitzien als in de volgende voorbeelduitvoer:
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
Zorg ervoor dat de Hubble Relay-pod wordt uitgevoerd met behulp van de
hubble relay service
opdracht.hubble relay service
Visualiseren met behulp van Hubble UI
Als u de Hubble-gebruikersinterface wilt gebruiken, slaat u het volgende op 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
Pas het hubble-ui.yaml-manifest toe op uw cluster met behulp van de volgende opdracht
kubectl apply -f hubble-ui.yaml
Stel de service beschikbaar door port forwarding in te stellen met behulp van de
kubectl port-forward
opdracht.kubectl port-forward svc/hubble-ui 12000:80
Access Hubble UI door in uw webbrowser in te voeren
http://localhost:12000/
.
Resources opschonen
Als u van plan bent om deze toepassing te gebruiken, verwijdert u de andere resources die u in dit artikel hebt gemaakt met behulp van de az group delete
opdracht.
az group delete --name $RESOURCE_GROUP
Volgende stappen
In dit artikel hebt u geleerd hoe u Advanced Network Observability voor uw AKS-cluster installeert en inschakelt.
Zie Wat is Advanced Container Networking Services (AKS) voor Azure Kubernetes Service (AKS) voor meer informatie over Advanced Container Networking Services (AKS)?
Als u een AKS-cluster wilt maken met Advanced Network Observability en Azure managed Prometheus en Grafana, raadpleegt u Advanced Network Observability instellen voor Azure Kubernetes Service (AKS) met Azure beheerde Prometheus en Grafana.
Azure Kubernetes Service