首页 文章

Kubernetes Ingress - Ingress服务路由无法正常工作

提问于
浏览
2

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

kubectl进入测试入口-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: {}

我的服务如下,

kubectl获得svc test -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: {}

beans 荚运行正常 . 这有什么问题?为什么从入口到服务的路由不起作用 .

访问入口 endpoints 时出错,

入口错误
没有找到 Health 的后端 .
检查pod活性探针以获取更多详细信息 .

谢谢,

2 回答

  • 0

    您应该在服务规范中为端口指定“名称”,并在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
    
  • 3

    在Dockerfile中,您需要导出一个端口(服务器正在侦听,例如8080),如下所示:

    EXPOSE 8080/tcp
    

    在部署中,您需要将 containerPort 指定为8080 .

相关问题