
내 애플리케이션을 배포하기 위해 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은 좋아 보입니다.