remove the karmada client from aggregated-apiserver

Signed-off-by: carlory <baofa.fan@daocloud.io>
This commit is contained in:
carlory 2021-12-29 11:09:30 +08:00
parent 878a71a673
commit 17578c8466
4 changed files with 23 additions and 37 deletions

View File

@ -21,7 +21,6 @@ import (
"github.com/karmada-io/karmada/pkg/aggregatedapiserver"
clusterv1alpha1 "github.com/karmada-io/karmada/pkg/apis/cluster/v1alpha1"
clientset "github.com/karmada-io/karmada/pkg/generated/clientset/versioned"
karmadaclientset "github.com/karmada-io/karmada/pkg/generated/clientset/versioned"
informers "github.com/karmada-io/karmada/pkg/generated/informers/externalversions"
)
@ -87,9 +86,8 @@ func (o *Options) Run(ctx context.Context) error {
}
restConfig.QPS, restConfig.Burst = o.KubeAPIQPS, o.KubeAPIBurst
kubeClientSet := kubernetes.NewForConfigOrDie(restConfig)
karmadaClient := karmadaclientset.NewForConfigOrDie(restConfig)
server, err := config.Complete().New(kubeClientSet, karmadaClient)
server, err := config.Complete().New(kubeClientSet)
if err != nil {
return err
}

View File

