slime-io / slime

An intelligent ServiceMesh manager based on Istio
https://slime-io.github.io/
Other
424 stars 78 forks source link

lazyload: support managementSelector and black/white ns list #412

Closed MouceL closed 1 year ago

MouceL commented 1 year ago

lazyload已经支持了基于注解(slime.io/serviceFenced: true)的半自动方式开启服务懒加载,

也提供了全自动开启服务懒加载(slimeboot中设置autofence、defaultfence)

之前,在autofence场景下会纳管全部ns


本PR将支持自定义纳管命名空间,只会在符合的命名空间下,才有机会生成servicefence

这个PR之后,生成servicefence将会经过以下步骤的判断:

  1. 是否在namespaceList/managementSelectors 范围内
  2. 在1前提下,判断是否拥有 ns/svc anno,根据anno实际定义决定是否生成servicefence
  3. 在1前提下,ns/svc 没有anno, 那么根据defautlfence值决定是否生成servicefence(默认true)

设计如下:

  1. 基于标签的匹配的managementSelectors
  2. ns黑白名单

定义如下

  repeated k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector managementSelectors = 19;

  // A list of namespaces that should be excluded or include
  //  when autoFence is true, namespaceList will take effect
  oneof namespaceList {
    string blackNamespaceList = 20;
    string whiteNamespaceList = 21;
  }

blackNamespaceList 和 whiteNamespaceList 只能二选一

namespaceList 和 managementSelectors 都要满足, 先进行黑白名单过滤,再进行selctor过滤


样例:

在autofence场景下,

不管理带有 istio-injection: disabled 标签的ns

也不管理kube-system,istio-system,mesh-operator

也就是这几个ns下不会生成servicefence

kind: SlimeBoot
metadata:
  name: lazyload
  namespace: mesh-operator
spec:
  module:
    - name: lazyload
      kind: lazyload
      enable: true
      general:
        blackNamespaceList: kube-system,istio-system,mesh-operator
        managementSelectors:
        - matchExpressions:
          - key: "istio-injection"
            operator: NotIn
            values:
            - "disabled"  
       // xx
YonkaFang commented 1 year ago

namespaceList 和 managementSelectors 是 AND 关系 ? 你是指∩还是∪?

YonkaFang commented 1 year ago

明确一下 namespaceList/managementSelectors 与 autofence的关系(ns、svc annotation)

MouceL commented 1 year ago

namespaceList 和 managementSelectors 是 AND 关系 ? 你是指∩还是∪?

∩ , 串行处理,都要满足