gcloud назначен статический IP, но я получаю от сервера 404. Как мне это отладить?

gcloud назначен статический IP, но я получаю от сервера 404. Как мне это отладить?

Я использую 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 выглядит хорошо

Связанный контент