Aracılığıyla paylaş


Istio hizmet ağı eklentisinde genel sorun giderme

Bu makalede, Microsoft Azure Kubernetes Service (AKS) için Istio hizmet ağı eklentisiyle ilgili sorunları gidermek için genel stratejiler (, ve diğer araçları kullanankubectlistioctl) açıklanır. Bu makalede olası hata iletilerinin listesi, hata oluşumlarının nedenleri ve bu hataların çözümüne yönelik öneriler de sağlanır.

Önkoşullar

Sorun giderme denetim listesi: kubectl kullanma

Aşağıdaki sorun giderme adımları, Istio daemon'da (Istiod) takılan podların veya hataların hatalarını ayıklamanıza yardımcı olmak için çeşitli kubectl komutları kullanır.

1. Adım: Istiod pod günlüklerini alma

Aşağıdaki kubectl logs komutunu çalıştırarak Istiod pod günlüklerini alın:

kubectl logs --selector app=istiod --namespace aks-istio-system

2. Adım: Podu geri sıçrama (silme)

Bir podu yeniden başlatmak için iyi bir nedeniniz olabilir. Istiod bir dağıtım olduğundan kubectl delete komutunu çalıştırarak podu silmeniz güvenlidir:

kubectl delete pods <istio-pod> --namespace aks-istio-system

Istio podu bir dağıtım tarafından yönetildiğinden, doğrudan Istio podunu sildikten sonra pod otomatik olarak yeniden oluşturulur ve yeniden dağıtılır. Bu nedenle, pod'un silinmesi podu yeniden başlatmak için alternatif bir yöntemdir.

Not

Alternatif olarak, aşağıdaki kubectl rollout restart komutunu çalıştırarak dağıtımı doğrudan yeniden başlatabilirsiniz:

kubectl rollout restart deployment <istiod-asm-revision> --namespace aks-istio-system

3. Adım: Kaynakların durumunu denetleme

Istiod zamanlanmadıysa veya pod yanıt vermiyorsa dağıtımın ve çoğaltma kümelerinin durumunu denetlemek isteyebilirsiniz. Bunu yapmak için kubectl get komutunu çalıştırın:

kubectl get <resource-type> [[--selector app=istiod] | [<resource-name>]]

Geçerli kaynak durumu çıkışın sonuna yakın bir şekilde görünür. Çıkış, denetleyici döngüsüyle ilişkili olayları da görüntüleyebilir.

4. Adım: Özel kaynak tanımı türlerini alma

Istio'nun kullandığı özel kaynak tanımlarının (CRD) türlerini görüntülemek için komutunu çalıştırın kubectl get :

kubectl get crd | grep istio

Ardından, belirli bir CRD'yi temel alan tüm kaynak adlarını listelemek için aşağıdaki kubectl get komutu çalıştırın:

kubectl get <crd-type> --all-namespaces

5. Adım: Istiod podlarının listesini görüntüleme

Aşağıdaki kubectl get komutu çalıştırarak Istiod podlarının listesini görüntüleyin:

kubectl get pod --namespace aks-istio-system --output yaml

6. Adım: Elçi yapılandırması hakkında daha fazla bilgi edinin

Podlar arasında bağlantı sorunlarınız varsa, Envoy'un yönetici bağlantı noktasında aşağıdaki kubectl exec komutunu çalıştırarak Envoy yapılandırması hakkında daha fazla bilgi edinin:

kubectl exec --namespace <pod-namespace> \
    "$(kubectl get pods \
        --namespace <pod-namespace> \
        --selector app=sleep \
        --output jsonpath='{.items[0].metadata.name}')" \
    --container sleep \
-- curl -s localhost:15000/clusters

7. Adım: Kaynak ve hedef sepetler için sepet günlüklerini alma

Kaynak ve hedef sepetler için sepet günlüklerini almak için aşağıdaki kubectl logs komutu iki kez çalıştırın (kaynak pod için ilk kez ve hedef pod için ikinci kez):

kubectl logs <pod-name> --namespace <pod-namespace> --container istio-proxy

Sorun giderme denetim listesi: istioctl kullanma

