Kubernetes Ingress - 服务路由入口不起作用

use*_*872 5 kubernetes kubernetes-ingress

我有一个像下面这样的入口。

kubectl get ing test-ingress -o yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{"kubernetes.io/ingress.class":"tectonic"},"name":"test-ingress","namespace":"nstest"},"spec":{"rules":[{"host":"test.nstest.k8s.privatecloud.com","http":{"paths":[{"backend":{"serviceName":"test","servicePort":8080},"path":"/"}]}}]}}
    kubernetes.io/ingress.class: tectonic
  creationTimestamp: 2018-03-27T17:57:02Z
  generation: 1
  name: test-ingress
  namespace: "nstest"
  resourceVersion: "19985087"
  selfLink: /apis/extensions/v1beta1/namespaces/nstest/ingresses/test-ingress
  uid: 4100bd04-31e8-11e8-8f7b-5cb9018ebebc
spec:
  rules:
  - host: test.nstest.k8s.privatecloud.com
    http:
      paths:
      - backend:
          serviceName: test
          servicePort: 8080
        path: /
status:
  loadBalancer: {}
Run Code Online (Sandbox Code Playgroud)

我的服务如下,

kubectl 获取 svc 测试 -o yaml

apiVersion: v1
kind: Service
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app":"test"},"name":"test","namespace":"nstest"},"spec":{"ports":[{"port":8080,"protocol":"TCP","targetPort":8080}],"selector":{"app":"test"}}}
  creationTimestamp: 2018-03-27T17:57:02Z
  labels:
    app: test
  name: test
  namespace: "nstest"
  resourceVersion: "19985067"
  selfLink: /api/v1/namespaces/nstest/services/test
  uid: 40f975f3-31e8-11e8-8f7b-5cb9018ebebc
spec:
  clusterIP: 172.158.50.20
  ports:
  - port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: test
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}
Run Code Online (Sandbox Code Playgroud)

Pod 运行良好。这有什么问题吗?为什么从入口到服务的路由不起作用。

访问入口端点时出错,

Ingress Error
No healthy backends could be found.
Check pod liveness probes for more details.
Run Code Online (Sandbox Code Playgroud)

谢谢,

Tro*_*ndh 4

您应该在服务规范中为端口指定一个“名称”,并在 Ingress 中引用该名称:

---
apiVersion: v1
kind: Service
metadata:
  name: myApp
spec:
  selector:
    app: myApp
  ports:
  - name: http
    port: 80
    targetPort: 80

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myApp
spec:
  rules:
  - host: myapp.domain.com
    http:
      paths:
      - path: /
        backend:
          serviceName: myApp
          servicePort: http
Run Code Online (Sandbox Code Playgroud)