Tárolóhálózat megfigyelhetőségének beállítása az Azure Kubernetes Service -hez (AKS) – Azure által felügyelt Prometheus és Grafana
Ez a cikk bemutatja, hogyan állíthatja be a Container Network Observability for Azure Kubernetes Service-t (AKS) felügyelt Prometheus, Grafana, BYO Prometheus és Grafana használatával, és hogyan jelenítheti meg a lekaparott metrikákat
A Container Network Observability használatával adatokat gyűjthet az AKS-fürtök hálózati forgalmáról. Központi platformot tesz lehetővé az alkalmazás és a hálózat állapotának monitorozásához. A metrikák jelenleg a Prometheusban vannak tárolva, és a Grafana használatával vizualizálhatók. A Container Network Observability lehetővé teszi a Hubble engedélyezését is. Ezek a képességek mind a Cilium, mind a nem Cilium-fürtök esetében támogatottak.
A Tárolóhálózat megfigyelhetősége a speciális tárolóhálózati szolgáltatások egyik funkciója. Az Azure Kubernetes Service (AKS) speciális tárolóhálózati szolgáltatásairól további információt az Azure Kubernetes Service (AKS) speciális tárolóhálózati szolgáltatásairól talál.
Előfeltételek
- Egy Azure-fiók, aktív előfizetéssel. Ha még nincs előfizetése, hozzon létre egy ingyenes fiókot, mielőtt hozzákezd.
Használja a Bash-környezetet az Azure Cloud Shellben. További információ: A Bash rövid útmutatója az Azure Cloud Shellben.
Ha inkább helyi cli-referenciaparancsokat szeretne futtatni, telepítse az Azure CLI-t. Ha Windows vagy macOS rendszert használ, fontolja meg az Azure CLI Docker-tárolóban való futtatását. További információ: Az Azure CLI futtatása Docker-tárolóban.
Ha helyi telepítést használ, jelentkezzen be az Azure CLI-be az az login parancs futtatásával. A hitelesítési folyamat befejezéséhez kövesse a terminálon megjelenő lépéseket. További bejelentkezési lehetőségekért lásd : Bejelentkezés az Azure CLI-vel.
Amikor a rendszer kéri, először telepítse az Azure CLI-bővítményt. További információ a bővítményekről: Bővítmények használata az Azure CLI-vel.
Futtassa az az version parancsot a telepített verzió és a függő kódtárak megkereséséhez. A legújabb verzióra az az upgrade paranccsal frissíthet.
- A jelen cikkben ismertetett lépésekhez az Azure CLI minimális verziója a 2.56.0. A verzió azonosításához futtassa a következőt:
az --version
. Ha telepíteni vagy frissíteni szeretne: Az Azure CLI telepítése.
Az aks-preview Azure CLI-bővítmény telepítése
Telepítse vagy frissítse az Azure CLI előzetes verziójú bővítményét a vagy az extension update
a az extension add
parancs használatával.
# 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
Speciális tárolóhálózat-szolgáltatások engedélyezése
A folytatáshoz engedélyeznie kell egy AKS-fürtöt, amelyen engedélyezve van az Advanced Container Networking Services .
Az az aks create
Advanced Container Networking Services jelölővel --enable-acns
ellátott parancs egy új AKS-fürtöt hoz létre az összes Speciális tárolóhálózati szolgáltatással. Ezek a funkciók a következőkre terjednek ki:
Tárolóhálózat megfigyelhetősége: Betekintést nyújt a hálózati forgalomba. További információkért látogasson el a Container Network Observability webhelyre.
Tárolóhálózat biztonsága: Olyan biztonsági funkciókat kínál, mint az FQDN-szűrés. További információért látogasson el a Container Network Security webhelyre.
Feljegyzés
A Cilium adatsíkkal rendelkező fürtök támogatják a Tárolóhálózat megfigyelhetőségét és a Tárolóhálózat biztonságát a Kubernetes 1.29-es verziójától kezdve.
# 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
Speciális tárolóhálózat-szolgáltatások engedélyezése meglévő fürtön
Az az aks update
Advanced Container Networking Services jelölővel --enable-acns
ellátott parancs frissíti a meglévő AKS-fürtöt az összes speciális tárolóhálózati szolgáltatással, beleértve a Tárolóhálózat megfigyelhetőségét és a Tárolóhálózat biztonsági funkcióját.
Feljegyzés
Csak a Cilium adatsíkkal rendelkező fürtök támogatják az Advanced Container Networking Services tárolóhálózati biztonsági funkcióit.
az aks update \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--enable-acns
Fürt hitelesítő adatainak lekérése
Miután megkapta a fürt hitelesítő adatait a az aks get-credentials
paranccsal.
az aks get-credentials --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP
Azure által felügyelt Prometheus és Grafana
A szakasz kihagyása BYO Prometheus és Grafana használata esetén
Az alábbi példában a Prometheus és a Grafana telepítése és engedélyezése az AKS-fürthöz.
Azure Monitor-erőforrás létrehozása
#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 '{}'
Azure Managed Grafana-példány létrehozása
Az az grafana create használatával hozzon létre egy Grafana-példányt. A Grafana-példány nevének egyedinek kell lennie.
# 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
Az Azure Managed Grafana és az Azure Monitor erőforrásazonosítói változókba helyezve
Az az grafana show használatával helyezze a Grafana erőforrás-azonosítót egy változóba. Az az resource show használatával helyezze el az Azure Monitor erőforrás-azonosítóját egy változóban. Cserélje le a myGrafana elemet a Grafana-példány nevére.
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)
Az Azure Monitor és az Azure Managed Grafana összekapcsolása az AKS-fürthöz
Az az aks update használatával összekapcsolhatja az Azure Monitor és a Grafana-erőforrásokat az AKS-fürthöz.
az aks update \
--name $CLUSTER_NAME \
--resource-group $RESOURCE_GROUP \
--enable-azure-monitor-metrics \
--azure-monitor-workspace-resource-id $azuremonitorId \
--grafana-resource-id $grafanaId
Megjelenítés
Vizualizáció az Azure Managed Grafana használatával
A lépés kihagyása BYO Grafana használata esetén
Feljegyzés
A hubble_flows_processed_total
metrikát alapértelmezés szerint nem kaparja le a rendszer a nagy méretű fürtök magas metrika-számossága miatt.
Emiatt a Pods Flow-irányítópultok hiányzó adatokat tartalmazó panelekkel rendelkeznek. Ennek módosításához módosíthatja az ama metrikák beállításait úgy, hogy szerepeljenek hubble_flows_processed_total
a metrikák nyilvántartási listájában. Ennek módjáról a Minimális betöltési doumentáció című témakörben olvashat.
Győződjön meg arról, hogy az Azure Monitor-podok futnak a
kubectl get pods
paranccsal.kubectl get pods -o wide -n kube-system | grep ama-
A kimenetnek a következő példakimenethez hasonlóan kell kinéznie:
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
Minta irányítópultokat hoztunk létre. Ezek az Irányítópultok > Azure Managed Prometheus mappában találhatók. Olyan neveik vannak, mint a "Kubernetes / Networking /
<name>
". Az irányítópultok csomagja a következőket tartalmazza:- Fürtök: a fürtök csomópontszintű metrikáit jeleníti meg.
- DNS (fürt): egy fürt DNS-metrikáit vagy a csomópontok kiválasztását jeleníti meg.
- DNS (számítási feladat): a megadott számítási feladat DNS-metrikáit jeleníti meg (például egy DaemonSet vagy üzembe helyezés podjait, például a CoreDNS-t).
- Cseppek (számítási feladatok): a megadott számítási feladatra vagy onnan érkező leeséseket jeleníti meg (például egy központi telepítés vagy egy Démonkészlet podjai).
- Podfolyamatok (Névtér): az L4/L7 csomagfolyamatokat jeleníti meg a megadott névtérbe vagy onnan (azaz a névtérben lévő podokra).
- Podfolyamatok (számítási feladat): az L4/L7 csomagfolyamatokat jeleníti meg a megadott számítási feladatba vagy onnan (például egy központi telepítés vagy démonkészlet podjai).
Vizualizáció BYO Grafana használatával
Ezt a lépést kihagyhatja az Azure által felügyelt Grafana használata esetén
Adja hozzá a következő kaparófeladatot a meglévő Prometheus-konfigurációhoz, és indítsa újra a Prometheus-kiszolgálót:
- 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
A Prometheus-célokban ellenőrizze, hogy a network-obs-podok jelen vannak-e.
Jelentkezzen be a Grafana szolgáltatásba, és importálja a következő példa irányítópultokat a következő azonosítók használatával:
- Fürtök: a fürtök csomópontszintű metrikáit jeleníti meg. (Azonosító: 18814)
- DNS (fürt): egy fürt DNS-metrikáit vagy a csomópontok kiválasztását jeleníti meg.( Azonosító: 20925)
- DNS (számítási feladat): a megadott számítási feladat DNS-metrikáit jeleníti meg (például egy DaemonSet vagy üzembe helyezés podjait, például a CoreDNS-t). (Azonosító: [20926] https://grafana.com/grafana/dashboards/20926-kubernetes-networking-dns-workload/)
- Cseppek (számítási feladat): a megadott számítási feladatra vagy onnan érkező eséseket jeleníti meg (például egy központi telepítés vagy egy Démonkészlet podjai).( Azonosító: 20927).
- Podfolyamatok (Névtér): az L4/L7 csomagfolyamatokat jeleníti meg a megadott névtérbe vagy onnan (azaz a névtérben lévő podokra). (azonosító: 20928)
- Podfolyamatok (számítási feladat): az L4/L7 csomagfolyamatokat jeleníti meg a megadott számítási feladatba vagy onnan (például egy központi telepítés vagy egy Démonkészlet podjai).( Azonosító: 20929)
Feljegyzés
- A Prometheus/Grafana-példányok beállításaitól függően előfordulhat, hogy egyes irányítópult-panelek finomhangolást igényelnek az összes adat megjelenítéséhez.
- A Cilium jelenleg nem támogatja a DNS-metrikákat/irányítópultokat.
A Hubble parancssori felületének telepítése
Telepítse a Hubble CLI-t az általa gyűjtött adatok eléréséhez az alábbi parancsokkal:
# 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}
A Hubble-folyamatok vizualizációja
Győződjön meg arról, hogy a Hubble-podok futnak a
kubectl get pods
paranccsal.kubectl get pods -o wide -n kube-system -l k8s-app=hubble-relay
A kimenetnek a következő példakimenethez hasonlóan kell kinéznie:
hubble-relay-7ddd887cdb-h6khj 1/1 Running 0 23h
A Hubble Relay portátirányítása a
kubectl port-forward
paranccsal.kubectl port-forward -n kube-system svc/hubble-relay --address 127.0.0.1 4245:443
A Kölcsönös TLS (mTLS) biztosítja a Hubble Relay-kiszolgáló biztonságát. Ahhoz, hogy a Hubble-ügyfél lekérhesse a folyamatokat, le kell szereznie a megfelelő tanúsítványokat, és konfigurálnia kell velük az ügyfelet. A tanúsítványok alkalmazása a következő parancsokkal:
#!/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
Ellenőrizze, hogy a titkos kulcsok a következő
kubectl get secrets
paranccsal lettek-e létrehozva:kubectl get secrets -n kube-system | grep hubble-
A kimenetnek a következő példakimenethez hasonlóan kell kinéznie:
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
Győződjön meg arról, hogy a Hubble Relay pod fut a
hubble observe
paranccsal.hubble observe --pod hubble-relay-7ddd887cdb-h6khj
Vizualizáció a Hubble felhasználói felületén
A Hubble felhasználói felületének használatához mentse az alábbiakat a hubble-ui.yaml fájlba
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
Alkalmazza a hubble-ui.yaml jegyzékfájlt a fürtre az alábbi paranccsal
kubectl apply -f hubble-ui.yaml
Állítsa be a porttovábbítást a Hubble felhasználói felületén a
kubectl port-forward
paranccsal.kubectl -n kube-system port-forward svc/hubble-ui 12000:80
A Böngészőbe való belépéssel
http://localhost:12000/
elérheti a Hubble felhasználói felületét.
Az erőforrások eltávolítása
Ha nem tervezi az alkalmazás használatát, törölje a cikkben létrehozott többi erőforrást a az group delete
paranccsal.
az group delete --name $RESOURCE_GROUP
Következő lépések
Ebben az útmutatóban megismerhette, hogyan telepítheti és engedélyezheti a Container Network Observability szolgáltatást az AKS-fürthöz.
Az Azure Kubernetes Service (AKS) speciális tárolóhálózati szolgáltatásairól további információt az Azure Kubernetes Service (AKS) speciális tárolóhálózati szolgáltatásairól talál.
A tárolóhálózat biztonságával és képességeivel kapcsolatos további információkért lásd : Mi az a tárolóhálózat biztonsága?.
Azure Kubernetes Service