【问题标题】:URL for IBM Cloud Kubernetes deploymentIBM Cloud Kubernetes 部署的 URL
【发布时间】:2017-12-23 20:42:21
【问题描述】:

这是一个初学者的问题。我正在尝试在 IBM Cloud 上的 kubernetes 集群中部署一个简单的 Hello World Python 烧瓶应用程序。应用程序(main.py):

import os
from flask import Flask

app = Flask(__name__)

@app.route('/')
def welcomeToMyapp():
    return 'Ciao'

port = os.getenv('PORT', '5000')
if __name__ == "__main__":
    app.run(host='0.0.0.0', port=int(port))

我使用docker build --rm -t kube-hw .Dockerfile 构建我的Docker 映像:

FROM ubuntu:latest

WORKDIR /app
ADD requirements.txt /app
RUN apt-get -y update
RUN apt-get -y install python3-pip
RUN pip3 install --upgrade pip
RUN pip3 install -r requirements.txt

ADD main.py /app

EXPOSE 80

CMD ["python3", "main.py"]

我使用docker run --rm -p 5000:5000 kube-hw 在本地运行它。这很好用。我可以浏览http://0.0.0.0:5000/

但是,当我在 IBM Cloud 上的 k8s 上运行相同的图像时,我似乎无法访问 URL 端点。我的部署步骤是(来自下面答案中提到的文章):

docker tag kube-hw registry.ng.bluemix.net/sudoku/kube-hw:latest
docker push registry.ng.bluemix.net/sudoku/kube-hw:latest
kubectl run kube-hw --image=registry.ng.bluemix.net/sudoku/kube-hw:latest --port=80
kubectl expose deployment kube-hw --port=80 --target-port=5000 --type=NodePort

然后我使用kubectl describe pod kube-hw获取外部IP地址10.77.223.141

Name:           kube-hw-3409617459-5bczp
Namespace:      default
Node:           10.77.223.141/10.77.223.141
Start Time:     Sat, 23 Dec 2017 14:52:39 -0500

Status:         Running
IP:             172.30.205.113

kubectl describe service kube-hw 获取端口30930

Name:                     kube-hw
Namespace:                default
Labels:                   run=kube-hw
Annotations:              <none>
Selector:                 run=kube-hw
Type:                     NodePort
IP:                       172.21.250.32
Port:                     <unset>  80/TCP
TargetPort:               5000/TCP
NodePort:                 <unset>  30930/TCP
Endpoints:                172.30.205.116:5000
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

无法解析 URL http:\\10.77.223.141:30930。我可以查看日志并查看应用程序正在运行,但没有请求到达它。文章使用--target-port=8888。但是由于我在容器中使用了端口5000,因此我更改为--target-port=5000。我想知道我的端口号是否在某处未对齐。

【问题讨论】:

  • 10.x.x.x 不是外部地址。

标签: python flask kubernetes ibm-cloud ibm-cloud-kubernetes


【解决方案1】:

您需要的 IP 地址是集群中工作程序节点的外部 IP 地址。您识别的 IP 地址是内部地址。

要获取外部 IP 地址,请运行 bx cs workers &lt;cluster_name&gt;

然后形成如下 URL:http://&lt;external_node_ip&gt;:&lt;NodePort&gt;

这是一个文档,其中包含有关使用 NodePort 的更多信息:https://console.bluemix.net/docs/containers/cs_apps.html#cs_apps_public_nodeport

【讨论】:

  • 谢谢,就是这样。使用bx cs workers &lt;cluster name&gt; 获取公网IP。和kubectl describe service &lt;service name&gt; 获取IP。实际上我可能更早尝试过。我意识到的另一件事是,尽管这是一个 hello world 应用程序,但我正在构建一个大图像并且加载需要时间。我可能没有等待足够长的时间。
【解决方案2】:

命令变了,现在是

ibmcloud cs workers --cluster your_cluster_name

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    相关资源
    最近更新 更多