首页 文章

Ingress不适用于Google Kubernets Engine(GKE)

提问于
浏览
1

下面给出了配置,我试图在Google Kubernetes Engine上部署 . 但部署后,我无法访问入口外部IP上的服务 .

如果我这样做,我可以访问该服务:

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

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

  • 同步时出错:评估入口规范时出错:无法找到服务"default/todo"

要么

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

即使后端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

    很难说不知道'todo'做什么,但有一些事情:

    • Ingress定义中存在缩进错误 . 我不确定它是否是拼写错误或者没有得到应用:

    相反,它应该是:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: todo-ingress
    spec:
      rules:
      - http:
          paths:
          - path: /*
            backend:
              serviceName: todo
              servicePort: 6078
    
    • 如果你真的想 /* 没有 host 那么默认后端会覆盖你,因为它是 nginx.conf 中的最后一条规则,所以你也可以配置:
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: todo-ingress
    spec:
      backend:
        serviceName: todo
        servicePort: 6078
    
    • 您的服务是否绑定到 0.0.0.0 而不是 127.0.0.1 . 聆听 127.0.0.1 将导致它在pod中本地提供,但不能用于外部任何服务 .

相关问题