Назначен статический 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 я получу: enter image description here

Не знаю, связано ли это с тем, что я должен вставить виртуальную машину вместо экземпляра. Но все, что я знаю, это то, что это не работает, и я не знаю, как это отладить. Заранее благодарим

0
задан 1 March 2018 в 12:22
1 ответ

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

.
1
ответ дан 4 December 2019 в 16:01

Теги

Похожие вопросы