Hata oranı sınırlayıcı işleyici hata ayıklama


9

Bazı iç hizmetler (mesh içinde) oranı sınırlama uygulamaya çalışıyorum.

Dokümanlardan örnek kullandım ve işleyiciyi uygulamak için (redis) işleyicisi, kota örneği, kota özelliği, kota özelliği bağlaması ve kuralı içeren redis oranı sınırlama yapılandırmaları oluşturdum.

Bu yeniden işleyici:

apiVersion: config.istio.io/v1alpha2
kind: handler
metadata:
  name: redishandler
  namespace: istio-system
spec:
  compiledAdapter: redisquota
  params:
    redisServerUrl: <REDIS>:6379
    connectionPoolSize: 10
    quotas:
    - name: requestcountquota.instance.istio-system
      maxAmount: 10
      validDuration: 100s
      rateLimitAlgorithm: FIXED_WINDOW
      overrides:
      - dimensions:
          destination: s1
        maxAmount: 1
      - dimensions:
          destination: s3
        maxAmount: 1
      - dimensions:
          destination: s2
        maxAmount: 1

Kota örneği (Şu anda yalnızca hedefe göre sınırlama ile ilgileniyorum):

apiVersion: config.istio.io/v1alpha2
kind: instance
metadata:
  name: requestcountquota
  namespace: istio-system
spec:
  compiledTemplate: quota
  params:
    dimensions:
      destination: destination.labels["app"] | destination.service.host | "unknown"

Bir kota spec, doğru anlıyorsam istek başına 1 şarj:

apiVersion: config.istio.io/v1alpha2
kind: QuotaSpec
metadata:
  name: request-count
  namespace: istio-system
spec:
  rules:
  - quotas:
    - charge: 1
      quota: requestcountquota

Katılan tüm hizmetlerin önceden getirdiği kota bağlama özelliği. Ben de denedim service: "*"hangi da hiçbir şey yapmadı.

apiVersion: config.istio.io/v1alpha2
kind: QuotaSpecBinding
metadata:
  name: request-count
  namespace: istio-system
spec:
  quotaSpecs:
  - name: request-count
    namespace: istio-system
  services:
  - name: s2
    namespace: default
  - name: s3
    namespace: default
  - name: s1
    namespace: default
    # - service: '*'  # Uncomment this to bind *all* services to request-count

İşleyiciyi uygulamak için bir kural. Şu anda tüm durumlarda (maçlarla denendi, ancak hiçbir şey değiştirmedi):

apiVersion: config.istio.io/v1alpha2
kind: rule
metadata:
  name: quota
  namespace: istio-system
spec:
  actions:
  - handler: redishandler
    instances:
    - requestcountquota

VirtualService tanımları tüm katılımcılar için oldukça benzerdir:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: s1
spec:
  hosts:
  - s1

  http:
  - route:
    - destination:
        host: s1

Sorun gerçekten hiçbir şey olmuyor ve hiçbir hız sınırlaması gerçekleşmiyor. curlAğın içindeki kapsüllerden test ettim . Redis örneği boş (hız sınırlaması ne kullanacağını varsayalım db 0, hiçbir anahtar) bu yüzden pratik bir şey hız sınırı olamaz biliyorum.

İşleyici düzgün yapılandırılmış gibi görünüyor (nasıl emin olabilirim?) Çünkü karıştırıcıda (politika) bildirilen bazı hatalar vardı. Hala bazı hatalar var ama bu sorunla veya yapılandırmayla ilişkilendirdiğim hiçbir hata yok. Redis işleyicisinin bahsedildiği tek satır şudur:

2019-12-17T13:44:22.958041Z info    adapters    adapter closed all scheduled daemons and workers    {"adapter": "redishandler.istio-system"}   

Ama bu bir sorun olup olmadığı belirsiz. Sanmıyorum.

Bunlar, dağıtıldıktan sonra yeniden yüklemeden kalan satırlardır:

2019-12-17T13:44:22.601644Z info    Built new config.Snapshot: id='43'
2019-12-17T13:44:22.601866Z info    adapters    getting kubeconfig from: "" {"adapter": "kubernetesenv.istio-system"}
2019-12-17T13:44:22.601881Z warn    Neither --kubeconfig nor --master was specified.  Using the inClusterConfig.  This might not work.
2019-12-17T13:44:22.602718Z info    adapters    Waiting for kubernetes cache sync...    {"adapter": "kubernetesenv.istio-system"}
2019-12-17T13:44:22.903844Z info    adapters    Cache sync successful.  {"adapter": "kubernetesenv.istio-system"}
2019-12-17T13:44:22.903878Z info    adapters    getting kubeconfig from: "" {"adapter": "kubernetesenv.istio-system"}
2019-12-17T13:44:22.903882Z warn    Neither --kubeconfig nor --master was specified.  Using the inClusterConfig.  This might not work.
2019-12-17T13:44:22.904808Z info    Setting up event handlers
2019-12-17T13:44:22.904939Z info    Starting Secrets controller
2019-12-17T13:44:22.904991Z info    Waiting for informer caches to sync
2019-12-17T13:44:22.957893Z info    Cleaning up handler table, with config ID:42
2019-12-17T13:44:22.957924Z info    adapters    deleted remote controller   {"adapter": "kubernetesenv.istio-system"}
2019-12-17T13:44:22.957999Z info    adapters    adapter closed all scheduled daemons and workers    {"adapter": "prometheus.istio-system"}
2019-12-17T13:44:22.958041Z info    adapters    adapter closed all scheduled daemons and workers    {"adapter": "redishandler.istio-system"}   
2019-12-17T13:44:22.958065Z info    adapters    shutting down daemon... {"adapter": "kubernetesenv.istio-system"}
2019-12-17T13:44:22.958050Z info    adapters    shutting down daemon... {"adapter": "kubernetesenv.istio-system"}
2019-12-17T13:44:22.958096Z info    adapters    shutting down daemon... {"adapter": "kubernetesenv.istio-system"}
2019-12-17T13:44:22.958182Z info    adapters    shutting down daemon... {"adapter": "kubernetesenv.istio-system"}
2019-12-17T13:44:23.958109Z info    adapters    adapter closed all scheduled daemons and workers    {"adapter": "kubernetesenv.istio-system"}
2019-12-17T13:55:21.042131Z info    transport: loopyWriter.run returning. connection error: desc = "transport is closing"
2019-12-17T14:14:00.265722Z info    transport: loopyWriter.run returning. connection error: desc = "transport is closing"

demoProfili, disablePolicyChecks: falsehız sınırlamasını etkinleştirmek için ile kullanıyorum . Bu, istio 1.4.0'da, EKS'e dağıtılmıştır.

Ayrıca düşük limitlerle memquota (bu bizim evreleme ortamı) denedim ve hiçbir şey işe yaramaz gibi görünüyor. Yapılandırılan ücret sınırını ne kadar aştığım önemli değil.

Ben nasıl hata ayıklama ve hiçbir şey yapmasına neden yapılandırma nerede yanlış olduğunu bilmiyorum.

Herhangi bir yardım takdir.


+1, aynı zamanda düz kubeadm temiz kümesinde 1.4.2 ve memquota ile çalışan bir şey elde edemiyorum. Hata ayıklamak için önemli miktarda zaman geçirdim. Burada da bazı cevaplar görmek isterim. Bir ödül kazanacağım.
gertvdijk

Şimdiye kadar en büyük ödülü koydum. Süresi dolmuş.
Reut Sharabani

Yanıtlar:


2

Ben de belgeleri deşifre ve bir örnek almak için saatler harcadım.

Belgelere göre, politika kontrollerini etkinleştirmemizi tavsiye ettiler:

https://istio.io/docs/tasks/policy-enforcement/rate-limiting/

Ancak bu işe yaramadı, ben bir "istioctl profil dökümü" yaptım, politika için arama ve birkaç ayar denedim.

Helm kurulumunu kullandım ve aşağıdakileri geçtim ve sonra açıklanan davranışı elde edebildim:

--set global.disablePolicyChecks = false \ --set değerleri.pilot.policy.enabled = true \ ===> bu işe yaradı, ancak dokümanlar içinde değil.


1
Teşekkür ederim! Bu çok eski ve istio (kısmen bu nedenle) düştü. Bunun neden çalışmadığına dair bazı ipuçlarına işaret ettiğiniz için size lütuf vereceğim: github.com/istio/istio/issues/19139
Reut
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.