Kubernetes: "persistent" port-forward

1/2/2022

I use a private online server to set a jenkins environment though kubernetes.

I have the following service file:

apiVersion: v1
kind: Service
metadata:
  name: jenkins
  namespace: jenkins
spec:
  type: NodePort
  ports:
  - port: 8080
    targetPort: 8080
  selector:
    app: jenkins

It works, meaning that I can wget from my server the jenkins pod. However I cannot reach my service from my local computer web-browser.

To do so, I have to type the following command:

kubectl port-forward -n jenkins service/jenkins 8080:8080 --address=<localServerIp>

I have read that port-forward is debug only (https://stackoverflow.com/questions/61032945/difference-between-kubectl-port-forwarding-and-nodeport-service/61055177#61055177). But I cannot find how to configure my service to be visible from the internet. I want the equivalent of the port-forward rule for a persistent port-forward.

-- Pierre Vittet
kubernetes
port
web-services

2 Answers

1/3/2022

You might wanna test Telepresence.io which allows you to establish connection to remote Kubernetes cluster. It's like you local laptop sits inside Kubernetes cluster. You may use cluster DNS and even reroute connections to your laptop.

-- Vasili Angapov
Source: StackOverflow

1/3/2022

Configuration you provided should be fine, but you would have to configure additional firewall rules on the nodes to make it possible to connect to your Jenkins Service on NodeIP:NodePort externally.

There are certain considerations when provisioning bare-metal clusters, because you have to configure your own load balancer to give your Services externally available IP addresses. Cloud environments use their own load balancer making this easier. You might configure your own load balancer, then create a LoadBalancer type of Service and connect to your app that way. Check different types of Services here

Another thing you can try, although not recommended, is to make your kubectl port-forward command persistant. You can set kubelet parameter streaming-connection-idle-timeout to 0 - this will never close your forwarding. If you don't want to change any configuration you can run:

while true; do kubectl port-forward -n jenkins service/jenkins 8080:8080 --address=<localServerIp>; done

Some links you might find useful: similar case, exposing apps in kubernetes.

-- mdobrucki
Source: StackOverflow