
Estou usando o kubernet para implantar meu aplicativo: aqui está a descrição do meu serviço:
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
Quando listo meus serviços, está tudo bem:
flaskgql LoadBalancer 10.59.251.206 35.189.238.42 80:30677/TCP 6m
E meu arquivo docker é o seguinte:
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
Mas quando tento acessar meu ip estático atribuído, ele não funciona. Obs: Já fiz a mesma coisa antes e deu certo. Mas agora quando acesso o ip estático, recebo um erro 404. Parece que meu servidor gunicorn não é encaminhado por porta para o ip. Mesmo que do gcloud eu receba:
Não sei se é porque deveria colocar a VM em vez da instância. Mas tudo que sei é que não está funcionando e não tenho ideia de como depurar isso. desde já, obrigado
Responder1
Para começar, 404 não encontrado implica que a solicitação está sendo feita ao servidor pretendido, mas não foi possível localizar o arquivo solicitado. Duvido que seja um problema com o IP estático.
Existem algumas coisas que você pode fazer para depurar isso. A primeira etapa é fazer SSH em um de seus nós e tentar conectar-se ao pod diretamente usando o IP do cluster:
Liste seus pods junto com o IP do CLuster
kubectl obtém pods -o largo
Faça SSH em um dos nós do cluster por meio do Console do GCP ou usando o comando gcloud
instâncias de computação gcloud ssh [node_name]
Assim que estiver conectado ao nó, execute um comando curl para ver se o seu contêiner está respondendo às solicitações corretamente
enrolar [pod_cluster_ip]
Se isso retornar uma mensagem de erro 404, significa que há um problema com a imagem do seu contêiner. Ou não há arquivos na raiz do servidor ou oa imagem do docker não expôs a porta 80.
Se esse teste funcionar, você sabe que o contêiner está servindo corretamente, portanto pode haver um problema com o serviço.
Repita o teste curl usando o IP do cluster de serviço LB.
Você também pode anexar ao pod para observar atividades
kubectl anexar [nome_do pod] -i
Por último, você pode verificar o balanceador de carga do GCP para ver se há algum erro relatado, como back-ends não íntegros.
Não sou tão bom com dockerfiles, mas o k8s yaml parece bom