
Я использую Kubernet для развертывания своего приложения: Вот описание моего сервиса:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: flaskgql
labels:
name: flaskgql
spec:
replicas: 1
template:
metadata:
labels:
name: flaskgql
spec:
containers:
- name: flaskgql
image: cryptodraco/flask_gql
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
volumeMounts:
- name: secrets
mountPath: /etc/secrets
readOnly: true
volumes:
- name: secrets
secret:
secretName: db-passwords
---
apiVersion: v1
kind: Service
metadata:
name: flaskgql
labels:
name: flaskgql
spec:
type: LoadBalancer
#loadBalancerIP: 35.189.238.42
ports:
- port: 80
targetPort: 8080
selector:
name: flaskgql
Когда я перечисляю свои услуги, все в порядке:
flaskgql LoadBalancer 10.59.251.206 35.189.238.42 80:30677/TCP 6m
А мой docker-файл выглядит следующим образом:
FROM gcr.io/google_appengine/python
RUN virtualenv /env
# source venv/bin/activate
ENV VIRTUAL_ENV /env
ENV PATH /env/bin:$PATH
ADD requirements.txt /app/requirements.txt
RUN pip install -r /app/requirements.txt
# no database - SQL only
#ENV NODB 1
ADD . /app
CMD gunicorn -b :$PORT wsgi:app
Но когда я пытаюсь получить доступ к своему назначенному статическому IP, он не работает. Примечание: я уже делал то же самое раньше, и все было в порядке. Но теперь, когда я получаю доступ к статическому IP, я получаю ошибку 404. Похоже, что мой сервер gunicorn не перенаправляет порт на IP. Даже если из gcloud я получаю:
Я не знаю, может это из-за того, что я должен вставить VM вместо экземпляра. Но все, что я знаю, это то, что это не работает, и я понятия не имею, как это отладить. Спасибо заранее
решение1
Начнем с того, что ошибка 404 not found означает, что запрос отправляется на нужный сервер, но не может найти запрошенный файл. Я сомневаюсь, что это проблема со статическим IP-адресом.
Есть несколько вещей, которые вы можете сделать, чтобы отладить это. Первый шаг — подключиться по SSH к одному из ваших узлов и попытаться подключиться к pod напрямую, используя IP-адрес кластера:
Перечислите свои модули вместе с их кластерными IP-адресами
kubectl получить pods -o широкий
Подключитесь по SSH к одному из узлов кластера через консоль GCP или с помощью команды gcloud.
gcloud вычислительные экземпляры ssh [node_name]
После подключения к узлу выполните команду curl, чтобы проверить, правильно ли ваш контейнер отвечает на запросы.
curl [pod_cluster_ip]
Если это возвращает сообщение об ошибке 404, это означает, что возникла проблема с вашим образом контейнера. Либо в корне сервера нет файлов, либообраз докера не открыл порт 80.
Если этот тест сработал, значит, контейнер обслуживается правильно, но, возможно, возникла проблема с обслуживанием.
Повторите тест curl, используя IP-адрес кластера служб LB.
Вы также можете прикрепиться к модулю, чтобы следить за активностью
kubectl attach [имя_пода] -i
Наконец, вы можете проверить балансировщик нагрузки GCP, чтобы узнать, нет ли там сообщений об ошибках, например о неработоспособных бэкэндах.
Я не так хорош в dockerfiles, но k8s yaml выглядит хорошо