slime-io/slime

不支持External Control Plane方案架构

dryheartGo opened this issue · 7 comments

使用External Control Plane方案部署Istio,limiter组件不支持

  • Slime version: 0.6.0
  • Istio version: 1.13.2
  • k8s version: 1.21.10

[ ] Configuration Lazy Loading
[ ] Http Plugin Management
[X] Adaptive Ratelimit
[ ] Slime Boot

limiter log:

time=2023-03-16T09:54:26Z level=info msg=get err in queryServicePods, get service namespace/xxx-service faild, services "xxx-service" not found module=limiter pkg=controllers

感觉是limiter使用了k8s api,无法找到remote cluster的CR信息

目前 Slime 支持多主的多集群场景,每套集群单独部署一套 Slime ,只管理本集群。

主从架构的多集群场景我们没有验证过,可以尝试通过配置 configSources 字段,指定多个 apiserver 地址来实现。一个例子如下

# slimeboot cr
apiVersion: config.netease.com/v1alpha1
kind: SlimeBoot
metadata:
  name: limiter
  namespace: mesh-operator
spec:
  image:
    pullPolicy: Always
    repository: docker.io/slimeio/slime-limiter
    tag: v0.6.0_linux_amd64
  module:
    - name: limiter
      kind: limiter
      enable: true
      general:
        disableGlobalRateLimit: true
        disableAdaptive: true
        disableInsertGlobalRateLimit: true
      global:
        log:
          logLevel: info
        configSources:
          - address: k8s://xxx
          - address: k8s://xxx 

k8s 不同集群之间 pod 的 ip 可能会有冲突,我看了下代码 sourceSvc 是根据 dowloadAddress 获取的,这样是不是就可能获取到错误的依赖关系了~

k8s 不同集群之间 pod 的 ip 可能会有冲突,我看了下代码 sourceSvc 是根据 dowloadAddress 获取的,这样是不是就可能获取到错误的依赖关系了~

这里我们考虑的多集群场景前提是单网络,即多集群的pod ip可直接访问,不会彼此冲突

xdccy commented

目前 Slime 支持多主的多集群场景,每套集群单独部署一套 Slime ,只管理本集群。

主从架构的多集群场景我们没有验证过,可以尝试通过配置 configSources 字段,指定多个 apiserver 地址来实现。一个例子如下

# slimeboot cr
apiVersion: config.netease.com/v1alpha1
kind: SlimeBoot
metadata:
  name: limiter
  namespace: mesh-operator
spec:
  image:
    pullPolicy: Always
    repository: docker.io/slimeio/slime-limiter
    tag: v0.6.0_linux_amd64
  module:
    - name: limiter
      kind: limiter
      enable: true
      general:
        disableGlobalRateLimit: true
        disableAdaptive: true
        disableInsertGlobalRateLimit: true
      global:
        log:
          logLevel: info
        configSources:
          - address: k8s://xxx
          - address: k8s://xxx 

我们在主从模式下配置了configSource,格式为k8s://https://xxxxxxxx.eks.amazonaws.com。但是limiter日志中会报错:
level=error msg=[svcToIstioResHandler] [EventAdd] ConvertSvcAndEps error: failed to get related pod for endpoint。是我们的配置有问题吗?

这个configSource只实现了istio cofnigSource的部分功能

实际slime并没有从store里获取数据

xdccy commented

这个configSource只实现了istio cofnigSource的部分功能

实际slime并没有从store里获取数据

意思是在多主架构的场景下目前slime的支持还不足是嘛

基本没有考虑多主架构的场景

这方向有很多东西可以做