Aracılığıyla paylaş


Azure Kubernetes Service (AKS) için Gelişmiş Ağ Gözlemlenebilirliği Ayarlama - Azure tarafından yönetilen Prometheus ve Grafana (Önizleme)

Bu makalede, kazınmış ölçümleri görselleştirmek için Yönetilen Prometheus ve Grafana kullanarak Azure Kubernetes Service (AKS) için Gelişmiş Ağ Gözlemlenebilirliği'nin nasıl ayarlanacağı gösterilmektedir.

AKS kümelerinizin ağ trafiği hakkında veri toplamak için Gelişmiş Ağ Gözlemlenebilirliği'ni kullanabilirsiniz. Uygulama ve ağ durumunu izlemek için merkezi bir platform sağlar. Şu anda ölçümler Prometheus'ta depolanır ve Grafana bunları görselleştirmek için kullanılabilir. Gelişmiş Ağ Gözlemlenebilirliği, Hubble'ı etkinleştirme olanağı da sunar. Bu özellikler hem Cilium hem de Cilium olmayan kümeler için desteklenir.

Gelişmiş Ağ Gözlemlenebilirliği, Gelişmiş Kapsayıcı Ağ Hizmetleri'nin özelliklerinden biridir. Azure Kubernetes Service (AKS) için Gelişmiş Kapsayıcı Ağ Hizmetleri hakkında daha fazla bilgi için bkz . Azure Kubernetes Service (AKS) için Gelişmiş Kapsayıcı Ağ Hizmetleri nedir?.

Önemli

Gelişmiş Ağ Gözlemlenebilirliği şu anda ÖNİzLEME aşamasındadır. Beta veya önizleme aşamasında olan ya da başka bir şekilde henüz genel kullanıma sunulmamış olan Azure özelliklerinde geçerli olan yasal koşullar için bkz. Microsoft Azure Önizlemeleri için Ek Kullanım Koşulları.

Önkoşullar

  • Azure Cloud Shell'de Bash ortamını kullanın. Daha fazla bilgi için bkz . Azure Cloud Shell'de Bash için hızlı başlangıç.

  • CLI başvuru komutlarını yerel olarak çalıştırmayı tercih ediyorsanız Azure CLI'yı yükleyin . Windows veya macOS üzerinde çalışıyorsanız Azure CLI’yi bir Docker kapsayıcısında çalıştırmayı değerlendirin. Daha fazla bilgi için bkz . Docker kapsayıcısında Azure CLI'yi çalıştırma.

    • Yerel yükleme kullanıyorsanız az login komutunu kullanarak Azure CLI ile oturum açın. Kimlik doğrulama işlemini tamamlamak için terminalinizde görüntülenen adımları izleyin. Diğer oturum açma seçenekleri için bkz . Azure CLI ile oturum açma.

    • İstendiğinde, ilk kullanımda Azure CLI uzantısını yükleyin. Uzantılar hakkında daha fazla bilgi için bkz. Azure CLI ile uzantıları kullanma.

    • Yüklü sürümü ve bağımlı kitaplıkları bulmak için az version komutunu çalıştırın. En son sürüme yükseltmek için az upgrade komutunu çalıştırın.

  • Bu makaledeki adımlar için gereken en düşük Azure CLI sürümü 2.56.0'dır. Sürümü bulmak için az --version komutunu çalıştırın. Yüklemeniz veya yükseltmeniz gerekirse, bkz. Azure CLI yükleme.

Azure CLI uzantısını aks-preview yükleme

veya komutunu kullanarak Azure CLI önizleme uzantısını yükleyin veya az extension update güncelleştirinaz extension add.

# 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

Özellik bayrağını AdvancedNetworkingPreview kaydetme

az feature register --namespace "Microsoft.ContainerService" --name "AdvancedNetworkingPreview" komutunu kullanarak özellik bayrağını az feature register kaydedin.

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

komutunu kullanarak kaydın başarılı olduğunu az feature show doğrulayın. Kaydın tamamlanması birkaç dakika sürer.

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

Özellik gösterildikten Registeredsonra komutunu kullanarak kaynak sağlayıcısının Microsoft.ContainerService kaydını yenileyin az provider register .

Kaynak grubu oluşturma

Kaynak grubu, Azure kaynaklarının dağıtıldığı ve yönetildiği bir mantıksal kapsayıcıdır. komutunu kullanarak az group create bir kaynak grubu oluşturun.

# 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

Gelişmiş Ağ Gözlemlenebilirliği ile AKS kümesi oluşturma

komutunu ve --enable-advanced-networking-observability bayrağını kullanarak az aks create Cilium olmayan bir veri düzlemi ile Gelişmiş Ağ Gözlemlenebilirliği ile bir AKS kümesi oluşturun.

# 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

Mevcut bir kümede Gelişmiş Ağ Gözlemlenebilirliğini etkinleştirme

komutunu kullanarak az aks update mevcut bir kümede Gelişmiş Ağ Gözlemlenebilirliğini etkinleştirin.

Not

Cilium veri düzlemi içeren kümeler, Kubernetes sürüm 1.29'dan başlayarak Gelişmiş Ağ Gözlemlenebilirliğini destekler.

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

Küme kimlik bilgilerini alma

komutunu kullanarak az aks get-credentials küme kimlik bilgilerinizi alın.

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

Azure tarafından yönetilen Prometheus ve Grafana

AKS kümeniz için Prometheus ve Grafana'yı yüklemek ve etkinleştirmek için aşağıdaki örneği kullanın.

Azure İzleyici kaynağı oluşturma

#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 '{}'

Grafana örneği oluşturma

