Назад | Перейти на главную страницу

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

Я использую кубернет для развертывания своего приложения: Вот описание моей службы:

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 выглядит хорошо