Как исправить 503 Служба временно недоступна

К вашему сведению:

  1. Я запускаю Kubernetes на рабочем столе докера для Mac
  2. Сайт на основе образа Nginx

Я запускаю 2 простых развертывания веб-сайтов на Kubetesetes и использую службу NodePort. Затем я хочу сделать маршрутизацию на сайт с помощью входа. Когда я открываю браузер и захожу на веб-сайт, я получаю сообщение об ошибке 503, как на изображениях ниже. Итак, как мне исправить эту ошибку?

### Service
apiVersion: v1
kind: Service
metadata:
  name: app-svc
  labels:
    app: app1
spec:
  type: NodePort
  ports:
  - port: 80
  selector:
    app: app1
---
apiVersion: v1
kind: Service
metadata:
  name: app2-svc
  labels:
    app: app2
spec:
  type: NodePort
  ports:
  - port: 80
  selector:
    app: app2

### Ingress-Rules
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: app-ingress
  annotations:
    ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /app1
        backend:
          serviceName: app-svc
          servicePort: 30092
      - path: /app2
        backend:
          serviceName: app2-svc
          servicePort: 30936


введите здесь описание изображения


person Rexy Sihombing    schedule 25.10.2019    source источник
comment
Попробуйте установить свой сервис с типом ClusterIP вместо NodePort и установите для servicePort значение 80.   -  person Jonas    schedule 25.10.2019
comment
@Jonas Я получаю сообщение об ошибке 404 после изменения типа службы на ClusterIP.   -  person Rexy Sihombing    schedule 28.10.2019
comment
Какие заголовки http вы получаете на 404? Заголовок сервера похож на openresty? Вы пытались получить доступ к nginx-ingress, следуя ‹your-ip›:‹nginx-ingress-node-port›/app1?   -  person Jonas    schedule 28.10.2019


Ответы (4)


Да, я получаю ту же ошибку. как только я изменил тип службы на «ClusterIP», у меня все заработало.

person Srinivas Charan Mamidi    schedule 28.04.2020

Нашел эту страницу после поиска решения для nginx, постоянно возвращающего 503 ответа, несмотря на то, что все имена служб настроены правильно. Проблема для меня заключалась в том, что я настроил службу kubernetes в определенном пространстве имен, но не обновил входной компонент, чтобы он находился в том же пространстве имен. Несмотря на то, что это было такое простое решение, оно было вовсе не очевидным!

person Ben Wesson    schedule 03.06.2020

Я советую вам использовать тип сервиса ClusterIP. Взгляните на эту полезную статью: ingress/" rel="nofollow noreferrer">services-kubernetes.

Если вы используете Ingress, вы должны знать, что Ingress — это не тип службы, а скорее объект, который действует как обратный прокси-сервер и единственная точка входа в ваш кластер, который направляет запрос к различным службам. Самый простой Ingress — это NGINX Ingress Controller, где NGINX берет на себя роль обратного прокси-сервера, а также работает как SSL. На приведенном ниже рисунке вы можете увидеть рабочий процесс между определенными компонентами объектов среды.

Ingress предоставляется за пределы кластера через ClusterIP и прокси-сервер Kubernetes, NodePort или LoadBalancer и направляет входящий трафик в соответствии с настроенными правилами.

Пример определения службы:

---
apiVersion: v1
kind: Service
metadata:
  name: app-svc
  labels:
    app: app1
spec:
  type: ClusterIP
  ports:
  - port: 80
  selector:
    app: app1
---
apiVersion: v1
kind: Service
metadata:
  name: app2-svc
  labels:
    app: app2
spec:
  type: ClusterIP
  ports:
  - port: 80
  selector:
    app: app2

Дайте мне знать, если это поможет.

person Malgorzata    schedule 25.10.2019
comment
Я получаю 404 после смены службы на ClusterIP. - person Rexy Sihombing; 28.10.2019
comment
да, даже я получил 503 после замены. - person Hushen; 09.12.2020

Во-первых, вам нужно изменить тип службы вашего app-service на ClusterIP, потому что объект Ingress будет получать доступ к этим Pods(службам) изнутри кластера. (Служба ClusterIP используется, когда вы хотите разрешить доступ к поду внутри кластера).

Во-вторых, убедитесь, что службы запущены, запустив kubectl get services, и сравните имена запущенных служб с именами в разделе backend правил маршрутизации Ingress.

person Mu-Majid    schedule 24.10.2020