kubectl expose commands can be used to create a service for the applications and assign 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 external network.
But in case of port-forward how kubectl creates an connection to the application without an IP address which is accessible externally?
kubectl port-forward
forwards connections to a local port to a port on a pod. Compared tokubectl proxy
,kubectl port-forward
is more generic as it can forward TCP traffic whilekubectl proxy
can only forward HTTP traffic.kubectl port-forward
is useful for testing/debugging purposes so you can access your service locally without exposing it.Below is the name of the
pod
and it will forward it's port6379
tolocalhost:6379
.which is the same as
or
or
or
Here is also some small port forwarding example to access a database service (clusterip) without exposing it.
kubectl port-forward
makes a specific Kubernetes API request. 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.