Aşağıdaki sorun giderme adımları, çeşitli istioctl komutları çalıştırarak bilgi toplamayı ve ağ ortamınızda hata ayıklamayı açıklar.

Uyarı

Bazı istioctl komutlar tüm sepetlere istek gönderir.

Not

Başlamadan önce çoğu komutun istioctl kontrol düzlemi düzeltmesini bilmeniz gerektiğini göreceksiniz. Bu bilgileri Istiod dağıtımlarının veya podlarının son ekinden alabilir veya aşağıdaki istioctl etiket listesi komutunu çalıştırabilirsiniz:

istioctl tag list

1. Adım: Istio'nın doğru yüklendiğinden emin olun

Doğru bir Istio eklenti yüklemesine sahip olduğunuzu doğrulamak için aşağıdaki istioctl verify-install komutunu çalıştırın:

istioctl verify-install --istioNamespace aks-istio-system --revision <tag>

2. Adım: Ad alanlarını analiz etme

Tüm ad alanlarını çözümlemek veya belirli bir ad alanını analiz etmek için aşağıdaki istioctl analyze komutunu çalıştırın:

istioctl analyze --istioNamespace aks-istio-system \
    --revision <tag> \
    [--all-namespaces | --namespace <namespace-name>] \
    [--failure-threshold {Info | Warning | Error}]

3. Adım: Ara sunucu durumunu alma

Proxy durumunu almak için aşağıdaki istioctl proxy-status komutunu çalıştırın:

istioctl proxy-status pod/<pod-name> \
    --istioNamespace aks-istio-system \
    --revision <tag> \
    --namespace <pod-namespace>

4. Adım: Ara sunucu yapılandırmasını indirme

Proxy yapılandırmasını indirmek için aşağıdaki istioctl proxy-config all komutunu çalıştırın:

istioctl proxy-config all <pod-name> \
    --istioNamespace aks-istio-system \
    --namespace <pod-namespace> \
    --output json

Not

Komutun değişkenini allistioctl proxy-config kullanmak yerine aşağıdaki değişkenlerden birini kullanabilirsiniz:

5. Adım: Ekleme durumunu denetleme

Kaynağın ekleme durumunu denetlemek için aşağıdaki istioctl deneysel check-inject komutunu çalıştırın:

istioctl experimental check-inject --istioNamespace aks-istio-system \
    --namespace <pod-namespace> \
    --labels <label-selector> | <pod-name> | deployment/<deployment-name>

6. Adım: Tam hata raporu alma

Tam hata raporu en ayrıntılı bilgileri içerir. Ancak, tüm podları içerdiği için büyük bir kümede de zaman alabilir. Hata raporunu belirli ad alanlarıyla sınırlayabilirsiniz. Raporu belirli dağıtımlar, podlar veya etiket seçicilerle de sınırlayabilirsiniz.

Bir hata raporu almak için aşağıdaki istioctl bug-report komutunu çalıştırın:

istioctl bug-report --istioNamespace aks-istio-system \
    [--include <namespace-1>[, <namespace-2>[, ...]]]

Sorun giderme denetim listesi: Çeşitli sorunlar

1. Adım: Kaynak kullanımı sorunlarını düzeltme

Envoy'da yüksek bellek tüketimiyle karşılaşırsanız , istatistik verileri toplama için Elçi ayarlarınızı bir kez daha denetleyin. MeshConfig aracılığıyla Istio ölçümlerini özelleştiriyorsanız, bazı ölçümlerin yüksek kardinaliteye sahip olabileceğini ve bu nedenle daha yüksek bellek ayak izi oluşturabileceğini unutmayın. MeshConfig'deki eşzamanlılık gibi diğer alanlar CPU kullanımını etkiler ve dikkatli bir şekilde yapılandırılmalıdır.

Varsayılan olarak, Istio kümedeki tüm hizmetlerle ilgili bilgileri her Envoy yapılandırmasına ekler. Sepet, bu eklemenin kapsamını yalnızca belirli ad alanları içindeki iş yüklerine sınırlayabilir. Daha fazla bilgi için bkz. Bu Istio proxy sepet belleği tuzakları için dikkat edin.

