Фон
Я проверяю настройку 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
, что он может получить доступ к модулю, но не к сервису.Я не понимаю, есть ли какие-то внутренние настройки, которые я пропускаю?