Aracılığıyla paylaş


Azure Kubernetes Service (AKS) için Gelişmiş Ağ Gözlemlenebilirliği Ayarlama (Önizleme)

Bu makalede, Azure Kubernetes Service (AKS) için Gelişmiş Ağ Gözlemlenebilirliği'ni ayarlama ve ölçümleri görselleştirmek için kendi (BYO) Prometheus ve Grafana'nızı nasıl kullanacağınız gösterilmektedir.

AKS kümelerinizdeki ağ trafiği verileri 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

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ş Gözlemlenebilirliği 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

Grafana kullanarak görselleştirme

  1. Mevcut Prometheus yapılandırmanıza aşağıdaki kazıma işini ekleyin ve Prometheus sunucunuzu yeniden başlatın:

    - 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. Prometheus Hedefleri bölümünde network-obs-pod'ların mevcut olduğunu doğrulayın.

  3. Grafana'da oturum açın ve aşağıdaki kimlikleri kullanarak aşağıdaki örnek panoları içeri aktarın:

    • Kümeler: Kümeleriniz için Düğüm düzeyinde ölçümleri gösterir. (Kimlik: 18814)
    • DNS (Küme): Bir kümedeki DNS ölçümlerini veya Düğümlerin seçimini gösterir.( Kimlik: 20925)
    • DNS (İş Yükü): Belirtilen iş yükü için DNS ölçümlerini gösterir (örneğin, DaemonSet podları veya CoreDNS gibi Dağıtım). (Kimlik: [20926] https://grafana.com/grafana/dashboards/20926-kubernetes-networking-dns-workload/)
    • Bırakmalar (İş Yükü): Belirtilen iş yüküne/iş yükünden gelen düşüşleri gösterir (örneğin, Dağıtım veya DaemonSet podları).( Kimlik: 20927).
    • 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. (Kimlik: 20928)
    • 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).( Kimlik: 20929)

    Not

    • Prometheus/Grafana örneklerinizin ayarlarına bağlı olarak, bazı pano panellerinde tüm verilerin görüntülenmesi için ince ayarlar gerekebilir.
    • Cilium şu anda DNS ölçümlerini/panolarını desteklememektedir.
  4. Aşağıdaki komutları kullanarak topladığı verilere erişmek için Hubble CLI'yi yükleyin:

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

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 Hubble Geçişi için bağlantı noktası iletmeyi kubectl port-forward ayarlayın.

    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 bağlantı noktası iletmeyi ayarlayarak hizmeti kullanıma sunma kubectl port-forward .

    kubectl 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.