Istio: сопутствующий EnvoyFilter workloadSelector не фильтрует - PullRequest
2 голосов
/ 10 июля 2020

У меня проблема, когда два EnvoyFilter с разными workloadSelector, которые должны применяться к разным рабочим нагрузкам модулей, вместо этого применяются к обеим рабочим нагрузкам. 9, и у меня есть два экземпляра одной и той же рабочей нагрузки развертывания в двух разных пространствах имен, и каждая рабочая нагрузка имеет сопутствующий элемент. К каждому развертыванию применяются разные метки.

kubectl get po --show-labels --all-namespaces -l app=myapp,namespace
NAMESPACE   NAME                    ...truncated...  LABELS
first       myapp-58489c8fcd-kch9f  ...truncated...  app=myapp,namespace=first ...truncated...
second      myapp-6f58dd65dd-tdjm7  ...truncated...  app=myapp,namespace=second ...truncated...

Я хочу присоединить разные экземпляры Lua EnvoyFilter к каждой рабочей нагрузке в каждом пространстве имен, чтобы у каждого был свой собственный фильтр. Так, например, фильтр для первого пространства имен выглядит следующим образом. Второй аналогичен, но с другим workloadSelector

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name:  first-myapp-filter
  ...truncated...
spec:
  workloadSelector:
    labels:
      app: myapp
      namespace: first

Однако я вижу, что данная рабочая нагрузка обрабатывает ОБЕИХ envoyfilters, а не только фильтр, который соответствует селектору. Когда я смотрю на слушателей модуля в первом пространстве имен с istioctl, я вижу, что к нему прикреплены ОБЕИ фильтры.

"httpFilters": [
  {"name": "envoy.lua", "config": {"inlineCode": "function ...truncated... end\n" }},
  {"name": "envoy.lua", "config": {"inlineCode": "function ...truncated... end\n" }}

Селектор, похоже, работает не так, как я ожидал. Есть идеи, как отлаживать?

1 Ответ

2 голосов
/ 11 июля 2020

Единственное, о чем я могу думать, это то, что вы определили свой EnvoyFilter в config root пространство имен , и оно игнорирует workloadSelector.

Если вы видите docs :

ПРИМЕЧАНИЕ 3. * _Чтобы применить ресурс EnvoyFilter ко всем рабочим нагрузкам (боковым машинам и шлюзам) в системе, определите ресурс в пространстве имен config root без workloadSelector.

Попробуйте создать 2 фильтра EnvoyFilter, каждый в каждом пространстве имен, где существуют ваши рабочие нагрузки, и удалите исходный фильтр EnvoyFilter. Примерно так:

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name:  first-myapp-filter
  namespace: first
spec:
  workloadSelector:
    labels:
      app: myapp
      namespace: first
...

и

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name:  second-myapp-filter
  namespace: second
spec:
  workloadSelector:
    labels:
      app: myapp
      namespace: second
...

Примечание: вы также можете попробовать разные ярлыки. Например, app: myapp1, app: myapp2.

.
...