# 过滤规则
这里主要介绍过滤规则的使用,支持按namespace、type、labels过滤etcd集群中的k8s数据。如果规则文件中未配置任何规则,则不会进行任何数据的同步。
提示
当前过滤规则主要适用于过滤etcd中的Kubernetes数据。
过滤规则配置文件是yaml格式的,基本结构如下:
filters:
sequential: []
secondary: []
1
2
3
2
3
# 优先级
# sequential
这部分用于配置需要被优先同步的数据,适用于对数据同步有顺序要求的场景。
# secondary
这部分是同步次优先级的数据,在sequential
部分的数据同步完成后,才开始该部分的数据同步。
# 标签
支持三种标签:
- labelSelectors
- namespaceSelectors
- fieldSelectors
标签匹配规则格式如下,支持多个规则,多个规则满足其一则代表匹配成功:
matchExpressions:
- key: // 标签的key
operator: // 支持"In"、"NotIn"、"Exists"、"DoesNotExist"
values: // 标签的value
- xx
- xxx
1
2
3
4
5
6
2
3
4
5
6
# labelSelectors
# 符合下面标签规则的数据将会被同步。
labelSelectors:
- matchExpressions:
- key: etcd-carry.io/test
operator: In
values:
- "true"
# 即A的labels包含"etcd-carry.io/test: true",那么A将会被同步。
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# namespaceSelectors
# namespace中包含的标签符合下面规则的数据将会被同步。
namespaceSelectors:
- matchExpressions:
- key: etcd-carry.io/namespace-kind
operator: In
values:
- test1
- test2
# 即A的namespace为ns,ns中labels包含"etcd-carry.io/namespace-kind: test1" 或 "etcd-carry.io/namespace-kind: test2",那么A将会被同步。
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# fieldSelectors
# 某个字段符合下面规则的数据将会被同步
fieldSelectors:
- matchExpressions:
- key: type
operator: NotIn
values:
- kubernetes.io/service-account-token
# 即A的"type"字段不为"kubernetes.io/service-account-token",那么A将会被同步。
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# namespace
该命名空间下的数据都会被同步到目的集群,未指定namespace则代表所有命名空间。即使同时指定了namespaceSelectors
,也只匹配namespace
。
# group
k8s资源所属的apiGroup,"*"代表所有apiGroup。
# resources
同步k8s的某种资源,列表形式,格式如下:
# 比如,同步CRD、Secret到目的集群
resources:
- group: apiextensions.k8s.io
version: v1beta1
kind: CustomResourceDefinition
- group: ""
version: v1
Kind: Secret
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# excludes
从同步数据中排除指定资源,支持多个规则,满足任意一条则不会被同步,支持以下字段:
- resource
- namespace
- name
- labelSelectors
# resource
排除某一种指定的资源:
# 排除CRD
excludes:
- resource:
group: apiextensions.k8s.io
version: v1beta1
kind: CustomResourceDefinition
1
2
3
4
5
6
2
3
4
5
6
# namespace
排除指定命名空间的资源,默认代表所有命名空间:
# 排除test命名空间下的"failover.etcd-carry.io/v1alpha1, Kind=ControllerFailOver"资源
excludes:
- resource:
group: failover.etcd-carry.io
version: v1alpha1
kind: ControllerFailOver
namespace: test
1
2
3
4
5
6
7
2
3
4
5
6
7
# name
排除指定名称的资源:
# 排除test命名空间下名为etcd-carry的Secret资源
excludes:
- resource:
group: ""
version: v1
kind: Secret
name: etcd-carry
namespace: test
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# labelSelectors
排除符合标签规则的资源:
# 排除labels中包含"app.etcd-carry.io/required-on-controller: true"标签项的"app.etcd-carry.io/v1beta1, Kind=Cell"资源
excludes:
- resource:
group: "app.etcd-carry.io"
version: v1beta1
kind: Cell
labelSelectors:
- matchExpressions:
- key: app.etcd-carry.io/required-on-controller
operator: In
values:
- "true"
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 示例
通过下面的示例来说明过滤规则:
filters:
# 首先sequential中的CRD资源,以及带有"test.io/namespace-kind: unique"标签项的namespace资源会被优先同步到目的集群
sequential:
- group: apiextensions.k8s.io
resources:
- group: apiextensions.k8s.io
version: v1
kind: CustomResourceDefinition
- group: ""
resources:
- version: v1
kind: Namespace
labelSelectors:
- matchExpressions:
- key: test.io/namespace-kind
operator: In
values:
- unique
# sequential中的CRD、Namespace同步完成后,开始同步符合secondary中规则的资源
secondary:
# 所属namespace的labels含有"test.io/namespace-kind: unique"的资源都会被同步,但labels中含有"test.io/namespace-kind:"标签项的Secret资源除外。
- group: "*"
namespaceSelectors:
- matchExpressions:
- key: test.io/namespace-kind
operator: In
values:
- unique
excludes:
- resource:
version: v1
kind: Secret
labelSelectors:
- matchExpressions:
- key: test.io/namespace-kind
operator: Exists
# unit-test命名空间下type不为"kubernetes.io/service-account-token"的Secret资源都会被同步,但unit-test命名空间下名为exclude-me-secret的Secret除外。
- group: ""
resources:
- version: v1
Kind: Secret
namespace: unit-test
fieldSelectors:
- matchExpressions:
- key: type
operator: NotIn
values:
- kubernetes.io/service-account-token
excludes:
- resource:
version: v1
kind: Secret
name: exclude-me-secret
namespace: unit-test
# unit-test命名空间下labels包含"test.io/namespace-kind:"标签项的ConfigMap资源都会被同步。
- group: ""
resources:
- version: v1
kind: ConfigMap
namespace: unit-test
labelSelectors:
- matchExpressions:
- key: test.io/namespace-kind
operator: Exists
# 集群中所有labels包含"test.io/namespace-kind"标签项的Service资源都会被同步。
- group: ""
resources:
- version: v1
kind: Service
labelSelectors:
- matchExpressions:
- key: test.io/namespace-kind
operator: Exists
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73