Я использую кубернет для развертывания своего приложения: Вот описание моей службы:
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 not found означает, что запрос направлен на предполагаемый сервер, но не может найти запрошенный файл. Я сомневаюсь, что это проблема статического IP-адреса.
Есть несколько способов отладить это. Первый шаг - подключиться по SSH к одному из ваших узлов и попытаться подключиться к модулю напрямую, используя IP-адрес кластера:
Перечислите свои поды вместе с их IP-адресом кластера
kubectl get pods -o wide
Подключитесь по SSH к одному из узлов вашего кластера либо через консоль GCP, либо с помощью команды gcloud.
gcloud compute instance ssh [имя_узла]
После подключения к узлу запустите команду curl, чтобы проверить, правильно ли ваш контейнер отвечает на запросы.
завиток [pod_cluster_ip]
Если это возвращает сообщение об ошибке 404, это означает, что есть проблема с вашим образом контейнера. Либо в корне сервера нет файлов, либо образ докера не имеет порта 80.
Если этот тест работает, вы знаете, что контейнер работает правильно, поэтому может быть проблема с сервисом.
Повторите тест curl, используя IP-адрес сервисного кластера LB.
Вы также можете прикрепить к модулю, чтобы следить за активностью
kubectl attach [имя_пода] -i
Наконец, вы можете проверить балансировщик нагрузки GCP, чтобы увидеть, есть ли там какие-либо сообщения об ошибках, такие как нездоровые серверные ВМ.
Я не так хорош с dockerfiles, но k8s yaml выглядит хорошо