概念
聚合APIServer
以下简称为AA
,
操作etcd
的代码在k8s.io\apiserver\pkg\storage\etcd3\store.go
中,而不是在生成的代码中。。。。。
选择请求:
一切都从webservice中来:
报404:
namespace资源为true,cluster资源为false
此时就正常了:
expected pointer, but got invalid kind
"{\"kind\":\"Status\",\"apiVersion\":\"v1\",\"metadata\":{},\"status\":\"Failure\",\"message\":\"expected pointer, but got invalid kind\",\"code\":500}\n"
这是因为create返回值必须实现runtime.Object接口,直接返回nil会导致上面的错误。返回入参中的结构体即可。
func (m *MiddlewareServerStorage) Create(ctx context.Context, obj runtime.Object, createValidation rest.ValidateObjectFunc, options *metav1.CreateOptions) (runtime.Object, error) {
reNode := obj.(*v1alpha1.RemoveNode)
klog.Infof("create removeNode: %+v, namespace: %v", reNode, reNode.Namespace)
return reNode, nil
}
请求过滤
AA
使用
metrics-server的readyz接口探针报403,报错没权限。但healthz接口不报错,middleware-server也一样:
难道readyz和healthz接口的授权方式不一样?其实APIServer也一样:v1.13.2集群测试
但在v1.17.3集群测试时ok的:
说明APIServer在升级过程中修改过readyz授权这块。
但是middleware-server在重构代码之前(也就是在生成代码的基础上修改后的版本readyz是可以的),按照metrics-server、ippool-server重构过之后就出这个问题。
是这个参数导致的,之前在启动参数里置为了false,所以不报错。
代码生成框架apiserver-builder-alpha专门加了这个参数用来去认证授权的。