Google cloud platform 集装箱发动机入口不工作

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

我在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 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,则运行状况检查失败。如果发现问题,则与运行状况检查有关,谢谢您的帮助