Я настроил кластер KPS AWS для Kubernetes, у меня есть несколько микросервисов, где в каждом приложении необходимо взаимодействовать друг с другом.
Сценарий: мое приложение ta2carbon пытается вызвать функцию в приложении ta1carbon через имя службы (dns).
Результат: происходит сбой с ошибкой тайм-аута при попытке подключения к порту 80 (но настроен порт -3000)
журнал консоли моего приложения nodejs,
apiUrl: http://ta1carbon/api/app1/app1Func2
{ Error: connect ETIMEDOUT 100.66.7.165:80
at Object._errnoException (util.js:992:11)
at _exceptionWithHostPort (util.js:1014:20)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1186:14)
code: 'ETIMEDOUT',
errno: 'ETIMEDOUT',
syscall: 'connect',
address: '100.66.7.165',
port: 80 }
Те же журналы ошибок для curl, когда я пытался свернуть свое приложение ta1carbon внутри модуля ta2carbon.
root@ta2carbon-5fdcfb97cc-8j4nl:/home/appHome# curl -i http://ta1carbon/api/app1/app1Func2
curl: (7) Failed to connect to ta1carbon port 80: Connection timed out
но мой определенный порт в service.yaml 3000, а не 80!
ниже приведены конфигурации yml для обслуживания обоих микросервисов.
ta1carbon service yaml
apiVersion: v1
kind: Service
metadata:
name: ta1carbon
labels:
app: ta1carbon
spec:
ports:
- port: 3000
targetPort: 3000
type: ClusterIP
selector:
app: ta1carbon
ta2carbon service yaml
apiVersion: v1
kind: Service
metadata:
name: ta2carbon
labels:
app: ta2carbon
spec:
ports:
- port: 3001
targetPort: 3001
type: ClusterIP
selector:
app: ta2carbon
А ниже приведено подробное описание услуг для ta1carbon и ta2 carbon.
kubectl describe service ta1carbon
Name: ta1carbon
Namespace: default
Labels: app=ta1carbon
Annotations: <none>
Selector: app=ta1carbon
Type: ClusterIP
IP: 100.66.7.165
Port: <unset> 3000/TCP
TargetPort: 3000/TCP
Endpoints: 100.96.1.13:3000
Session Affinity: None
Events: <none>
kubectl describe service ta2carbon
Name: ta2carbon
Namespace: default
Labels: app=ta2carbon
Annotations: <none>
Selector: app=ta2carbon
Type: ClusterIP
IP: 100.67.129.126
Port: <unset> 3001/TCP
TargetPort: 3001/TCP
Endpoints: 100.96.1.12:3001
Session Affinity: None
Events: <none>
Итак, исходя из того, что я наблюдаю, для URL http://ta1carbon/api/app1/app1Func2
service dns ta1carbon разрешается в 100.67.24.69: 80 , что приводит к тайм-ауту.
, но, если я свернусь с 100.67.24.69: 3000 изнутри карбоновой капсулы, я получу ответ об успехе
Также, если я изменю свой сервис yaml - порт: 80 , разверну и протестирую снова, я получу успешный ответ
Я нахожу это поведение в Куберне довольно странным, не уверен, что я ошибаюсь или из-за окружающей среды.
Мой запрос -
почему он разрешает службу ta1carbon в значение 100.67.24.69:80 и время ожидания, когда порт должен был быть 3000!
Любой вклад в это будет высоко ценится. пожалуйста, дайте мне знать, чего в этом не хватает.