@ -13,7 +13,6 @@ import (
clusterapis "github.com/karmada-io/karmada/pkg/apis/cluster"
clusterinstall "github.com/karmada-io/karmada/pkg/apis/cluster/install"
karmadaclientset "github.com/karmada-io/karmada/pkg/generated/clientset/versioned"
clusterstorage "github.com/karmada-io/karmada/pkg/registry/cluster/storage"
)
@ -86,7 +85,7 @@ func (cfg *Config) Complete() CompletedConfig {
return CompletedConfig{&c}
}
func (c completedConfig) New(kubeClient kubernetes.Interface, karmadaClient karmadaclientset.Interface) (*APIServer, error) {
func (c completedConfig) New(kubeClient kubernetes.Interface) (*APIServer, error) {
genericServer, err := c.GenericConfig.New("aggregated-apiserver", genericapiserver.NewEmptyDelegate())
if err != nil {
return nil, err
@ -98,7 +97,7 @@ func (c completedConfig) New(kubeClient kubernetes.Interface, karmadaClient karm
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(clusterapis.GroupName, Scheme, ParameterCodec, Codecs)
clusterStorage, err := clusterstorage.NewStorage(Scheme, kubeClient, karmadaClient, c.GenericConfig.RESTOptionsGetter)
clusterStorage, err := clusterstorage.NewStorage(Scheme, kubeClient, c.GenericConfig.RESTOptionsGetter)
if err != nil {
klog.Errorf("unable to create REST storage for a resource due to %v, will die", err)
return nil, err

View File

@ -13,19 +13,19 @@ import (
"k8s.io/apimachinery/pkg/util/proxy"
"k8s.io/apiserver/pkg/endpoints/handlers/responsewriters"
"k8s.io/apiserver/pkg/endpoints/request"
genericregistry "k8s.io/apiserver/pkg/registry/generic/registry"
"k8s.io/apiserver/pkg/registry/rest"
"k8s.io/client-go/kubernetes"
clusterapis "github.com/karmada-io/karmada/pkg/apis/cluster"
karmadaclientset "github.com/karmada-io/karmada/pkg/generated/clientset/versioned"
)
// ProxyREST implements the proxy subresource for a Cluster.
type ProxyREST struct {
Store *genericregistry.Store
Redirector rest.Redirector
kubeClient kubernetes.Interface
karmadaClient karmadaclientset.Interface
kubeClient kubernetes.Interface
}
// Implement Connecter
@ -61,7 +61,7 @@ func (r *ProxyREST) Connect(ctx context.Context, id string, options runtime.Obje
}
location.Path = proxyOpts.Path
impersonateToken, err := r.getImpersonateToken(id)
impersonateToken, err := r.getImpersonateToken(ctx, id)
if err != nil {
return nil, fmt.Errorf("failed to get impresonateToken for cluster %s: %v", id, err)
}
@ -69,8 +69,8 @@ func (r *ProxyREST) Connect(ctx context.Context, id string, options runtime.Obje
return newProxyHandler(location, transport, impersonateToken, responder)
}
func (r *ProxyREST) getImpersonateToken(clusterName string) (string, error) {
cluster, err := r.karmadaClient.ClusterV1alpha1().Clusters().Get(context.TODO(), clusterName, metav1.GetOptions{})
func (r *ProxyREST) getImpersonateToken(ctx context.Context, clusterName string) (string, error) {
cluster, err := getCluster(ctx, r.Store, clusterName)
if err != nil {
return "", err
}

View File

@ -16,41 +16,21 @@ import (
"sigs.k8s.io/structured-merge-diff/v4/fieldpath"
clusterapis "github.com/karmada-io/karmada/pkg/apis/cluster"
karmadaclientset "github.com/karmada-io/karmada/pkg/generated/clientset/versioned"
"github.com/karmada-io/karmada/pkg/printers"
printersinternal "github.com/karmada-io/karmada/pkg/printers/internalversion"
printerstorage "github.com/karmada-io/karmada/pkg/printers/storage"
clusterregistry "github.com/karmada-io/karmada/pkg/registry/cluster"
)
// ClusterStorage includes storage for Cluster and for Status subresource.
// ClusterStorage includes storage for Cluster and for all the subresources.
type ClusterStorage struct {
Cluster *REST
Status *StatusREST
Proxy *ProxyREST
}
// NewStorage returns new instance of ClusterStorage.
func NewStorage(scheme *runtime.Scheme, kubeClient kubernetes.Interface, karmadaClient karmadaclientset.Interface,
optsGetter generic.RESTOptionsGetter) (ClusterStorage, error) {
clusterRest, clusterStatusRest, err := NewREST(scheme, optsGetter)
if err != nil {
return ClusterStorage{}, err
}
return ClusterStorage{
Cluster: clusterRest,
Status: clusterStatusRest,
Proxy: &ProxyREST{
Redirector: clusterRest,
kubeClient: kubeClient,
karmadaClient: karmadaClient,
},
}, nil
}
// NewREST returns a RESTStorage object that will work against API services.
func NewREST(scheme *runtime.Scheme, optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST, error) {
// NewStorage returns a ClusterStorage object that will work against clusters.
func NewStorage(scheme *runtime.Scheme, kubeClient kubernetes.Interface, optsGetter generic.RESTOptionsGetter) (*ClusterStorage, error) {
strategy := clusterregistry.NewStrategy(scheme)
store := &genericregistry.Store{
@ -68,7 +48,7 @@ func NewREST(scheme *runtime.Scheme, optsGetter generic.RESTOptionsGetter) (*RES
options := &generic.StoreOptions{RESTOptions: optsGetter, AttrFunc: clusterregistry.GetAttrs}
if err := store.CompleteWithOptions(options); err != nil {
return nil, nil, err
return nil, err
}
statusStrategy := clusterregistry.NewStatusStrategy(strategy)
@ -76,7 +56,16 @@ func NewREST(scheme *runtime.Scheme, optsGetter generic.RESTOptionsGetter) (*RES
statusStore.UpdateStrategy = statusStrategy
statusStore.ResetFieldsStrategy = statusStrategy
return &REST{store}, &StatusREST{store: &statusStore}, nil
clusterRest := &REST{store}
return &ClusterStorage{
Cluster: clusterRest,
Status: &StatusREST{&statusStore},
Proxy: &ProxyREST{
Store: store,
Redirector: clusterRest,
kubeClient: kubeClient,
},
}, nil
}
// REST implements a RESTStorage for Cluster.