Azure Kubernetes Service (AKS) için Kapsayıcı Ağ Gözlemlenebilirliğini ayarlama - Azure tarafından yönetilen Prometheus ve Grafana
Bu makalede, Yönetilen Prometheus ve Grafana ile BYO Prometheus ve Grafana kullanarak Azure Kubernetes Service (AKS) için Kapsayıcı Ağ Gözlemlenebilirliğini ayarlama ve kazınmış ölçümleri görselleştirme adımları gösterilmektedir
AKS kümelerinizin ağ trafiği hakkında veri toplamak için Kapsayıcı 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. Kapsayıcı Ağ Gözlemlenebilirliği, Hubble'ı etkinleştirme olanağı da sunar. Bu özellikler hem Cilium hem de Cilium olmayan kümeler için desteklenir.
Kapsayıcı 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?.
Önkoşullar
- Etkin aboneliği olan bir Azure hesabı. Aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
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.
aks-preview Azure CLI uzantısını 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
Gelişmiş Kapsayıcı Ağ Hizmetlerini Etkinleştirme
Devam etmek için Gelişmiş Kapsayıcı Ağ Hizmetleri'nin etkinleştirildiği bir AKS kümeniz olmalıdır.
az aks create
Gelişmiş Kapsayıcı Ağ Hizmetleri bayrağına sahip komut, --enable-acns
tüm Gelişmiş Kapsayıcı Ağ Hizmetleri özellikleriyle yeni bir AKS kümesi oluşturur. Bu özellikler şunları kapsar:
Kapsayıcı Ağ Gözlemlenebilirliği: Ağ trafiğinizle ilgili içgörüler sağlar. Daha fazla bilgi edinmek için Bkz . Container Network Observability.
Kapsayıcı Ağ Güvenliği: FQDN filtreleme gibi güvenlik özellikleri sunar. Daha fazla bilgi için Bkz . Container Network Security.
Not
Cilium veri düzlemi olan kümeler, Kubernetes sürüm 1.29'dan başlayarak Kapsayıcı Ağı Gözlemlenebilirliği ve Kapsayıcı Ağı güvenliğini destekler.
# 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
Mevcut bir kümede Gelişmiş Kapsayıcı Ağ Hizmetlerini etkinleştirme
az aks update
Gelişmiş Kapsayıcı Ağ Hizmetleri bayrağı olan komutu, --enable-acns
mevcut aks kümesini Kapsayıcı Ağı Gözlemlenebilirliği ve Kapsayıcı Ağ Güvenliği özelliğini içeren tüm Gelişmiş Kapsayıcı Ağ Hizmetleri özellikleriyle güncelleştirir.
Not
Yalnızca Cilium veri düzlemi olan kümeler, Gelişmiş Kapsayıcı Ağ Hizmetleri'nin Kapsayıcı Ağı Güvenliği özelliklerini destekler.
az aks update \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--enable-acns
Küme kimlik bilgilerini alma
Komutunu kullanarak küme kimlik bilgilerinizi alın'a az aks get-credentials
sahip olduktan sonra.
az aks get-credentials --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP
Azure tarafından yönetilen Prometheus ve Grafana
BYO Prometheus ve Grafana kullanıyorsanız bu Bölümü atlayın
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 '{}'
Azure Yönetilen 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
Azure Yönetilen 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 Azure Yönetilen Grafana'yı AKS kümesine bağlama
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
Görselleştirme
Azure Yönetilen Grafana kullanarak görselleştirme
BYO Grafana kullanıyorsanız bu adımı atlayın
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.
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
Ö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).
BYO Grafana kullanarak görselleştirme
Azure tarafından yönetilen Grafana kullanılıyorsa bu adımı atlayın
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
Prometheus Hedefleri bölümünde network-obs-pod'ların mevcut olduğunu doğrulayın.
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.
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=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
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
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
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
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
Hubble Relay podunun komutunu kullanarak çalıştığından
hubble observe
emin olun.hubble observe --pod hubble-relay-7ddd887cdb-h6khj
Hubble kullanıcı arabirimini kullanarak görselleştirme
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
Aşağıdaki komutu kullanarak hubble-ui.yaml bildirimini kümenize uygulayın
kubectl apply -f hubble-ui.yaml
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
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 Container Network Observability'ı yüklemeyi ve etkinleştirmeyi öğrendiniz.
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?.
Kapsayıcı Ağ Güvenliği ve özellikleri hakkında daha fazla bilgi için bkz . Kapsayıcı Ağ Güvenliği nedir?.
Azure Kubernetes Service