diff --git a/cmd/kubenest/operator/app/operator.go b/cmd/kubenest/operator/app/operator.go
index 717505d16..529565b5d 100644
--- a/cmd/kubenest/operator/app/operator.go
+++ b/cmd/kubenest/operator/app/operator.go
@@ -88,18 +88,12 @@ func run(ctx context.Context, opts *options.Options) error {
 		return fmt.Errorf("could not create clientset: %v", err)
 	}
 
-	hostPortManager, err := vcnodecontroller.NewHostPortManager(hostKubeClient)
-	if err != nil {
-		return fmt.Errorf("failed to create host port manager: %v", err)
-	}
-
 	VirtualClusterInitController := controller.VirtualClusterInitController{
-		Client:          mgr.GetClient(),
-		Config:          mgr.GetConfig(),
-		EventRecorder:   mgr.GetEventRecorderFor(constants.InitControllerName),
-		HostPortManager: hostPortManager,
-		RootClientSet:   hostKubeClient,
-		KosmosClient:    kosmosClient,
+		Client:        mgr.GetClient(),
+		Config:        mgr.GetConfig(),
+		EventRecorder: mgr.GetEventRecorderFor(constants.InitControllerName),
+		RootClientSet: hostKubeClient,
+		KosmosClient:  kosmosClient,
 	}
 	if err = VirtualClusterInitController.SetupWithManager(mgr); err != nil {
 		return fmt.Errorf("error starting %s: %v", constants.InitControllerName, err)
diff --git a/deploy/crds/kosmos.io_virtualclusters.yaml b/deploy/crds/kosmos.io_virtualclusters.yaml
index c290a6f1e..4439823b1 100644
--- a/deploy/crds/kosmos.io_virtualclusters.yaml
+++ b/deploy/crds/kosmos.io_virtualclusters.yaml
@@ -144,6 +144,9 @@ spec:
               phase:
                 description: Phase is the phase of kosmos-operator handling the VirtualCluster
                 type: string
+              port:
+                format: int32
+                type: integer
               reason:
                 type: string
               updateTime:
diff --git a/pkg/apis/kosmos/v1alpha1/virtualcluster_types.go b/pkg/apis/kosmos/v1alpha1/virtualcluster_types.go
index 048d743fd..1a016843f 100644
--- a/pkg/apis/kosmos/v1alpha1/virtualcluster_types.go
+++ b/pkg/apis/kosmos/v1alpha1/virtualcluster_types.go
@@ -97,6 +97,8 @@ type VirtualClusterStatus struct {
 	Reason string `json:"reason,omitempty" protobuf:"bytes,4,opt,name=reason"`
 	// +optional
 	UpdateTime *metav1.Time `json:"updateTime,omitempty" protobuf:"bytes,7,opt,name=updateTime"`
+	// +optional
+	Port int32 `json:"port,omitempty"`
 }
 
 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
diff --git a/pkg/generated/openapi/zz_generated.openapi.go b/pkg/generated/openapi/zz_generated.openapi.go
index b84111ba2..33dc8be22 100644
--- a/pkg/generated/openapi/zz_generated.openapi.go
+++ b/pkg/generated/openapi/zz_generated.openapi.go
@@ -3094,6 +3094,12 @@ func schema_pkg_apis_kosmos_v1alpha1_VirtualClusterStatus(ref common.ReferenceCa
 							Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"),
 						},
 					},
+					"port": {
+						SchemaProps: spec.SchemaProps{
+							Type:   []string{"integer"},
+							Format: "int32",
+						},
+					},
 				},
 			},
 		},
