2017-12-23 32 views
1

이것은 초보자가하는 질문입니다. 나는 IBM Cloud의 kubernetes 클러스터에 간단한 Hello World Python 플라스크 애플리케이션을 배치하려고 시도하고있다. 응용 프로그램 (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에서 k8s에서 동일한 이미지를 실행할 때 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 외부 아니다 다음과 같이

는 URL을 형성, 외부 IP 주소를 얻을 다음 bx cs workers <cluster_name>

를 실행하려면 주소. –

답변

1

필요한 IP 주소는 클러스터의 작업자 노드의 외부 IP 주소입니다. 귀하가 식별 한 IP 주소는 내부 주소입니다. 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