Question
kubectl
exposes commands that can be used to create a Service for an
application and assigns an IP address to access it from internet.
As far as I understand, to access any application within Kubernetes cluster there should be a Service resource created and that should have an IP address which is accessible from an external network.
But in case of port-forward
how does kubectl
create a connection to the
application without an IP address which is accessible externally?
Answer
kubectl port-forward
makes a specific [Kubernetes API
request](https://v1-18.docs.kubernetes.io/docs/reference/generated/kubernetes-
api/v1.18/#-strong-proxy-operations-pod-v1-core-strong-). That means the
system running it needs access to the API server, and any traffic will get
tunneled over a single HTTP connection.
Having this is really useful for debugging (if one specific pod is acting up
you can connect to it directly; in a microservice environment you can talk to
a back-end service you wouldn't otherwise expose) but it's not an alternative
to setting up service objects. When I've worked with kubectl port-forward
it's been visibly slower than connecting to a pod via a service, and I've
found seen the command just stop after a couple of minutes. Again these aren't
big problems for debugging, but they're not what I'd want for a production
system.