【发布时间】:2021-11-28 07:36:16
【问题描述】:
我有一个关于 Kubernetes 网络的问题。
我的工作情景:
- 我的本地主机有一个 Jenkins 容器,这个容器启动并运行。在詹金斯内部,我有一份工作。访问 jenkins,我使用“http://localhost:8080” url。 (jenkins 不在 kubernetes 中运行)
- 我的烧瓶应用,使用以下命令触发 Jenkins 作业:
@app.route("/create",methods=["GET","POST"]) def create(): if request.method =="POST": dosya_adi=request.form["sendmail"] server = jenkins.Jenkins('http://localhost:8080/', username='my-user-name', password='my-password') server.build_job('jenkins_openvpn', {'FILE_NAME': dosya_adi}, token='my-token')
- 然后,我对这个烧瓶应用程序进行了 Dockerize。我的图片名称是:“jenkins-app”
- 如果我运行这个命令,一切都会完美:
docker run -it --network="host" --name=jenkins-app jenkins-app
但我想用 kubernetes 做同样的事情。为此,我编写了这个 yml 文件。
apiVersion: v1
kind: Pod
metadata:
name: jenkins-pod
spec:
hostNetwork: true
containers:
- name: jenkins-app
image: jenkins-app:latest
imagePullPolicy: Never
ports:
- containerPort: 5000
- 使用此 yml 文件,我使用端口 5000 访问烧瓶应用程序。当我想触发 jenkins 作业时,我收到如下错误:requests.exceptions.ConnectionError
您能否建议是否有办法使用 Kubernetes 做到这一点?
【问题讨论】:
-
你可以试试
kubectl port-forward <name of the pod> 31145:5000。如果这不起作用,则将 5000 与 8080 交换(我永远不确定从外面可以看到哪一个 :))。 -
主机网络在这里似乎完全没有必要。在 Kubernetes 上下文中,它可能无法按您预期的方式工作,并且可能被集群操作员非常合理地禁止。您能否将 Jenkins 位置配置为调用应用程序中的其他位置,并通过正常方式(Ingress、NodePort 或 LoadBalancer 类型的服务)使其在 Kubernetes 中可见?
-
@DavidMaze 我试过但没用
-
@ennur 你到底尝试了什么?为什么它不起作用:错误/任何东西?下面的答案还有一种将 pod 公开为
ClusterIP的服务的方法。如果您的应用在本地机器上而不是在集群中运行,那么您需要将服务公开为NodePort或LoadBalancer(取决于您使用的集群) -
@moonkotte 我试图在烧瓶应用程序中更改 jenkins IP。与此错误 requests.exceptions.ConnectionError 相同。我将尝试使用节点端口。是否需要为到达詹金斯添加端点? nodeport 会自动执行此操作吗?
标签: docker jenkins kubernetes