5

当我尝试使用公共 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
4

2 回答 2

6

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

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

  • 检查后端 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错误代码?

于 2020-06-23T23:49:42.367 回答
2

在 kong 命名空间而不是默认命名空间中部署服务和部署后,问题得到解决。现在我可以使用 Kong 入口公共 IP 访问应用程序。

看起来 kong ingress 无法使用无头 DNS 解析 DNS。我们需要在入口 yaml 中提及 FQDN

于 2020-06-24T18:30:25.387 回答