我使用私有(private)在线服务器通过 kubernetes 设置 jenkins 环境。
我有以下服务文件:
apiVersion: v1
kind: Service
metadata:
name: jenkins
namespace: jenkins
spec:
type: NodePort
ports:
- port: 8080
targetPort: 8080
selector:
app: jenkins
它有效,这意味着我可以从我的服务器获取 jenkins pod。 但是,我无法从我的本地计算机网络浏览器访问我的服务。
为此,我必须键入以下命令:
kubectl port-forward -n jenkins service/jenkins 8080:8080 --address=<localServerIp>
我读到 port-forward 仅供调试 ( Difference between kubectl port-forwarding and NodePort service )。 但是我找不到如何将我的服务配置为在 Internet 上可见。我想要等效于持久端口转发的端口转发规则。
最佳答案
您提供的配置应该没问题,但您必须在节点上配置额外的防火墙规则才能连接到 NodeIP:NodePort
上的 Jenkins 服务。外部。
有一定的considerations在配置裸机集群时,因为您必须配置自己的负载均衡器才能为您的服务提供外部可用的 IP 地址。云环境使用自己的负载均衡器使这更容易。您可以配置自己的负载均衡器,然后创建一个 LoadBalancer
服务类型并以这种方式连接到您的应用程序。检查different types of Services here
虽然不推荐,但您可以尝试的另一件事是制作您的 kubectl port-forward
命令持久化。你可以设置 kubelet parameter streaming-connection-idle-timeout
到 0 - 这将永远不会关闭您的转发。如果您不想更改任何配置,您可以运行:
while true; do kubectl port-forward -n jenkins service/jenkins 8080:8080 --address=<localServerIp>; done
一些您可能会觉得有用的链接:similar case , exposing apps in kubernetes .
关于web-services - Kubernetes: "persistent"端口转发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70557167/