Megosztás a következőn keresztül:


Speciális hálózati megfigyelhetőség beállítása az Azure Kubernetes Service -hez (AKS) (előzetes verzió)

Ez a cikk bemutatja, hogyan állíthatja be az Advanced Network Observability for Azure Kubernetes Service (AKS) szolgáltatást, és hogyan használhatja saját (BYO) Prometheus és Grafana használatával a metrikákat.

Az Advanced Network Observability használatával adatokat gyűjthet az AKS-fürtök hálózati forgalmi adatairó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. Az Advanced 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.

Az Advanced Network Observability az Advanced Container Networking Services 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.

Fontos

Az Advanced Network Observability jelenleg előzetes verzióban érhető el. A bétaverziójú, előzetes verziójú vagy másként még általánosan nem elérhető Azure-szolgáltatások jogi feltételeit lásd: Kiegészítő használati feltételek a Microsoft Azure előzetes verziójú termékeihez.

Előfeltételek

  • 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

A funkciójelző regisztrálása AdvancedNetworkingPreview

Regisztrálja a az feature register --namespace "Microsoft.ContainerService" --name "AdvancedNetworkingPreview" funkciójelzőt a az feature register paranccsal.

az feature register --namespace "Microsoft.ContainerService" --name "AdvancedNetworkingPreview"

Ellenőrizze a sikeres regisztrációt a az feature show paranccsal. A regisztráció végrehajtása néhány percet vesz igénybe.

az feature show --namespace "Microsoft.ContainerService" --name "AdvancedNetworkingPreview"

Miután a funkció megjelenik Registered, frissítse az Microsoft.ContainerService erőforrás-szolgáltató regisztrációját a az provider register paranccsal.

Erőforráscsoport létrehozása

Az erőforráscsoport olyan logikai tároló, amelybe a rendszer üzembe helyezi és kezeli az Azure-erőforrásokat. Hozzon létre egy erőforráscsoportot a az group create paranccsal.

# 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

AKS-fürt létrehozása speciális hálózati megfigyelhetőséggel

Hozzon létre egy AKS-fürtöt speciális hálózati megfigyelhetőséggel egy nem Cilium adatsíkkal a parancs és a az aks create --enable-advanced-networking-observability jelző használatával.

# 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

Speciális hálózati megfigyelhetőség engedélyezése meglévő fürtön

Az Advanced Network Observability engedélyezése meglévő fürtön a az aks update parancs használatával.

Feljegyzés

A Cilium adatsíkkal rendelkező fürtök támogatják az Advanced Observability-t a Kubernetes 1.29-es verziójától kezdve.

az aks update \
    --resource-group $RESOURCE_GROUP \
    --name $CLUSTER_NAME \
    --enable-advanced-network-observability

Fürt hitelesítő adatainak lekérése

Kérje le a fürt hitelesítő adatait a az aks get-credentials paranccsal.

az aks get-credentials --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP

Vizualizáció a Grafana használatával

  1. 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
    
  2. A Prometheus-célokban ellenőrizze, hogy a network-obs-podok jelen vannak-e.

  3. 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.
  4. 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=0.11  
    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

  1. 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 
    
  2. Állítsa be a Hubble Relay porttovábbítását a kubectl port-forward paranccsal.

    kubectl port-forward -n kube-system svc/hubble-relay --address 127.0.0.1 4245:443
    
  3. 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
    
  4. 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    
    
  5. Győződjön meg arról, hogy a Hubble Relay pod fut a hubble relay service paranccsal.

    hubble relay service 
    

Vizualizáció a Hubble felhasználói felületén

  1. 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:
          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
    
  2. Alkalmazza a hubble-ui.yaml jegyzékfájlt a fürtre az alábbi paranccsal

    kubectl apply -f hubble-ui.yaml
    
  3. Tegye elérhetővé a szolgáltatást a porttovábbítás parancs használatával történő beállításával kubectl port-forward .

    kubectl port-forward svc/hubble-ui 12000:80
    
  4. 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ócikkben megtanulta, hogyan telepíthető és engedélyezhető az Advanced Network Observability az AKS-fürthöz.