As there is no information about the exact Kubernetes solution used, it could be hard to pinpoint the exact solution.
Assuming that there are 2 options:
Docker Desktop with Kubernetes
Minikube
Some solutions for them could be:
Docker Desktop with Kubernetes
Service of type LoadBalancer
Your Kubernetes cluster can use Service of type LoadBalancer and get linked to your localhost (your Mac localhost).
You can check this by running following example:
$ kubectl create deployment nginx --image=nginx
$ kubectl expose deployment nginx --port=80 --type=LoadBalancer
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 10d
nginx LoadBalancer 10.111.214.48 localhost 80:30032/TCP 77s
curl 127.0.0.1:80 / curl kubernetes.docker.internal:80
<-- REDACTED -->
<title>Welcome to nginx!</title>
<-- REDACTED -->
A side note!
You can modify it further by using --port (port on your localhost) and --targetPort (port that is listening in your Pod) parameters when using $ kubectl expose ...
Change the NodePort port range
You can follow this in-depth answer that will show you how you can modify your kubeapi-server to change the NodePort port range (by logging to Docker VM):
Use Ingress controller
You can also use an Ingress controller that will bind to your Mac's localhost and will allow you to use Ingress resource (it's mainly for HTTP/HTTPS but with some adjustments it can pass TCP/UDP traffic). Here you can find more information on that topic:
Minikube
With Minikube there can be a lot of variation due to the --driver used.
Change the NodePort port range
Once again you can follow below answer to change the minikube NodePort port range:
Use metallb
You can also use metallb to allocate the addresses for your Service of type LoadBalancer.
The steps to do it would be following:
$ minikube start --driver=hyperkit
$ minikube addons enable metallb
$ minikube node list (notice the IP address of your minikube)
$ minikube addons configure metallb (put the allocated range near the minikube ip like:
minikube ip: 192.168.64.11
metallb start: 192.168.64.100
metallb end: 192.168.64.110
- Create the workload and expose it with
Service of type LoadBalancer
$ curl SVC_EXTERNAL_IP:PORT
A side note!
--driver=hyperkit was used due to:
Because you are using a Docker driver on darwin, the terminal needs to be open to run it.
This message is related to the access of your minikube instance when using --driver=docker and it's limitations. You need to use minikube service SERVICE_NAME to access the Service (and the terminal must be running while you are at it).
A side note!
I'd reckon as a workaround measure you can also use a $ kubectl port-forward.
Additional resources: