503 Служба временно недоступна на kubectl apply -f k8s

Вопрос или проблема

express-cluster-ip-service.yaml

apiVersion: v1
kind: Service
metadata: 
  name: express-cluster-ip-service
spec:
  type: ClusterIP
  selector:
    component: server
  ports:
    - port: 5000
      targetPort: 5000

express-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: express-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      component: server
  template:
    metadata:
      labels:
        component: server
    spec:
      containers:
        - name: express
          image: simonjames/react-node-docker-kubernetes-app-express
          ports:
            - containerPort: 5000
          env:
            - name: REDIS_HOST
              value: redis-cluster-ip-service
            - name: REDIS_PORT
              value: '6379'
            - name: PGUSER
              value: postgres
            - name: PGHOST
              value: postgres-cluster-ip-service
            - name: PGPORT
              value: '5432'
            - name: PGDATABASE
              value: postgres
            - name: PGPASSWORD
              valueFrom:
                secretKeyRef:
                  name: pgpassword
                  key: PGPASSWORD

react-cluster-ip-service.yaml

apiVersion: v1
kind: Service
metadata:
  name:  react-cluster-ip-service
spec:
  type: ClusterIP
  selector:
    component: web
  ports:
    - port: 3000
      targetPort: 3000

react-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: react-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      component: web
  template:
    metadata:
      labels:
        component: web
    spec:
      containers:
        - name: react
          image: simonjames/react-node-docker-kubernetes-app-react
          ports:
            - containerPort: 3000

ingres-service.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-service
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
    - http:
        paths:
          - path: /?(.*)
            backend:
              serviceName: react-cluster-ip-service
              servicePort: 3000
          - path: /api/?(.*)
            backend:
              serviceName: express-cluster-ip-service
              servicePort: 5000

Я получаю ошибку 503, когда захожу по URL, сопоставленному с моим minikube. Что может быть причиной этого? Есть ли какие-либо проблемы с конфигурацией. Все работало хорошо, когда я использовал docker-compose.yaml. Я использую аналогичные конфигурации, так в чем же проблема?

Ошибка 503 Служба недоступна — это HTTP-статус ответа, указывающий на то, что сервер временно не может обработать запрос. Это может быть вызвано перегрузкой сервера или его остановкой на техническое обслуживание.

Я провел тест с вашими файлами развертывания yaml, но использовал другие образы, так как у меня нет доступа к тому, который вы упоминаете, и у меня все работает исправно. Ingress и службы корректно направляют трафик к соответствующим подам. Если я удалю одну из служб, я получаю точно такую же ошибку, пытаясь к ней обратиться.

Это указывает на то, что это проблема с подключением к серверу, и трафик не может достичь ваших подов из-за какой-то конфигурации, несовпадения портов или того, что где-то в цепочке сервер недоступен или недостижим.

Я предлагаю сначала проверить ваше подключение с помощью других образов и подтвердить такие же результаты, как у меня. Во-вторых, вы можете посмотреть на пода контроллера nginx:

kubectl logs -n <namespace> <Ingress_nginx_controller_pod_name>

Ответ или решение

Ошибка 503 Service Temporarily Unavailable является сигналом о том, что сервер временно не может обработать запрос. Это может быть вызвано различными причинами, среди которых перегрузка сервера или его временная недоступность.

Возможные причины ошибки

  1. Проблемы с доступностью подов:

    • Проверьте, что ваши поды, содержащие приложения, запущены и работают должным образом. Используйте команду:
      kubectl get pods
    • Убедитесь, что статус подов — Running. Если поды находятся в статусе CrashLoopBackOff, Error или Pending, необходимо изучить их логи для выявления причин:
      kubectl logs <имя_пода>
  2. Конфигурация сервисов:

    • Обратите внимание на раздел selector в конфигурации ваших сервисов. Убедитесь, что он соответствует меткам, назначенным вашим подам. В вашем случае:

      • Сервис express-cluster-ip-service должен направлять трафик на поды с меткой component: server.
      • Сервис react-cluster-ip-service должен направлять трафик на поды с меткой component: web.

      Проверьте метки подов:

      kubectl get pods --show-labels
  3. Проблемы с Ingress:

    • Проверьте состояние вашего Ingress контроллера. Убедитесь, что он работает корректно:
      kubectl get pods -n <namespace> | grep nginx
    • Просмотрите логи контроллера для выявления проблем:
      kubectl logs -n <namespace> <имя_пода_ingress_nginx_controller>
  4. Применение конфигурации:

    • Убедитесь, что конфигурация Ingress и сервисов применена корректно, без ошибок, при помощи:
      kubectl apply -f <имя_файла>.yaml
    • Если есть какие-либо ошибки на этом этапе, исправьте их.
  5. Проверка настройки сети:

    • Убедитесь, что ваша Minikube среда настроена корректно. Используйте команду для получения информации о текущем состоянии вашего кластера:
      minikube status
    • Если вы используете Minikube, вы можете проверить, работает ли прокси:
      minikube tunnel

Рекомендации по устранению ошибки

  1. Проверка подов и сервисов: Убедитесь, что все поды активны и работают, а сервисы настроены соответственно их меткам.

  2. Логи: Обязательно рассмотрите логи подов и контроллера Ingress. Это поможет выявить специфические проблемы.

  3. Тестирование с другими образами: Чтобы устранить проблему с изображениями, используйте другие, рабочие образы для проверки конфигурации.

  4. Документация и спецификации Kubernetes: Вернитесь к документации по Kubernetes и проверьте, нет ли несовпадений в версиях API или других параметрах.

  5. Прямой тест: Если возможно, попробуйте получить доступ к приложениям напрямую через сервисы (например, с помощью kubectl port-forward), чтобы изолировать возможные проблемы с Ingress.

Соблюдение этих рекомендаций поможет вам диагностировать и устранить ошибку 503 Service Temporarily Unavailable в вашем Kubernetes кластере.

Оцените материал
Добавить комментарий

Капча загружается...