これは初心者の質問です。私は、単純なHello World Pythonフラスコ・アプリケーションをIBM Cloudのkubernetesクラスターにデプロイしようとしています。アプリケーション(main.py
):IBM Cloud KubernetesのデプロイメントのURL
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
と私ドッカーイメージを構築:
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上のk8で同じイメージを実行すると、URLエンドポイントにアクセスできないようです。私の展開手順は次のとおりです(以下の回答で述べた記事から):ポート30930
を取得するために
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
:
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
は、私は、外部IPアドレス10.77.223.141
を取得するためにkubectl describe pod kube-hw
を使用
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.xxxは、外部ではありません住所。 –