Ingress не работает на Google Kubernetes Engine (GKE) - PullRequest
0 голосов
/ 06 ноября 2018

Ниже приведен конфиг, я пытаюсь развернуть на Google Kubernetes Engine. Но после развертывания я не могу получить доступ к сервису по внешнему IP-адресу.

Я могу получить доступ к услуге, если сделаю:

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

Но я не могу получить к нему доступ через вход. GKE UI показывает ошибки, такие как:

  • Ошибка во время синхронизации: ошибка при оценке входной спецификации: не удалось найти службу "default / todo"

OR

  • Некоторые бэкэнд-сервисы находятся в нездоровом состоянии

Несмотря на то, что бэкэнд запущен и работает.

Я считаю, что с сервисом что-то не так.

---
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 голосов
/ 06 ноября 2018

Трудно сказать, не зная, что делает '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 приведет к тому, что оно будет работать локально в модуле, но не будет обслуживаться снаружи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...