2017-12-23 24 views
1

これは初心者の質問です。私は、単純な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に変更しました。私はどこかでポート番号のミスアラインメントがあるのだろうかと思っています。

+0

10.xxxは、外部ではありません住所。 –

答えて

1

必要なIPアドレスは、クラスタ内のワーカー・ノードの外部IPアドレスです。あなたが特定したIPアドレスは内部アドレスです。外部IPアドレスを取得するには

、次のようにURLを形成後bx cs workers <cluster_name>

を実行します。http://<external_node_ip>:<NodePort>

はここNodePortの使用方法の詳細とドキュメントです:https://console.bluemix.net/docs/containers/cs_apps.html#cs_apps_public_nodeport

+0

ありがとうございました。パブリックIPを取得するには、 'bx cs workers 'を使用します。 'kubectlはIPを取得するためにサービス<サービス名> 'を記述する。私は実際にそれを早く試したかもしれない。私が気づいたもう一つのことは、こんにちは世界のアプリであるにもかかわらず、私は大きなイメージを構築しており、読み込む時間がかかっていたということでした。私はずっと待っていないかもしれません。 – user2085050

関連する問題