首页 > 解决方案 > 没有 pod 的 WorkerNode 上的 502 Bad Gateway

问题描述

我正在尝试了解 K8S 集群上的 Nginx-Ingress。

我根据此处的说明设置了 nginx-ingress 控制器

我的集群有 3 个节点 kubernetes-master、kubernetes-node1、kubernetes-node2

我有一个运行 1 个副本(kubernetes-node1)的 IoTPoD。我创建了一个集群 IP 服务,用于通过 rest 访问这个 pod。下面是清单。

apiVersion: v1
kind: Namespace
metadata:
  name: myiotgarden
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ioteventshandler
  namespace: myiotgarden
  labels:
    app:  ioteventshandler
spec:
  replicas: 2
  selector:
    matchLabels:
      app:  ioteventshandler
  template:
    metadata:
      labels:
        app:  ioteventshandler
    spec:
      containers:
      - name:  ioteventshandler
        image: 192.168.56.105:5000/ioteventshandler:latest
        resources:
          limits:
            memory: "1024M"
          requests:
            memory: "128M"
        imagePullPolicy: "Always"
---
apiVersion: v1
kind: Service
metadata:
  name: iotevents-service
  namespace: myiotgarden
  labels:
    app: iotevents-service
spec:
  selector:
    app: ioteventshandler
  ports:  
  - port: 8080
    protocol: TCP
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ioteventshandler-ingress
  annotations:
    ingress.kubernetes.io/rewrite-target: /
  namespace: myiotgarden
spec:
  rules:
  - host: kubernetes-master
    http:
      paths:
      - path: /iotEvents/sonoff
        backend:
          serviceName: iotevents-service
          servicePort: 8080
  - host: kubernetes-node1
    http:
      paths:
      - path: /iotEvents/sonoff
        backend:
          serviceName: iotevents-service
          servicePort: 8080
  - host: kubernetes-node2
    http:
      paths:
      - path: /iotEvents/sonoff
        backend:
          serviceName: iotevents-service
          servicePort: 8080

我在 Kmaster 节点上运行了一个 haproxy。已将 knode1 和 knode2 配置为工作节点。

frontend http_front
  bind *:80
  stats uri /haproxy?stats
  default_backend http_back

backend http_back
  balance roundrobin
  server worker 192.168.56.207:80
  server worker 192.168.56.208:80

当有 2 个 ioteventshandler 副本运行时,以下命令可以正常工作。

curl -kL http://kubernetes-master/iotEvents/sonoff/sonoff11

我得到了完美的回应。

但是,当我将副本减少到 1 时,curl 命令会间歇性地返回 502 Bad Gateway。我假设当 haproxy 将请求转发到 ioteventshandler 的副本未运行的 knode2 时会发生这种情况。

问题:有没有办法让 knode2 上的入口控制器将其转发到 knode1?我们该怎么做呢?

谢谢你。

标签: kubernetes-ingress

解决方案


推荐阅读