Служба Kubernetes Nodeport не отвечает

Вот мой yaml развертывания:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: some-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: some-api
  template:
    metadata:
      labels:
        app: some-api
    spec:
      containers:
      - name: some-api-local
        image: "ealen/echo-server:0.9.2"
        ports:
        - containerPort: 80
      imagePullSecrets:
      - name: registrycred

---
apiVersion: v1
kind: Service
metadata:
  name: some-service
spec:
  type: NodePort
  ports:
  - name: http
    port: 5001
    targetPort: 80
    nodePort: 30002
  selector:
    app: some-api

Реальная служба работает на порту 80, а журналы выводятся чуть ниже:

Просто экспериментирую с развертыванием кластера Kubernetes. Я пытаюсь получить доступ к простому эхо-серверу через эту службу выше, например:

10.109.89.108:30002

Вывод: k get nodes --output wide

IP-адрес выше — это IP-адрес моего кластера, который я получил от kubectl get service. Что я делаю неправильно?

Пытался получить доступ, как показано ниже:

  1. 192.168.49.2:30002 (используя IP-адрес узла)
  2. 10.109.89.108:30002 (ip кластера)
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
0
0
61
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

IP-адрес выше — это IP-адрес моего кластера, который я получил от службы kubectl get.

Попробуйте [node IP]:30002 для доступа к порту. Вы можете найти IP узла с помощью kubectl get nodes --output wide.

Для миникуба запустите minikube service some-service --url перед переходом по адресу http://localhost:30002. Подробнее здесь.

это не сработало, я уже это пробовал!

beNerd 20.04.2024 03:50

см. мое редактирование с выводом get nodes: 192.168.49.2:30002 должно работать правильно

beNerd 20.04.2024 03:54

Можете ли вы отредактировать, добавив точную команду, которую вы используете для доступа к 192.168.49.2:30002, сообщение об ошибке и уточнить, на каком узле вы выполняете эту команду.

gohm'c 20.04.2024 04:03

вот команда: kubectl get nodes --output wide и указан только один узел (миникубе)

beNerd 20.04.2024 04:23

Нет, это команда, данная в ответе. Добавьте команду, которую вы используете для доступа к 192.168.49.2:30002, например. завиток?

gohm'c 20.04.2024 04:24

просто это в браузере: 192.168.49.2:30002

beNerd 20.04.2024 04:27

да, это работает. Однако есть один вопрос: как вы обычно занимаетесь локальной разработкой — этот миникуб выглядит не очень жизнеспособным — я использую macOS. Какие-либо предложения? Локально просто работайте обычно и публикуйте изображения с помощью докера. Затем запустить эти оркестрации Kubernetes прямо в средах?

beNerd 20.04.2024 04:40

Я пытаюсь запустить этот API в локальном кластере Kubernetes, и интерфейс должен иметь к нему доступ (локально), с этим динамическим туннелированием может быть сложно каждый раз подключаться?

beNerd 20.04.2024 04:41

Обычно туннель необходимо создать только один раз.

gohm'c 20.04.2024 04:46

Спасибо! это очень помогает. И последнее: есть ли способ выбрать порт с помощью этой сервисной команды minikube?

beNerd 20.04.2024 04:52

Вы не можете выбрать номер порта при использовании команды службы minikube.

gohm'c 20.04.2024 05:01

У вас определено 4 разных порта. У вас есть порт контейнера 3001, Служба прослушивает порт 5001, который пересылает на 80, с узлами, прокси-подключающимися к порту 300002 к вашей Службе.

Какой бы порт ни работало ваше приложение (я предполагаю, 3001), он должен быть вашим targetPort, и удобно, если вы все равно подключаетесь через узел (с каким-то внешним балансировщиком нагрузки), чтобы ваш Сервисный порт также был таким же.

    spec:
      containers:
      - name: some-api-local
        image: "ealen/echo-server:0.9.2"
        ports:
        - containerPort: 3001 # is this the port that echo-server runs on?
      imagePullSecrets:
      - name: registrycred

---
apiVersion: v1
kind: Service
metadata:
  name: some-service
spec:
  type: NodePort
  ports:
  - name: http
    port: 5001 # port the service listens on
    targetPort: 80 # port the app runs on
    nodePort: 30002 # using Nodes as proxy with external LB
  selector:
    app: some-api

Привет, посмотрите мое редактирование: порт контейнера и целевой порт теперь равны 80 с одной и той же проблемой!

beNerd 20.04.2024 03:51

Попробуйте это в качестве первого шага. Проверьте, отвечает ли ваш модуль на http-запрос: kubectl run --rm Curl --image=curlimages/curl -- Curl http://:80

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

betatester07 01.05.2024 14:23

Другие вопросы по теме