Grafana örneği oluşturmak için az grafana create komutunu kullanın. Grafana örneğinin adı benzersiz olmalıdır.

# 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 

Grafana ve Azure İzleyici kaynak kimliklerini değişkenlere yerleştirme

Az grafana show komutunu kullanarak Grafana kaynak kimliğini bir değişkene yerleştirin. Azure İzleyici kaynak kimliğini bir değişkene yerleştirmek için az resource show komutunu kullanın. myGrafana değerini Grafana örneğinizin adıyla değiştirin.

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)

Azure İzleyici ve Grafana kaynaklarını AKS kümenize bağlamak için az aks update komutunu kullanın.

az aks update \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --enable-azure-monitor-metrics \
    --azure-monitor-workspace-resource-id $azuremonitorId \
    --grafana-resource-id $grafanaId

Grafana kullanarak görselleştirme

Not

Büyük hubble_flows_processed_total ölçekli kümelerdeki yüksek ölçüm kardinalitesi nedeniyle ölçüm varsayılan olarak kazınmaz. Bu nedenle Pod Akışları panolarında eksik veri içeren paneller bulunur. Bunu değiştirmek için ama ölçüm ayarlarını ölçüm saklama listesine eklenecek hubble_flows_processed_total şekilde değiştirebilirsiniz. Bunun nasıl yapılacağını öğrenmek için bkz . En Az Alım Doumentation.

  1. komutunu kullanarak Azure İzleyici podlarının çalıştığından kubectl get pods emin olun.

    kubectl get pods -o wide -n kube-system | grep ama-
    

    Çıkışınız aşağıdaki örnek çıkışa benzer olmalıdır:

    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
    
  2. Örnek panolar oluşturduk. Panolar > Azure Yönetilen Prometheus klasöründe bulunabilir. "Kubernetes / Networking / <name>" gibi adları vardır. Pano paketi şunları içerir:

    • Kümeler: Kümeleriniz için Düğüm düzeyinde ölçümleri gösterir.
    • DNS (Küme): Bir kümedeki DNS ölçümlerini veya Düğümlerin seçimini gösterir.
    • DNS (İş Yükü): Belirtilen iş yükü için DNS ölçümlerini gösterir (örneğin, DaemonSet podları veya CoreDNS gibi Dağıtım).
    • Bırakmalar (İş Yükü): Belirtilen iş yüküne/iş yükünden gelen düşüşleri gösterir (örneğin, Dağıtım podları veya DaemonSet).
    • Pod Akışları (Ad Alanı): Belirtilen ad alanına/ad alanından (ad alanında podlar gibi) L4/L7 paket akışlarını gösterir.
    • Pod Akışları (İş Yükü): Belirtilen iş yüküne /iş yükünden L4/L7 paket akışlarını gösterir (örneğin, Dağıtım podları veya DaemonSet).

Not

  • Cilium veri düzlemi şu anda DNS ölçümlerini/panolarını desteklememektedir.

Hubble CLI'yi yükleme

Aşağıdaki komutları kullanarak topladığı verilere erişmek için Hubble CLI'yi yükleyin:

# 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}

Hubble Akışlarını Görselleştirme

  1. Hubble podlarının komutunu kullanarak çalıştığından kubectl get pods emin olun.

    kubectl get pods -o wide -n kube-system -l k8s-app=hubble-relay
    

    Çıkışınız aşağıdaki örnek çıkışa benzer olmalıdır:

    hubble-relay-7ddd887cdb-h6khj     1/1  Running     0       23h 
    
  2. komutunu kullanarak kubectl port-forward bağlantı noktası iletme Hubble Geçişi.

    kubectl port-forward -n kube-system svc/hubble-relay --address 127.0.0.1 4245:443
    
  3. Karşılıklı TLS (mTLS), Hubble Relay sunucusunun güvenliğini sağlar. Hubble istemcisinin akışları almasını sağlamak için uygun sertifikaları almanız ve istemciyi onlarla yapılandırmanız gerekir. Aşağıdaki komutları kullanarak sertifikaları uygulayın:

    #!/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. Aşağıdaki kubectl get secrets komutu kullanarak gizli dizilerin oluşturulduğunu doğrulayın:

    kubectl get secrets -n kube-system | grep hubble-
    

    Çıkışınız aşağıdaki örnek çıkışa benzer olmalıdır:

    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. Hubble Relay podunun komutunu kullanarak çalıştığından hubble relay service emin olun.

    hubble relay service 
    

Hubble kullanıcı arabirimini kullanarak görselleştirme

  1. Hubble kullanıcı arabirimini kullanmak için aşağıdakileri hubble-ui.yaml dosyasına kaydedin

    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. Aşağıdaki komutu kullanarak hubble-ui.yaml bildirimini kümenize uygulayın

    kubectl apply -f hubble-ui.yaml
    
  3. komutunu kullanarak Hubble kullanıcı arabirimi için bağlantı noktası iletmeyi kubectl port-forward ayarlayın.

    kubectl -n kube-system port-forward svc/hubble-ui 12000:80
    
  4. Web tarayıcınıza girerek http://localhost:12000/ Hubble kullanıcı arabirimine erişin.


Kaynakları temizleme

Bu uygulamayı kullanmayı planlamıyorsanız komutunu kullanarak az group delete bu makalede oluşturduğunuz diğer kaynakları silin.

  az group delete --name $RESOURCE_GROUP

Sonraki adımlar

Bu nasıl yapılır makalesinde AKS kümeniz için Gelişmiş Ağ Gözlemlenebilirliği'ni yüklemeyi ve etkinleştirmeyi öğrendiniz.