首页 > 解决方案 > 错误 {"message":"failure to get a peer from the ring-balancer"} 使用 kong ingress

问题描述

当我尝试使用公共 IP 访问时收到错误消息:

"{"message":"failure to get a peer from the ring-balancer"}"

看起来Kong无法提供上游服务。

我正在使用投票应用程序

入口.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: telehealth-ingress
  namespace: kong
  annotations:
    kubernetes.io/ingress.class: "kong"
spec:
  rules:
  - http:
      paths:
      - backend:
          serviceName: voting-service
          servicePort: 80

服务.yaml

apiVersion: v1
kind: Service
metadata:
  name: voting-service
  labels:
    name: voting-service
    app: voting-app
spec:
  ports:
    - targetPort: 80
      port: 80
  selector:
    name: voting-app-pod
    app: voting-app

部署.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: voting-app-pod
  labels:
    name: voting-app-pod
    app: voting-app
spec:
  template:
    metadata:
      labels:
        name: voting-app-pod
        app: voting-app
    spec:
      containers:
        - name: voting-app
          image: dockersamples/examplevotingapp_vote
          ports:
           - containerPort: 80
  replicas: 2
  selector:
    matchLabels:
      app: voting-app

标签: kuberneteskubernetes-ingresskongkong-ingress

解决方案


这里可能有很多问题之一。但基本上你的入口无法到达你的后端。

如果您的后端启动并运行?

  • 检查后端 pod 是否“正在运行”

    kubectl get pods
    
  • 检查后端部署是否已启动所有副本

    kubectl get deploy
    
  • 连接到应用程序 pod 并运行 localhost:80 请求

    kubectl exec -it <pod-name> sh
    # curl http://localhost
    
  • 连接到 ingress pod,看看你是否可以从那里访问服务

    kubectl exec -it <ingress-pod-name> sh
    # dig voting-service  (can you DNS resolve it)
    # telnet voting-sevice 80
    # curl http://voting-service
    

此问题可能会揭示您无法访问后端服务的原因。你看到了什么http错误代码?


推荐阅读