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. curl
Ağı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"
demo
Profili, disablePolicyChecks: false
hı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.