如何在 kubernetes pod 中访问我的计算机本地主机中的 运行 应用程序?
How can access running app in my computer localhost inside kubernetes pod?
我有一个关于 kubernetes 网络的问题。
我的工作经验:
- 我有一个 Jenkins 容器我的本地主机和这个容器并 运行ning。在詹金斯内部,我有一份工作。访问詹金斯,我使用“http://localhost:8080”url。 (jenkins 不在 kubernetes 中 运行ing)
- 我的 flask 应用程序,使用此命令触发 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 访问 flask 应用程序。当我想触发 jenkins 作业时,我收到这样的错误:requests.exceptions.ConnectionError
如果有一种方法可以用 Kubernetes 做到这一点,您会建议吗?
首先公开你的 Jenkins 服务器:
kubectl expose pod jenkins-pod --port=8080 --target-port 5000
然后检查服务是否存在:
kubectl get svc jenkins-pod -o yaml
将它用于您的 Flask 应用程序以通过此服务连接到您的 Jenkins 服务器:
... jenkins.Jenkins('http://jenkins-pod.default.svc.cluster.local:8080/...'
请注意假设您 运行 默认命名空间中的所有内容,否则将“默认”更改为您的命名空间。
我创建了一个 endpoint.yml 文件并在下面的命令中添加了这个文件,这解决了我的问题:
apiVersion: v1
kind: Endpoints
metadata:
name: jenkins-server
subsets:
- addresses:
- ip: my-ps-ip
ports:
- port: 8080
然后,我在我的烧瓶应用程序中更改这一行,如下所示:
server = jenkins.Jenkins('http://my-ps-ip:8080/', username='my-user-name', password='my-password')
我有一个关于 kubernetes 网络的问题。
我的工作经验:
- 我有一个 Jenkins 容器我的本地主机和这个容器并 运行ning。在詹金斯内部,我有一份工作。访问詹金斯,我使用“http://localhost:8080”url。 (jenkins 不在 kubernetes 中 运行ing)
- 我的 flask 应用程序,使用此命令触发 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 访问 flask 应用程序。当我想触发 jenkins 作业时,我收到这样的错误:requests.exceptions.ConnectionError
如果有一种方法可以用 Kubernetes 做到这一点,您会建议吗?
首先公开你的 Jenkins 服务器:
kubectl expose pod jenkins-pod --port=8080 --target-port 5000
然后检查服务是否存在:
kubectl get svc jenkins-pod -o yaml
将它用于您的 Flask 应用程序以通过此服务连接到您的 Jenkins 服务器:
... jenkins.Jenkins('http://jenkins-pod.default.svc.cluster.local:8080/...'
请注意假设您 运行 默认命名空间中的所有内容,否则将“默认”更改为您的命名空间。
我创建了一个 endpoint.yml 文件并在下面的命令中添加了这个文件,这解决了我的问题:
apiVersion: v1
kind: Endpoints
metadata:
name: jenkins-server
subsets:
- addresses:
- ip: my-ps-ip
ports:
- port: 8080
然后,我在我的烧瓶应用程序中更改这一行,如下所示:
server = jenkins.Jenkins('http://my-ps-ip:8080/', username='my-user-name', password='my-password')