URL-адрес для развертывания IBM Cloud Kubernetes

Это вопрос новичка. Я пытаюсь развернуть простое фляжное приложение Python Hello World в кластере кубернетов в IBM Cloud. Приложение (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 с 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/.

Однако, когда я запускаю тот же образ на k8s в IBM Cloud, мне кажется, что я не могу получить доступ к конечной точке 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. Интересно, есть ли у меня где-то несовпадение номеров портов.


person KineticSquid    schedule 23.12.2017    source источник
comment
10.x.x.x не является внешним адресом.   -  person Lev Kuznetsov    schedule 02.01.2018


Ответы (2)


Нужный IP-адрес - это внешний IP-адрес рабочего узла в вашем кластере. Указанный вами IP-адрес является внутренним адресом.

Чтобы получить внешний IP-адрес, запустите bx cs workers <cluster_name>

Затем сформируйте URL-адрес следующим образом: http://<external_node_ip>:<NodePort>

Вот документ с дополнительной информацией об использовании NodePort: https://console.bluemix.net/docs/containers/cs_apps.html#cs_apps_public_nodeport

person bhpratt    schedule 02.01.2018
comment
Спасибо, вот и все. Используйте bx cs workers <cluster name>, чтобы получить общедоступный IP-адрес. и kubectl describe service <service name>, чтобы получить IP. Возможно, я уже пробовал это раньше. Еще я понял, что, несмотря на то, что это приложение hello world, я создаю большое изображение, и на его загрузку уходит время. Возможно, я не ждал достаточно долго. - person KineticSquid; 11.01.2018

Команда изменилась, теперь она

ibmcloud cs workers --cluster your_cluster_name

person Romeo Kienzler    schedule 06.11.2020