Я использую кубернет для развертывания своего приложения: Вот описание моей службы:
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
И мой файл докеров выглядит следующим образом:
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 я получу:
Не знаю, связано ли это с тем, что я должен вставить виртуальную машину вместо экземпляра. Но все, что я знаю, это то, что это не работает, и я не знаю, как это отладить. Заранее благодарим
Для начала, 404 не найденный подразумевает, что запрос направляется на предполагаемый сервер, но не может найти запрашиваемый файл, я сомневаюсь, что это проблема со статическим IP.
Есть несколько вещей, которые вы можете сделать для отладки. Первым шагом будет SSH на один из ваших узлов и попытка подключиться к модулю pod напрямую, используя IP-адрес кластера:
List your pods with their CLuster IP
kubectl get pods -o wide
SSH into one of your cluster's nodes either through the GCP Console or using gcloud command
gcloud compute instances ssh [node_name]
Once you are connected to the node, запустите команду curl, чтобы проверить, правильно ли ваш контейнер отвечает на запросы
curl [pod_cluster_ip]
Если это возвращает сообщение об ошибке 404, это означает, что с вашим изображением контейнера возникла проблема. Либо в корне сервера нет файлов, либо изображение докера не открыло порт 80.
Если этот тест работает, вы знаете, что контейнер работает корректно, поэтому может возникнуть проблема со службой.
Повторите тест на скручивание, используя IP-адрес кластера LB-службы.
Вы также можете прикрепить контейнер к pod для просмотра активности
kubectl прикрепить [pod_name] -i
Наконец, вы можете проверить GCP Load Balancer, чтобы посмотреть, нет ли там сообщений об ошибках, таких как нездоровые бэкэнды.
Я не так хорошо разбираюсь в dockerfiles, но ямль k8s выглядит хорошо
.