code: def _create_kube_service(self):
      if self._service_type != "NodePort":  # pragma: no cover
          raise NotImplementedError(
              f"Service type {self._service_type} not supported"
          )
  
      service_config = ServiceConfig(
          self._service_name,
          service_type="NodePort",
          port=self._web_port,
          selector={"mars/service-type": MarsSupervisorsConfig.rc_name},
      )
      self._core_api.create_namespaced_service(
          self._namespace, service_config.build()
      )
  
imports: import asyncio
  import functools
  import logging
  import random
  import time
  import uuid
  from urllib.parse import urlparse
  from ...lib.aio import new_isolation, stop_isolation
  from ...services.cluster.api import WebClusterAPI
  from ...session import new_session
  from ...utils import calc_size_by_str
  from ..utils import wait_services_ready
  from .config import NamespaceConfig, RoleConfig, RoleBindingConfig, ServiceConfig, MarsSupervisorsConfig, MarsWorkersConfig
label_desc: Use image node_id 4 for calling the KubernetesCluster obj's underlying member method code with example usage: obj._create_kube_service() without return types