Örneğin, ad alanında aks-istio-system aşağıdaki Sidecar tanım, ağ aks-istio-system genelindeki tüm proxy'ler ve ilgili uygulamayla aynı ad alanı içindeki diğer iş yükleri için Envoy yapılandırmasını kısıtlar.

apiVersion: networking.istio.io/v1alpha3
kind: Sidecar
metadata:
  name: sidecar-restrict-egress
  namespace: aks-istio-system  # Needs to be deployed in the root namespace.
spec:
  egress:
  - hosts:
    - "./*"
    - "aks-istio-system/*"

MeshConfig'de Istio discoverySelectors seçeneğini kullanmayı da deneyebilirsiniz. seçeneği discoverySelectors bir Kubernetes seçici dizisi içerir ve Istiod'un farkındalığını belirli ad alanlarıyla (kümedeki tüm ad alanlarının aksine) kısıtlayabilir. Daha fazla bilgi için bkz. Istio hizmet ağınız için ad alanlarını yapılandırmak için bulma seçicilerini kullanma.

2. Adım: Trafik ve güvenlik yanlış yapılandırması sorunlarını düzeltme

Istio kullanıcılarının sık karşılaştığı yaygın trafik yönetimi ve güvenlik yanlış yapılandırma sorunlarını gidermek için Istio web sitesindeki Trafik yönetimi sorunları ve Güvenlik sorunları konusuna bakın.

Sepet ekleme, gözlemlenebilirlik ve yükseltmeler gibi diğer sorunlarla ilgili tartışma bağlantıları için Istio belge sitesindeki yaygın sorunlar bölümüne bakın.

3. Adım: CoreDNS aşırı yüklemesinden kaçının

CoreDNS aşırı yüklemeyle ilgili sorunlar, Istio MeshConfig tanımındaki dnsRefreshRate alan gibi belirli Istio DNS ayarlarını değiştirmenizi gerektirebilir.

4. Adım: Pod ve sepet yarış koşullarını düzeltme

Uygulama podunuz Envoy sepet başlamadan önce başlatılırsa, uygulama yanıt vermemeye başlar veya yeniden başlatabilir. Bu sorunu önleme hakkında yönergeler için bkz. Istio-proxy hazır değilse pod veya kapsayıcılar ağ sorunlarıyla başlar. Özellikle, altında MeshConfig alanının defaultConfig olarak ayarlanması holdApplicationUntilProxyStarts bu yarış koşullarının önlenmesine true yardımcı olabilir.

Yaygın hata iletileri

Aşağıdaki tabloda olası hata iletilerinin listesi (eklentiyi dağıtmak, giriş ağ geçitlerini etkinleştirmek ve yükseltmeleri gerçekleştirmek için), bir hatanın oluşma nedeni ve hatayı çözmeye yönelik öneriler yer alır.

