Kubernetes Ingress Controller 返回 503 服务不可用

Thi*_*ova 15 kubernetes kubernetes-ingress

因此,我有一个入口控制器将流量路由到三个不同的服务,但只有一个正在工作,所有其他服务都返回 503。INGRESS YAML

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  namespace: dev
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
spec:
  rules:
  - host: localhost
    http:
      paths:
      - path: /equip
        backend:
            serviceName: web-equip-svc-2
            servicePort: 18001
      - path: /hello
        backend:
            serviceName: hello-service
            servicePort: 80
      - path: /equip-ws
        backend:
            serviceName: web-equip-svc-2
            servicePort: 18000
Run Code Online (Sandbox Code Playgroud)

工作 SVC YAML

apiVersion: v1
kind: Service
metadata:
  name: hello-service
  namespace: linkerd-test
  labels:
    app: hello
spec:
  type: ClusterIP
  selector:
    app: hello
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP
Run Code Online (Sandbox Code Playgroud)

无法使用 SVC YAML

---
apiVersion: v1
kind: Service
metadata:
  name: web-equip-svc-2
  namespace: dev
  labels:
    app: equipment-service
spec:
  type: ClusterIP
  selector:
    app: equipment-service
  ports:
  - name: "http"
    port: 18001
    targetPort: 8080
    protocol: TCP
  - name: "websocket"
    port: 18000
    targetPort: 8080
    protocol: TCP
Run Code Online (Sandbox Code Playgroud)

所以,我已经尝试更改入口的注释,将 svc 从 clusterIP 更改为 loadBalancer...但没有任何效果,欢迎任何帮助

Sho*_*gan 10

如果可以的话,您应该将服务保留为 ClusterIP。入口控制器的目的是为集群提供一个集中入口。

首先要尝试的事情

首先独立测试您的服务。(两个不工作)。执行到另一个正在运行的 pod,然后执行以下操作:

curl http://web-equip-svc-2:18001看看您是否收到直接返回到服务的响应,而不是通过您的入口。如果工作正常,那么您就知道您的入口规则配置和/或控制器存在问题。

如果它不起作用,那么您就知道它只是您的实际容器/pod 正在运行这两个服务,您可以先关注那里并解决问题。

第二件事要尝试

简化您的入口规则。删除 的路径作为/equip-ws开始,只保留/hello和 的路径/equip

      - path: /equip-ws
        backend:
            serviceName: web-equip-svc-2
            servicePort: 18000
Run Code Online (Sandbox Code Playgroud)

然后使用更改的简化入口规则再次http://localhost/hello进行测试。http://localhost/equip

如果这有效,那么您就知道入口规则中的两个装备路径导致了问题,您可以在那里解决冲突/问题。


use*_*596 10

对我来说,我在另一个命名空间中对同一主机有另一个入口(我忘记了)

kubectl get ingress --all-namespaces | grep <HOST>
Run Code Online (Sandbox Code Playgroud)

帮我找到了它。