Kubernetes: "持久化"端口转发

6
我将使用私有在线服务器通过Kubernetes设置Jenkins环境。 我有以下服务文件:
apiVersion: v1
kind: Service
metadata:
  name: jenkins
  namespace: jenkins
spec:
  type: NodePort
  ports:
  - port: 8080
    targetPort: 8080
  selector:
    app: jenkins

这意味着我可以从我的服务器wget jenkins pod,它已经正常工作。 但我无法在本地浏览器中访问我的服务。

为了解决这个问题,我需要输入以下命令:

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

我看到 Port-Forward 仅供调试使用 (kubectl 端口转发和 NodePort 服务的区别)。 但我找不到如何配置我的服务以便从互联网上可见。 我需要一个持久的端口转发规则的等效方法。

你正在使用哪个版本的Kubernetes? 你是如何配置你的集群的? - mdobrucki
我正在使用kubeadm。我已经按照https://www.jenkins.io/doc/book/installing/kubernetes/的指南进行操作,但是选择了kubeadm,因为我理解minikube只适用于本地环境。 - Pierre Vittet
2个回答

3

您提供的配置应该是可以的,但您需要在节点上配置额外的防火墙规则,以使外部能够连接到NodeIP:NodePort上的Jenkins服务。

在配置裸机集群时有一些注意事项,因为您必须配置自己的负载均衡器来为您的服务提供外部可用的IP地址。云环境使用它们自己的负载均衡器,使这个过程更加容易。您可以配置自己的负载均衡器,然后创建一个类型为LoadBalancer的服务,并通过这种方式连接到您的应用程序。查看这里的不同服务类型

另一件您可以尝试的事情,虽然不建议这样做,是使您的kubectl port-forward命令持久化。您可以将kubelet参数streaming-connection-idle-timeout设置为0-这将永远不会关闭您的转发。如果您不想更改任何配置,您可以运行:

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

以下是您可能会发现有用的一些链接:类似案例, 在kubernetes中公开应用程序


1
谢谢,我会尝试创建一个负载均衡器服务并告诉你。 - Pierre Vittet

-1

你可能想要测试Telepresence.io,它可以让你连接到远程Kubernetes集群。这就像你本地的笔记本电脑坐在Kubernetes集群里一样。你可以使用集群DNS甚至将连接重新路由到你的笔记本电脑。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接