Error Neden Öneriler
Azure service mesh is not supported in this region Özellik önizleme sırasında bölgede kullanılamaz (genel bulutta kullanılabilir ancak bağımsız bulutta kullanılamaz). Desteklenen bölgelerdeki özellik hakkında genel belgelere bakın.
Missing service mesh mode: {} Yönetilen küme isteğinin hizmet ağı profilinde mod özelliğini ayarlamadınız. API isteğinin ServiceMeshProfile alanında managedCluster özelliğini olarak Istioayarlayınmode.
Invalid istio ingress mode: {} Hizmet ağı profiline giriş eklerken giriş modu için geçersiz bir değer ayarlarsınız. API isteğindeki giriş modunu veya Internalolarak External ayarlayın.
Too many ingresses for type: {}. Only {} ingress gateway are allowed Kümede çok fazla giriş oluşturmaya çalıştınız. İçerik Oluşturucu, kümede en fazla bir dış giriş ve bir iç giriş.
Istio profile is missing even though Service Mesh mode is Istio Istio profilini sağlamadan Istio eklentisini etkinleştirmişsiniz. Istio eklentisini etkinleştirdiğinizde, Istio profili ve belirli düzeltme için bileşene özgü (giriş ağ geçidi, eklenti CA) bilgilerini belirtin.
Istio based Azure service mesh is incompatible with feature %s Şu anda Istio eklentisiyle uyumsuz olan başka bir uzantı, eklenti veya özellik kullanmayı denediniz (örneğin, Open Service Mesh). Istio eklentisini etkinleştirmeden önce diğer özelliği devre dışı bırakın ve ilgili tüm kaynakları temizleyin.
ServiceMeshProfile is missing required parameters: %s for plugin certificate authority Eklenti CA'sı için tüm gerekli parametreleri sağlamadınız. Eklenti sertifika yetkilisi (CA) özelliği için tüm gerekli parametreleri sağlayın (daha fazla bilgi için bkz. Eklenti CA sertifikaları ile Istio tabanlı hizmet ağı eklentisini ayarlama).
AzureKeyvaultSecretsProvider addon is required for Azure Service Mesh plugin certificate authority feature Eklenti CA'sını kullanmadan önce AKS Secrets-Store CSI Sürücüsü eklentisini etkinleştirmemişsinizdir. Eklenti CA özelliğini kullanmadan önce Azure Key Vault ayarlayın.
'KeyVaultId': '%s' is not a valid Azure keyvault resource identifier. Please make sure that the format matches '/subscriptions//resourceGroups//providers/Microsoft.KeyVault/vaults/' Geçersiz bir AKS kaynak kimliği kullandınız. Eklenti CA özelliği için geçerli bir Azure Key Vault kimliği ayarlamak için hata iletisinde bahsedilen biçime bakın.
Kubernetes version is missing in orchestrator profile İsteğinizde Kubernetes sürümü eksik. Bu nedenle, sürüm uyumluluk denetimi yapamaz. Istio eklenti yükseltme işlemlerinde Kubernetes sürümünü sağladığınıza emin olun.
Service mesh revision %s is not compatible with cluster version %s. To find information about mesh-cluster compatibility, use 'az aks mesh get-upgrades' Geçerli Kubernetes kümesi sürümüyle uyumlu olmayan bir Istio eklenti düzeltmesini etkinleştirmeyi denediniz. Geçerli küme için hangi Istio eklenti düzeltmelerinin kullanılabilir olduğunu öğrenmek için az aks mesh get-upgrades Azure CLI komutunu kullanın.
Kubernetes version %s not supported. Please upgrade to a supported cluster version first. To find compatibility information, use 'az aks mesh get-upgrades' Desteklenmeyen bir Kubernetes sürümü kullanıyorsunuz. Desteklenen bir Kubernetes sürümüne yükseltin.
ServiceMeshProfile revision field must not be empty Bir düzeltme belirtmeden Istio eklentisini yükseltmeyi denediniz. Düzeltmeyi ve diğer tüm parametreleri belirtin (daha fazla bilgi için bkz . Küçük düzeltme yükseltmesi).
Request exceeds maximum allowed number of revisions (%d) Zaten (%d) düzeltmeler yüklü olsa bile bir yükseltme işlemi yapmayı denediniz. Başka bir düzeltmeye yükseltmeden önce yükseltme işlemini tamamlayın veya geri alma.
Mesh upgrade is in progress. Please complete or roll back the current upgrade before attempting to retrieve versioning and compatibility information Geçerli yükseltme işlemini tamamlamadan veya geri almadan önce düzeltme ve uyumluluk bilgilerine erişmeye çalıştınız. Düzeltme ve uyumluluk bilgilerini almadan önce geçerli yükseltme işlemini tamamlayın veya geri alın.

Başvurular

Üçüncü taraf bilgileri hakkında yasal uyarı

Bu makalede adı geçen üçüncü taraf ürünleri Microsoft'tan bağımsız şirketler tarafından üretilmektedir. Microsoft, bu ürünlerin performansı veya güvenilirliği ile ilgili örtük veya başka türlü hiçbir garanti vermez.

Yardım için bize ulaşın

Sorularınız veya yardıma ihtiyacınız varsa bir destek isteği oluşturun veya Azure topluluk desteği isteyin. Ürün geri bildirimini Azure geri bildirim topluluğuna da gönderebilirsiniz.