Google cloud platform 集装箱发动机入口不工作
我在google container registry中有一个简单的容器,它基本上做一些事情并执行一个二进制文件,这是一个基于go的服务器,DockerFile的内容如下:Google cloud platform 集装箱发动机入口不工作,google-cloud-platform,dockerfile,google-kubernetes-engine,google-cloud-networking,docker-ingress,Google Cloud Platform,Dockerfile,Google Kubernetes Engine,Google Cloud Networking,Docker Ingress,我在google container registry中有一个简单的容器,它基本上做一些事情并执行一个二进制文件,这是一个基于go的服务器,DockerFile的内容如下: FROM debian:stable WORKDIR /workspace/ COPY key.json . COPY bin/user-creds. EXPOSE 1108 ENV GOOGLE_APPLICATION_CREDENTIALS /workspace/key.json RUN apt-get upd
FROM debian:stable
WORKDIR /workspace/
COPY key.json .
COPY bin/user-creds.
EXPOSE 1108
ENV GOOGLE_APPLICATION_CREDENTIALS /workspace/key.json
RUN apt-get update \
&& apt-get install -y ca-certificates \
&& chmod +x user-creds
CMD ["./user-creds"]
该容器已在本地进行了测试,运行良好。因此,我使用google cloud shell运行了以下容器:
kubectl run user-creds --image=eu.gcr.io/GCLOUD_PROJECT/user-creds:COMMIT_SHA --port=1108
然后就像文件上说的,我把它暴露在一个节点上
kubectl expose deployment user-creds --target-port=1108 --type=NodePort
然后我创建了一个入口,带有通往服务的路径:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: INGRESS_NAME
annotations:
kubernetes.io/ingress.global-static-ip-name: IP_NAME
spec:
rules:
- http:
paths:
- path: /user/creds/*
backend:
serviceName: user-creds
servicePort: 1108
然后我创建了入口:
kubectl create -f INGRESS_NAME.yaml
入口已创建,我等待了一段时间,以下是入口的详细信息:
NAME HOSTS ADDRESS PORTS AGE
INGRESS_NAME * IP_ADDRESS 80 38m
但当我使用路径访问实际url时,我得到一个502错误:
当我转到任何其他路径时,我会得到默认的后端404错误,但当我访问特定的/user/creds/path时,我会得到502错误
为了检查集群或我的特定容器、端口或其他方面是否有问题,我尝试将容器公开为LoadBalancer,它工作正常,命令:
kubectl expose deployment user-creds --target-port=1108 --port=80 --type=LoadBalancer
服务详情:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP INT_IP_ADDRESS <none> 443/TCP 1h
user-creds LoadBalancer INT_IP_ADDRESS IP_ADDRESS 80:31618/TCP 1m
名称类型群集IP外部IP端口
kubernetes集群内部IP地址443/TCP 1h
用户信任负载平衡器内部IP地址IP地址80:31618/TCP 1m
结果:200例有相应的应答体
一直停留在这个时间了,现在,尝试了没有路径的入口只有用户信誉作为后端,但仍然有相同的错误
任何帮助或建议都将不胜感激,谢谢:)终于明白了,这与健康检查有关。运行状况检查访问/并期望值为200,如果未获得该值,则会将后端标记为不健康,并对发送到后端的每个请求返回502。我的问题是,我使用的是/endpoint,如果在没有特定请求参数的情况下调用它,它通常会返回400 对我来说,这确实是一个人为错误,它甚至在文档中明确指出:
另一个要考虑的是入口返回路由之前的所有路径,因此服务器需要逐字监听/用户/ CREDs/在我的例子中。p> 最后终于弄明白了,这与健康检查有关。运行状况检查访问/并期望值为200,如果未获得该值,则会将后端标记为不健康,并对发送到后端的每个请求返回502。我的问题是,我使用的是/endpoint,如果在没有特定请求参数的情况下调用它,它通常会返回400
对我来说,这确实是一个人为错误,它甚至在文档中明确指出:另一个要考虑的是入口返回路由之前的所有路径,因此服务器需要逐字监听/用户/ CREDs/在我的例子中。p> 转到GCP控制台并查看创建的负载平衡器。后端是否显示0/N正常实例?单击健康检查链接以查看创建了哪些健康检查设置。如果您的用户creds binary在路径“/”处未返回200,则运行状况检查将失败。如果您发现问题,则与运行状况检查有关,感谢您的帮助转到GCP控制台并查看创建的负载平衡器。后端是否显示0/N正常实例?单击健康检查链接以查看创建了哪些健康检查设置。如果您的用户creds binary在路径“/”处未返回200,则运行状况检查失败。如果发现问题,则与运行状况检查有关,谢谢您的帮助