Ingress在Google Kubernetes Engine(GKE)上不起作用

时间:2018-11-05 23:37:18

标签: kubernetes google-kubernetes-engine

在给出配置之后,我正尝试在Google Kubernetes Engine上进行部署。但是部署后,我无法在入口外部IP上访问该服务。

如果可以,我可以访问该服务

$ kubectl exec POD_NAME
# curl GET localhost:6078/todos

但是我无法通过入口访问它。 GKE UI显示如下错误:

  • 同步期间出错:评估入口规范时出错:找不到服务“默认/待办事项”

OR

  • 某些后端服务处于不健康状态

即使后端Pod已启动并正在运行。

我相信该服务存在问题。

---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: todo
  labels:
    app: todo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: todo
  template:
    metadata:
      labels:
        app: todo
    spec:
      containers:
        - image: eu.gcr.io/xxxxx/todo
          name: todo
          ports:
            - containerPort: 6078
              protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
  name: todo
  labels:
    app: todo
spec:
  type: NodePort
  ports:
    - port: 6078
  selector:
    app: todo
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: todo-ingress
spec:
  rules:
  - http:
  paths:
  - path: /*
    backend:
      serviceName: todo
      servicePort: 6078

1 个答案:

答案 0 :(得分:1)

很难不知道'todo'是做什么的,但是有几件事:

  1. Ingress定义存在缩进错误。我不确定这是拼写错误还是没有应用:

    应该是:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: todo-ingress
    spec:
      rules:
      - http:
          paths:
          - path: /*
            backend:
              serviceName: todo
              servicePort: 6078
    
  2. 如果您真的想要/*而没有host,则默认后端将覆盖您,因为这是nginx.conf中的最后一条规则,因此您最好配置:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: todo-ingress
    spec:
      backend:
        serviceName: todo
        servicePort: 6078
    
  3. 您的服务是否绑定到0.0.0.0而不是127.0.0.1。在127.0.0.1上收听会导致其在广告连播中本地播放,但不会在外部播放。