diff --git a/pkg/kubenest/controller/virtualcluster.node.controller/hostport_manager.go b/pkg/kubenest/controller/virtualcluster.node.controller/hostport_manager.go
deleted file mode 100644
index 4641f9a74..000000000
--- a/pkg/kubenest/controller/virtualcluster.node.controller/hostport_manager.go
+++ /dev/null
@@ -1,151 +0,0 @@
-package vcnodecontroller
-
-import (
-	"context"
-	"fmt"
-	"sync"
-
-	"gopkg.in/yaml.v3"
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"k8s.io/client-go/kubernetes"
-
-	"github.com/kosmos.io/kosmos/pkg/kubenest/constants"
-)
-
-/**
-apiVersion: v1
-kind: ConfigMap
-metadata:
-  name: kosmos-hostports
-  namespace: kosmos-system
-data:
-  config.yaml: |
-    PortsPool:
-      - 5443
-      - 6443
-      - 7443
-    ClusterPorts:
-      - Port: 5443
-        Cluster: "cluster1"
-      - Port: 6443
-        Cluster: "cluster2"
-*/
-
-type HostPortManager struct {
-	HostPortPool *HostPortPool
-	kubeClient   kubernetes.Interface
-	lock         sync.Mutex
-}
-
-type HostPortPool struct {
-	PortsPool    []int32       `yaml:"portsPool"`
-	ClusterPorts []ClusterPort `yaml:"clusterPorts"`
-}
-
-type ClusterPort struct {
-	Port    int32  `yaml:"port"`
-	Cluster string `yaml:"cluster"`
-}
-
-func NewHostPortManager(client kubernetes.Interface) (*HostPortManager, error) {
-	hostPorts, err := client.CoreV1().ConfigMaps(constants.KosmosNs).Get(context.TODO(), constants.HostPortsCMName, metav1.GetOptions{})
-	if err != nil {
-		return nil, err
-	}
-	yamlData, exist := hostPorts.Data[constants.HostPortsCMDataName]
-	if !exist {
-		return nil, fmt.Errorf("hostports not found in configmap")
-	}
-
-	var hostPool HostPortPool
-	if err := yaml.Unmarshal([]byte(yamlData), &hostPool); err != nil {
-		return nil, err
-	}
-	manager := &HostPortManager{
-		HostPortPool: &hostPool,
-		kubeClient:   client,
-	}
-	return manager, nil
-}
-
-func (m *HostPortManager) AllocateHostPort(clusterName string) (int32, error) {
-	m.lock.Lock()
-	defer m.lock.Unlock()
-
-	//使用临时变量存储原来的cm
-	oldHostPool := m.HostPortPool
-
-	//查询该clusterName是否已经被分配了端口,如果分配了,返回之前分配的端口
-	for _, cluster := range m.HostPortPool.ClusterPorts {
-		if cluster.Cluster == clusterName {
-			return cluster.Port, nil
-		}
-	}
-
-	for _, port := range m.HostPortPool.PortsPool {
-		if !m.isPortAllocated(port) {
-			m.HostPortPool.ClusterPorts = append(m.HostPortPool.ClusterPorts, ClusterPort{Port: port, Cluster: clusterName})
-			err := updateConfigMapAndRollback(m, oldHostPool)
-			if err != nil {
-				return 0, err
-			}
-			return port, err
-		}
-	}
-	return 0, fmt.Errorf("no available ports to allocate")
-}
-
-func (m *HostPortManager) ReleaseHostPort(clusterName string) error {
-	m.lock.Lock()
-	defer m.lock.Unlock()
-
-	oldHostPool := m.HostPortPool
-
-	for i, cp := range m.HostPortPool.ClusterPorts {
-		if cp.Cluster == clusterName {
-			// Remove the entry from the slice
-			m.HostPortPool.ClusterPorts = append(m.HostPortPool.ClusterPorts[:i], m.HostPortPool.ClusterPorts[i+1:]...)
-			err := updateConfigMapAndRollback(m, oldHostPool)
-			if err != nil {
-				return err
-			}
-			return nil
-		}
-	}
-	return fmt.Errorf("no port found for cluster %s", clusterName)
-}
-
-func updateConfigMapAndRollback(m *HostPortManager, oldHostPool *HostPortPool) error {
-	data, err := yaml.Marshal(m.HostPortPool)
-	if err != nil {
-		m.HostPortPool = oldHostPool
-		return err
-	}
-
-	configMap, err := m.kubeClient.CoreV1().ConfigMaps(constants.KosmosNs).Get(context.TODO(), constants.HostPortsCMName, metav1.GetOptions{})
-	if err != nil {
-		m.HostPortPool = oldHostPool
-		return err
-	}
-
-	configMap.Data[constants.HostPortsCMDataName] = string(data)
-
-	_, updateErr := m.kubeClient.CoreV1().ConfigMaps(constants.KosmosNs).Update(context.TODO(), configMap, metav1.UpdateOptions{})
-
-	if updateErr != nil {
-		// 回滚 HostPortPool
-		m.HostPortPool = oldHostPool
-		return updateErr
-	}
-
-	return nil
-}
-
-func (m *HostPortManager) isPortAllocated(port int32) bool {
-	for _, cp := range m.HostPortPool.ClusterPorts {
-		if cp.Port == port {
-			return true
-		}
-	}
-	return false
-}
diff --git a/pkg/kubenest/controller/virtualcluster_execute_controller.go b/pkg/kubenest/controller/virtualcluster_execute_controller.go
index 0177354c7..9a07bdc1a 100644
--- a/pkg/kubenest/controller/virtualcluster_execute_controller.go
+++ b/pkg/kubenest/controller/virtualcluster_execute_controller.go
@@ -11,7 +11,6 @@ import (
 	"github.com/kosmos.io/kosmos/pkg/apis/kosmos/v1alpha1"
 	"github.com/kosmos.io/kosmos/pkg/kubenest"
 	"github.com/kosmos.io/kosmos/pkg/kubenest/constants"
-	vcnodecontroller "github.com/kosmos.io/kosmos/pkg/kubenest/controller/virtualcluster.node.controller"
 	"github.com/kosmos.io/kosmos/pkg/kubenest/workflow"
 )
 
