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
- 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.
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 Registered
sonra 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
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.
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 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
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 relay service
emin olun.hubble relay service
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 bağlantı noktası iletmeyi ayarlayarak hizmeti kullanıma sunma
kubectl port-forward
.kubectl 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 Gelişmiş Ağ Gözlemlenebilirliği'ni 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?.
Gelişmiş Ağ Gözlemlenebilirliği ve Azure tarafından yönetilen Prometheus ve Grafana ile aks kümesi oluşturmak için bkz . Azure Kubernetes Service (AKS) Azure yönetilen Prometheus ve Grafana için Gelişmiş Ağ Gözlemlenebilirliği Kurulumu.
Azure Kubernetes Service