Сервис Kubernetes не может свернуться внутри докера - PullRequest
0 голосов
/ 28 января 2019

Фон
Я проверяю настройку Kubernetes на Minikube.У меня есть две простые службы, успешно настроенные, и они поддерживаются простым образом докера.Ниже приведен пример конфигурации моей службы.Я использую NodePort для предоставления службы через порт 80.

# service 1
kind: Service
apiVersion: v1
metadata:
  name: service1
spec:
  selector:
    app: service1
  ports:
  - name: http
    protocol: TCP
    port: 80
    targetPort: 8080
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: service1-deployment
  labels:
    app: service1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: service1
  template:
    metadata:
      labels:
        app: service1
    spec:
      containers:
      - name: service1
        image: service1
        imagePullPolicy: Never
        ports:
        - containerPort: 8080
---
# service 2
kind: Service
apiVersion: v1
metadata:
  name: service2
spec:
  selector:
    app: service2
  ports:
  - name: http
    protocol: TCP
    port: 80
    targetPort: 8080
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: service2-deployment
  labels:
    app: service2
spec:
  replicas: 1
  selector:
    matchLabels:
      app: service2
  template:
    metadata:
      labels:
        app: service2
    spec:
      containers:
      - name: service2
        image: service2
        imagePullPolicy: Never
        ports:
        - containerPort: 8080

Issue
Я использую docker exec -it, чтобы войти внутрь контейнера докера.Я могу curl service1 из service2 контейнера без каких-либо проблем.Однако, если я попытаюсь curl service2 из service2 контейнера, он получит ошибку соединения тайм-аута.

Результаты curl -v service2

Перестроенный URL-адрес для: service2 /
Попытка 10.101.116.46 ...
TCP_NODELAY set
подключение к порту 10.101.116.46Ошибка 80: время ожидания соединения
Не удалось подключиться к порту service2 80: время ожидания истекло
Закрытие соединения 0
curl: (7) Не удалось подключиться к порту service2 80: время ожидания истекло

Полагаю, что DNS-записи разрешаются правильно, потому что 10.101.116.46 - это правильный IP-адрес, прикрепленный к service2.Тогда в чем может быть причина этой проблемы?

Дополнительные контрольные тесты
Насколько мне известно, служба Kubernetes внутренне сопоставляет порт с портом контейнера, поэтому в моем случае она сопоставляет порт службы 80 с портом pod 8080,Из контейнера service2 я могу успешно curl <service2 pod ip>:8080, но не могу curl <service2 ip>, что разрешает ошибку времени ожидания соединения.И это происходит точно так же внутри контейнера service1, что он может получить доступ к модулю, но не к сервису.Я не понимаю, есть ли какие-то внутренние настройки, которые я пропускаю?

1 Ответ

0 голосов
/ 29 января 2019

Это может быть любой из них:

  • Служба обслуживания pod2 имеет службу, которая прослушивает 127.0.0.1 или не прослушивает 0.0.0.0 (любой IP-адрес)
  • service2 имеет перенаправление, и ваш сервис только прослушивает порт 80.Вам потребуется включить другой порт (возможно, 443) и запустить curl с параметром -L, чтобы перейти по ссылке.
  • Служба обслуживания pod2 даже не прослушивает порт 80.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...