@@ -22,7 +21,7 @@ type Executor struct {
 	config         *rest.Config
 }
 
-func NewExecutor(virtualCluster *v1alpha1.VirtualCluster, c client.Client, config *rest.Config, hostPortManager *vcnodecontroller.HostPortManager) (*Executor, error) {
+func NewExecutor(virtualCluster *v1alpha1.VirtualCluster, c client.Client, config *rest.Config) (*Executor, error) {
 	var phase *workflow.Phase
 
 	opts := []kubenest.InitOpt{
@@ -33,9 +32,9 @@ func NewExecutor(virtualCluster *v1alpha1.VirtualCluster, c client.Client, confi
 	action := recognizeActionFor(virtualCluster)
 	switch action {
 	case constants.InitAction:
-		phase = kubenest.NewInitPhase(options, hostPortManager)
+		phase = kubenest.NewInitPhase(options)
 	case constants.DeInitAction:
-		phase = kubenest.UninstallPhase(options, hostPortManager)
+		phase = kubenest.UninstallPhase(options)
 	default:
 		return nil, fmt.Errorf("failed to recognize action for virtual cluster %s", virtualCluster.Name)
 	}
diff --git a/pkg/kubenest/controller/virtualcluster_init_controller.go b/pkg/kubenest/controller/virtualcluster_init_controller.go
index 713383974..1a2fabd40 100644
--- a/pkg/kubenest/controller/virtualcluster_init_controller.go
+++ b/pkg/kubenest/controller/virtualcluster_init_controller.go
@@ -8,6 +8,7 @@ import (
 	"time"
 
 	"github.com/pkg/errors"
+	"gopkg.in/yaml.v3"
 	apierrors "k8s.io/apimachinery/pkg/api/errors"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/util/wait"
@@ -29,18 +30,16 @@ import (
 	"github.com/kosmos.io/kosmos/pkg/apis/kosmos/v1alpha1"
 	"github.com/kosmos.io/kosmos/pkg/generated/clientset/versioned"
 	"github.com/kosmos.io/kosmos/pkg/kubenest/constants"
-	vcnodecontroller "github.com/kosmos.io/kosmos/pkg/kubenest/controller/virtualcluster.node.controller"
 	"github.com/kosmos.io/kosmos/pkg/kubenest/util"
 )
 
 type VirtualClusterInitController struct {
 	client.Client
-	Config          *rest.Config
-	EventRecorder   record.EventRecorder
-	HostPortManager *vcnodecontroller.HostPortManager
-	RootClientSet   kubernetes.Interface
-	KosmosClient    versioned.Interface
-	lock            sync.Mutex
+	Config        *rest.Config
+	EventRecorder record.EventRecorder
+	RootClientSet kubernetes.Interface
+	KosmosClient  versioned.Interface
+	lock          sync.Mutex
 }
 
 type NodePool struct {
@@ -50,6 +49,10 @@ type NodePool struct {
 	State   string            `json:"state" yaml:"state"`
 }
 
+type HostPortPool struct {
+	PortsPool []int32 `yaml:"portsPool"`
+}
+
 const (
 	VirtualClusterControllerFinalizer = "kosmos.io/virtualcluster-controller"
 	RequeueTime                       = 10 * time.Second
@@ -230,7 +233,13 @@ func (c *VirtualClusterInitController) removeFinalizer(virtualCluster *v1alpha1.
 func (c *VirtualClusterInitController) createVirtualCluster(virtualCluster *v1alpha1.VirtualCluster) error {
 	klog.V(2).Infof("Reconciling virtual cluster", "name", virtualCluster.Name)
 
-	executer, err := NewExecutor(virtualCluster, c.Client, c.Config, c.HostPortManager)
+	//Assign host port
+	_, err := c.AllocateHostPort(virtualCluster)
+	if err != nil {
+		return errors.Wrap(err, "Error in assign host port!")
+	}
+
+	executer, err := NewExecutor(virtualCluster, c.Client, c.Config)
 	if err != nil {
 		return err
 	}
@@ -258,7 +267,7 @@ func (c *VirtualClusterInitController) createVirtualCluster(virtualCluster *v1al
 
 func (c *VirtualClusterInitController) destroyVirtualCluster(virtualCluster *v1alpha1.VirtualCluster) error {
 	klog.V(2).Infof("Destroying virtual cluster %s", virtualCluster.Name)
-	execute, err := NewExecutor(virtualCluster, c.Client, c.Config, c.HostPortManager)
+	execute, err := NewExecutor(virtualCluster, c.Client, c.Config)
 	if err != nil {
 		return err
 	}
@@ -453,3 +462,57 @@ func mapContains(big map[string]string, small map[string]string) bool {
 	}
 	return true
 }
+
+func GetHostPortPoolFromConfigMap(client kubernetes.Interface, ns, cmName, dataKey string) (*HostPortPool, error) {
+	hostPorts, err := client.CoreV1().ConfigMaps(ns).Get(context.TODO(), cmName, metav1.GetOptions{})
+	if err != nil {
+		return nil, err
+	}
+
+	yamlData, exist := hostPorts.Data[dataKey]
+	if !exist {
+		return nil, fmt.Errorf("key '%s' not found in ConfigMap '%s'", dataKey, cmName)
+	}
+
+	var hostPool HostPortPool
+	if err := yaml.Unmarshal([]byte(yamlData), &hostPool); err != nil {
+		return nil, err
+	}
+
+	return &hostPool, nil
+}
+
+func (c *VirtualClusterInitController) isPortAllocated(port int32) bool {
+	vcList := &v1alpha1.VirtualClusterList{}
+	err := c.List(context.Background(), vcList)
+	if err != nil {
+		klog.Errorf("list virtual cluster error: %v", err)
+		return false
+	}
+
+	for _, vc := range vcList.Items {
+		if vc.Status.Port == port {
+			return true
+		}
+	}
+
+	return false
+}
+
+func (c *VirtualClusterInitController) AllocateHostPort(virtualCluster *v1alpha1.VirtualCluster) (int32, error) {
+	c.lock.Lock()
+	defer c.lock.Unlock()
+
+	hostPool, err := GetHostPortPoolFromConfigMap(c.RootClientSet, constants.KosmosNs, constants.HostPortsCMName, constants.HostPortsCMDataName)
+	if err != nil {
+		return 0, err
+	}
+
+	for _, port := range hostPool.PortsPool {
+		if !c.isPortAllocated(port) {
+			virtualCluster.Status.Port = port
+			return port, nil
+		}
+	}
+	return 0, fmt.Errorf("no available ports to allocate")
+}
diff --git a/pkg/kubenest/controlplane/apiserver.go b/pkg/kubenest/controlplane/apiserver.go
index 72a75aadd..67488f032 100644
--- a/pkg/kubenest/controlplane/apiserver.go
+++ b/pkg/kubenest/controlplane/apiserver.go
@@ -3,39 +3,27 @@ package controlplane
 import (
 	"fmt"
 
+	"github.com/kosmos.io/kosmos/pkg/kubenest/constants"
+	"github.com/kosmos.io/kosmos/pkg/kubenest/manifest/controlplane/apiserver"
+	"github.com/kosmos.io/kosmos/pkg/kubenest/util"
 	"github.com/pkg/errors"
 	appsv1 "k8s.io/api/apps/v1"
 	"k8s.io/apimachinery/pkg/util/yaml"
 	clientset "k8s.io/client-go/kubernetes"
-	"k8s.io/klog/v2"
-
-	"github.com/kosmos.io/kosmos/pkg/kubenest/constants"
-	vcnodecontroller "github.com/kosmos.io/kosmos/pkg/kubenest/controller/virtualcluster.node.controller"
-	"github.com/kosmos.io/kosmos/pkg/kubenest/manifest/controlplane/apiserver"
-	"github.com/kosmos.io/kosmos/pkg/kubenest/util"
 )
 
-func EnsureVirtualClusterAPIServer(client clientset.Interface, name, namespace string, manager *vcnodecontroller.HostPortManager) error {
-	port, err := manager.AllocateHostPort(name)
-	if err != nil {
-		return fmt.Errorf("failed to allocate host ip for virtual cluster apiserver, err: %w", err)
-	}
-
+func EnsureVirtualClusterAPIServer(client clientset.Interface, name, namespace string, port int32) error {
 	if err := installAPIServer(client, name, namespace, port); err != nil {
 		return fmt.Errorf("failed to install virtual cluster apiserver, err: %w", err)
 	}
 	return nil
 }
 
-func DeleteVirtualClusterAPIServer(client clientset.Interface, name, namespace string, manager *vcnodecontroller.HostPortManager) error {
+func DeleteVirtualClusterAPIServer(client clientset.Interface, name, namespace string) error {
 	deployName := fmt.Sprintf("%s-%s", name, "apiserver")
 	if err := util.DeleteDeployment(client, deployName, namespace); err != nil {
 		return errors.Wrapf(err, "Failed to delete deployment %s/%s", deployName, namespace)
 	}
-	err := manager.ReleaseHostPort(name)
-	if err != nil {
-		klog.Warningf("Error releasing host port for cluster %s: %v", name, err)
-	}
 	return nil
 }
 
diff --git a/pkg/kubenest/controlplane/service.go b/pkg/kubenest/controlplane/service.go
index ca95e3655..b043fe54c 100644
--- a/pkg/kubenest/controlplane/service.go
+++ b/pkg/kubenest/controlplane/service.go
@@ -3,7 +3,6 @@ package controlplane
 import (
 	"context"
 	"fmt"
-
 	"github.com/pkg/errors"
 	corev1 "k8s.io/api/core/v1"
 	apierrors "k8s.io/apimachinery/pkg/api/errors"
@@ -13,25 +12,19 @@ import (
 	"k8s.io/klog/v2"
 
 	"github.com/kosmos.io/kosmos/pkg/kubenest/constants"
-	vcnodecontroller "github.com/kosmos.io/kosmos/pkg/kubenest/controller/virtualcluster.node.controller"
 	"github.com/kosmos.io/kosmos/pkg/kubenest/manifest/controlplane/apiserver"
 	"github.com/kosmos.io/kosmos/pkg/kubenest/manifest/controlplane/etcd"
 	"github.com/kosmos.io/kosmos/pkg/kubenest/util"
 )
 
-func EnsureVirtualClusterService(client clientset.Interface, name, namespace string, manager *vcnodecontroller.HostPortManager) error {
-	port, err := manager.AllocateHostPort(name)
-	if err != nil {
-		return fmt.Errorf("failed to allocate host ip for virtual cluster apiserver, err: %w", err)
-	}
-
+func EnsureVirtualClusterService(client clientset.Interface, name, namespace string, port int32) error {
 	if err := createServerService(client, name, namespace, port); err != nil {
 		return fmt.Errorf("failed to create virtual cluster apiserver-service, err: %w", err)
 	}
 	return nil
 }
 
-func DeleteVirtualClusterService(client clientset.Interface, name, namespace string, manager *vcnodecontroller.HostPortManager) error {
+func DeleteVirtualClusterService(client clientset.Interface, name, namespace string) error {
 	services := []string{
 		fmt.Sprintf("%s-%s", name, "apiserver"),
 		fmt.Sprintf("%s-%s", name, "etcd"),
@@ -48,11 +41,6 @@ func DeleteVirtualClusterService(client clientset.Interface, name, namespace str
 		}
 	}
 
-	err := manager.ReleaseHostPort(name)
-	if err != nil {
-		klog.Warningf("Error releasing host port for cluster %s: %v", name, err)
-	}
-
 	klog.V(2).Infof("Successfully uninstalled service for virtualcluster %s", name)
 	return nil
 }
diff --git a/pkg/kubenest/init.go b/pkg/kubenest/init.go
index afcc64f00..b139da42a 100644
--- a/pkg/kubenest/init.go
+++ b/pkg/kubenest/init.go
@@ -12,7 +12,6 @@ import (
 
 	"github.com/kosmos.io/kosmos/pkg/apis/kosmos/v1alpha1"
 	"github.com/kosmos.io/kosmos/pkg/generated/clientset/versioned"
-	vcnodecontroller "github.com/kosmos.io/kosmos/pkg/kubenest/controller/virtualcluster.node.controller"
 	"github.com/kosmos.io/kosmos/pkg/kubenest/tasks"
 	"github.com/kosmos.io/kosmos/pkg/kubenest/util"
 	"github.com/kosmos.io/kosmos/pkg/kubenest/util/cert"
@@ -35,7 +34,7 @@ type initData struct {
 	virtualClusterDataDir string
 	privateRegistry       string
 	externalIP            string
-	hostPortManager       *vcnodecontroller.HostPortManager
+	hostPort              int32
 }
 
 type InitOptions struct {
@@ -47,7 +46,7 @@ type InitOptions struct {
 	virtualCluster        *v1alpha1.VirtualCluster
 }
 
-func NewInitPhase(opts *InitOptions, hostPortManager *vcnodecontroller.HostPortManager) *workflow.Phase {
+func NewInitPhase(opts *InitOptions) *workflow.Phase {
 	initPhase := workflow.NewPhase()
 
 	initPhase.AppendTask(tasks.NewVirtualClusterServiceTask())
@@ -65,12 +64,12 @@ func NewInitPhase(opts *InitOptions, hostPortManager *vcnodecontroller.HostPortM
 	initPhase.AppendTask(tasks.NewComponentsFromManifestsTask())
 
 	initPhase.SetDataInitializer(func() (workflow.RunData, error) {
-		return newRunData(opts, hostPortManager)
+		return newRunData(opts)
 	})
 	return initPhase
 }
 
-func UninstallPhase(opts *InitOptions, hostPortManager *vcnodecontroller.HostPortManager) *workflow.Phase {
+func UninstallPhase(opts *InitOptions) *workflow.Phase {
 	destroyPhase := workflow.NewPhase()
 	destroyPhase.AppendTask(tasks.UninstallCoreDNSTask())
 	destroyPhase.AppendTask(tasks.UninstallComponentTask())
@@ -81,7 +80,7 @@ func UninstallPhase(opts *InitOptions, hostPortManager *vcnodecontroller.HostPor
 	destroyPhase.AppendTask(tasks.DeleteEtcdPvcTask())
 
 	destroyPhase.SetDataInitializer(func() (workflow.RunData, error) {
-		return newRunData(opts, hostPortManager)
+		return newRunData(opts)
 	})
 	return destroyPhase
 }
@@ -120,7 +119,7 @@ func NewInitOptWithKubeconfig(config *rest.Config) InitOpt {
 	}
 }
 
-func newRunData(opt *InitOptions, hostPortManager *vcnodecontroller.HostPortManager) (*initData, error) {
+func newRunData(opt *InitOptions) (*initData, error) {
 	if err := opt.Validate(); err != nil {
 		return nil, err
 	}
@@ -170,7 +169,7 @@ func newRunData(opt *InitOptions, hostPortManager *vcnodecontroller.HostPortMana
 		privateRegistry:       utils.DefaultImageRepository,
 		CertStore:             cert.NewCertStore(),
 		externalIP:            opt.virtualCluster.Spec.ExternalIP,
-		hostPortManager:       hostPortManager,
+		hostPort:              opt.virtualCluster.Status.Port,
 	}, nil
 }
 
@@ -198,10 +197,6 @@ func (i initData) GetNamespace() string {
 	return i.namespace
 }
 
-func (i initData) GetHostPortManager() *vcnodecontroller.HostPortManager {
-	return i.hostPortManager
-}
-
 func (i initData) ControlplaneAddress() string {
 	return i.controlplaneAddr
 }
@@ -234,6 +229,10 @@ func (i initData) ExternalIP() string {
 	return i.externalIP
 }
 
+func (i initData) HostPort() int32 {
+	return i.hostPort
+}
+
 func (i initData) DynamicClient() *dynamic.DynamicClient {
 	return i.dynamicClient
 }
diff --git a/pkg/kubenest/tasks/apiserver.go b/pkg/kubenest/tasks/apiserver.go
index 6efa79024..7d7370189 100644
--- a/pkg/kubenest/tasks/apiserver.go
+++ b/pkg/kubenest/tasks/apiserver.go
@@ -50,7 +50,7 @@ func runVirtualClusterAPIServer(r workflow.RunData) error {
 		data.RemoteClient(),
 		data.GetName(),
 		data.GetNamespace(),
-		data.GetHostPortManager(),
+		data.HostPort(),
 	)
 	if err != nil {
 		return fmt.Errorf("failed to install virtual cluster apiserver component, err: %w", err)
@@ -101,7 +101,6 @@ func uninstallVirtualClusterAPIServer(r workflow.RunData) error {
 		data.RemoteClient(),
 		data.GetName(),
 		data.GetNamespace(),
-		data.GetHostPortManager(),
 	)
 	if err != nil {
 		return fmt.Errorf("failed to install virtual cluster apiserver component, err: %w", err)
diff --git a/pkg/kubenest/tasks/data.go b/pkg/kubenest/tasks/data.go
index 9b737e0db..4cf65a336 100644
--- a/pkg/kubenest/tasks/data.go
+++ b/pkg/kubenest/tasks/data.go
@@ -5,7 +5,6 @@ import (
 	clientset "k8s.io/client-go/kubernetes"
 
 	"github.com/kosmos.io/kosmos/pkg/generated/clientset/versioned"
-	vcnodecontroller "github.com/kosmos.io/kosmos/pkg/kubenest/controller/virtualcluster.node.controller"
 	"github.com/kosmos.io/kosmos/pkg/kubenest/util/cert"
 )
 
@@ -13,7 +12,6 @@ type InitData interface {
 	cert.CertStore
 	GetName() string
 	GetNamespace() string
-	GetHostPortManager() *vcnodecontroller.HostPortManager
 	ControlplaneAddress() string
 	ServiceClusterIp() []string
 	RemoteClient() clientset.Interface
@@ -21,5 +19,6 @@ type InitData interface {
 	DataDir() string
 	VirtualClusterVersion() string
 	ExternalIP() string
+	HostPort() int32
 	DynamicClient() *dynamic.DynamicClient
 }
diff --git a/pkg/kubenest/tasks/service.go b/pkg/kubenest/tasks/service.go
index b38018b57..f91eb8a06 100644
--- a/pkg/kubenest/tasks/service.go
+++ b/pkg/kubenest/tasks/service.go
@@ -44,7 +44,7 @@ func runVirtualClusterService(r workflow.RunData) error {
 		data.RemoteClient(),
 		data.GetName(),
 		data.GetNamespace(),
-		data.GetHostPortManager(),
+		data.HostPort(),
 	)
 	if err != nil {
 		return fmt.Errorf("failed to install virtual cluster service , err: %w", err)
@@ -78,7 +78,6 @@ func uninstallVirtualClusterService(r workflow.RunData) error {
 		data.RemoteClient(),
 		data.GetName(),
 		data.GetNamespace(),
-		data.GetHostPortManager(),
 	)
 	if err != nil {
 		return fmt.Errorf("failed to uninstall virtual cluster service , err: %w", err)