Chan of Responsibility
我们常说的责任链模式
k8s中的实现
kube-apiserver中的admission控制器通过责任链模式实现。每个admission控制器都实现了一个AdmissionHandler接口,该接口包含一个名为Admit的方法,用于验证请求是否符合规则。多个admission控制器按照注册顺序形成一个责任链。当请求进来时,apiserver会遍历这个责任链,逐一调用每个admission控制器的Admit方法,只有当所有控制器都通过验证后,请求才会被通过。
1 | // vendor/k8s.io/apiserver/pkg/admission/chain.go |
admission Interface
1 | // vendor/k8s.io/apiserver/pkg/admission/interfaces.go |
调用时机
Matation
1 | // staging/src/k8s.io/apiserver/pkg/endpoints/handlers/create.go |
Validate
1 | // vendor/k8s.io/apiserver/pkg/registry/generic/registry/store.go |
REF:
1.staging/src/k8s.io/apiserver/pkg/endpoints/handlers/create.go
2.staging/src/k8s.io/apiserver/pkg/admission/chain.go
3.staging/src/k8s.io/apiserver/pkg/admission/interfaces.go
4.staging/src/k8s.io/apiserver/pkg/registry/generic/registry/store.go