Kubernetes:“持久”端口转发

Pie*_*tet 6 port web-services kubernetes

我使用私人在线服务器通过 kubernetes 设置 jenkins 环境。

我有以下服务文件:

apiVersion: v1
kind: Service
metadata:
  name: jenkins
  namespace: jenkins
spec:
  type: NodePort
  ports:
  - port: 8080
    targetPort: 8080
  selector:
    app: jenkins
Run Code Online (Sandbox Code Playgroud)

它有效,这意味着我可以从我的服务器获取 jenkins pod。但是我无法从本地计算机网络浏览器访问我的服务。

为此,我必须输入以下命令:

kubectl port-forward -n jenkins service/jenkins 8080:8080 --address=<localServerIp>
Run Code Online (Sandbox Code Playgroud)

我读过端口转发仅用于调试(kubectl 端口转发和 NodePort 服务之间的区别)。但我找不到如何将我的服务配置为在互联网上可见。我想要相当于持久端口转发的端口转发规则。

小智 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 中公开应用程序