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

내 도커 파일은 다음과 같습니다.

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 찾을 수 없음은 요청이 의도한 서버에 이루어졌지만 요청한 파일을 찾을 수 없음을 의미합니다. 이것이 고정 IP에 문제가 있는지 의심됩니다.

이를 디버깅하기 위해 수행할 수 있는 몇 가지 작업이 있습니다. 첫 번째 단계는 노드 중 하나에 SSH를 통해 연결하고 클러스터 IP를 사용하여 포드에 직접 연결을 시도하는 것입니다.

클러스터 IP와 함께 포드 나열

kubectl은 포드 가져오기 -o wide

GCP 콘솔을 통해 또는 gcloud 명령어를 사용하여 클러스터 노드 중 하나에 SSH를 통해 연결합니다.

gcloud 컴퓨팅 인스턴스 SSH [node_name]

노드에 연결되면 컬 명령을 실행하여 컨테이너가 요청에 제대로 응답하는지 확인하세요.

컬 [pod_cluster_ip]

404 오류 메시지가 반환되면 컨테이너 이미지에 문제가 있음을 의미합니다. 서버 루트에 파일이 없거나도커 이미지가 포트 80을 노출하지 않았습니다..

이 테스트가 작동하면 컨테이너가 올바르게 제공되고 있는 것이므로 서비스에 문제가 있을 수 있습니다.

LB 서비스 클러스터 IP를 사용하여 컬 테스트를 반복합니다.

활동을 감시하기 위해 포드에 연결할 수도 있습니다.

kubectl Attach [pod_name] -i

마지막으로 GCP 로드 밸런서를 확인하여 비정상 백엔드와 같은 보고된 오류가 있는지 확인할 수 있습니다.

나는 dockerfile을 잘 사용하지 못하지만 k8s yaml은 좋아 보입니다.

관련 정보