I am developing an application where I have to spin a pod on the user demand and that specific pod should be exposed to the user using Ingress. To create a pod and service on the fly I am leveraging Kubernetes-client for java.
InputStream is = this.getClass().getClassLoader().getResourceAsStream("config");
InputStreamReader isr = new InputStreamReader(is);
ApiClient client = ClientBuilder.kubeconfig(io.kubernetes.client.util.KubeConfig.loadKubeConfig(isr)).build();
        
Configuration.setDefaultApiClient(client);
CoreV1Api api = new CoreV1Api();Creating Service:
V1Service createResult = api.createNamespacedService("default", svc, null, null, null);Creating Pod:
V1Pod podCreateResult =  api.createNamespacedPod("default", pod, null, null, null);But I am not able to find any method to create Ingress Controller.
To create ingress in namespace we have to use NetworkingV1beta1Api provided by Kubernetes java client library.
InputStream is = this.getClass().getClassLoader().getResourceAsStream("config");
InputStreamReader isr = new InputStreamReader(is);
ApiClient client = ClientBuilder.kubeconfig(io.kubernetes.client.util.KubeConfig.loadKubeConfig(isr)).build();
Configuration.setDefaultApiClient(client);
NetworkingV1beta1Api networkingV1beta1Api = new NetworkingV1beta1Api ();
NetworkingV1beta1Ingress ingress = new NetworkingV1beta1IngressBuilder()
		.withNewMetadata()
		.withName("flask-ingress")
		.endMetadata()
		.withNewSpec().withNewBackend()
		.withNewServiceName("flask-app-backend-service")
		.withNewServicePort(9001).endBackend().endSpec().build();
    
ApiResponse ingressCreateResult = networkingV1beta1Api.createNamespacedIngressWithHttpInfo("default", ingress, null, null, null);