【问题标题】:Google Kubernetes Engine Ingress UNHEALTHY backend serviceGoogle Kubernetes Engine Ingress 不健康的后端服务
【发布时间】:2018-10-07 05:24:52
【问题描述】:

温馨提示:我在 StackOverflow 上搜索了很多与此问题相关的问题,但也无法解决我的问题,这就是为什么不将其标记为重复的原因,请!

我正在尝试在 Google Kubernetes Engine 上部署 2 个服务(一个是 Python flask,另一个是 NodeJS)。我为每个服务创建了两个 Kubernetes 部署,一个为 NodePort 类型的每个服务创建了两个 Kubernetes 服务。然后,我创建了一个 Ingress 并提到了我的 endpoints,但 Ingress 说一个后端服务是 UNHEALTHY

这是我的部署 YAML 定义:

# Pyservice deployment
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: pyservice
  labels:
    app: pyservice
  namespace: default
spec:
  selector:
    matchLabels:
        app: pyservice
  template:
    metadata:
      labels:
        app: pyservice
    spec:
      containers:
      - name: pyservice
        image: docker.io/arycloud/docker_web_app:pyservice
        ports:
        - containerPort: 5000
      imagePullSecrets:
         - name: docksecret

# # Nodeservice deployment
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nodeservice
  labels:
    app: nodeservice
  namespace: default
spec:
  selector:
    matchLabels:
        app: nodeservice
  template:
    metadata:
      labels:
        app: nodeservice
        tier: web
    spec:
      containers:
      - name: nodeservice
        image: docker.io/arycloud/docker_web_app:nodeservice
        ports:
        - containerPort: 8080
      imagePullSecrets:
         - name: docksecret

还有,这是我的服务和 Ingress YAML 定义:

# pyservcie service
kind: Service
apiVersion: v1
metadata:
  name: pyservice
spec:
  type: NodePort
  selector:
    app: pyservice
  ports:
  - protocol: TCP
    port: 5000
    nodePort: 30001
---

# nodeservcie service
kind: Service
apiVersion: v1
metadata:
  name: nodeservcie
spec:
  type: NodePort
  selector:
    app: nodeservcie
  ports:
  - protocol: TCP
    port: 8080
    nodePort: 30002
---

# Ingress

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: "gce"
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /
        backend:
          serviceName: pyservice
          servicePort: 5000
      - path: /*
        backend:
          serviceName: pyservice
          servicePort: 5000
      - path: /node/svc/
        backend:
          serviceName: nodeservcie
          servicePort: 8080

pyservice 工作正常,但nodeservice 显示为UNHEALTHY 后端。这是一个屏幕截图:

即使我已经为所有gke-.... 编辑了Firewall Rules 并允许所有端口只是为了摆脱这个问题,但它仍然显示nodeserviceUNHEALTHY 状态。

这里有什么问题?

提前致谢!

【问题讨论】:

  • 我这两天也遇到了同样的问题,最后是因为我的应用程序正在将“/”路径重定向到路径“/b”,并且为了检查健康,您不能在“/”中重定向",你的应用必须返回 200
  • 我已经在本地测试了这个服务容器,它工作正常。
  • 这可能不是防火墙规则问题,您能否通过 nodeport curl 暴露的服务以查看是否收到 200 响应? curl [node_IP]:30002
  • 嗨@PatrickW,感谢您来这里,两种服务都需要在/返回200还是只需要第一次服务?
  • 每个服务都会作为一个单独的后端,所以每个服务都是单独探测的,需要返回200

标签: docker kubernetes google-cloud-platform google-kubernetes-engine kubernetes-ingress


【解决方案1】:

为什么要使用 GCE 入口类,然后指定 nginx 重写注释?如果您没有意识到,注释不会对 GCE 入口做任何事情。

你也有'nodeservcie'作为你的选择器而不是'nodeservice'。

【讨论】:

  • 我已经修复了错字问题并从入口中删除了所有注释,一个服务再次进入不健康状态一段时间,但过了一会儿又恢复健康,为什么会发生这种情况?
猜你喜欢
  • 1970-01-01
  • 2019-06-28
  • 2018-12-20
  • 2023-01-24
  • 1970-01-01
  • 2020-03-01
  • 2017-01-10
  • 2022-08-04
  • 1970-01-01
相关资源
最近更新 更多