- Экспресс-сервер node.js привязан к порту 8080
server.listen(8080, () => {
logger.log({
level: 'info',
message: 'Listening on port ' + port
})
})
- Образ Docker с кодом node.js + модули npm с открытым портом 8080
FROM node:10-alpine
...
# Expose port
EXPOSE 8080
- Развертывание образа Docker в Kubernetes с настроенным контейнером Port 8080
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment
spec:
selector:
matchLabels:
app: deployment
replicas: 2
template:
metadata:
labels:
app: deployment
spec:
containers:
- name: job-id-20
image: redacted/redacted
command: ["node", "backend/services.js"]
ports:
- name: http-port
containerPort: 8080
imagePullSecrets:
- name: docker-hub-credentials
dnsConfig:
options:
- name: ndots
value: "0"
- Сервис Kubernetes с соответствующим селектором для приложения с targetPort 8080 и типом LoadBalancer
apiVersion: v1
kind: Service
metadata:
name: service
spec:
ports:
- protocol: TCP
targetPort: 8080
port: 8080
selector:
app: deployment
type: LoadBalancer
- Убедитесь, что балансировщик нагрузки имеет внешний IP-адрес (я его очистил)
$ kubectl --kubeconfig="k8s-1-13-4-do-0-nyc1-1552761372568-kubeconfig.yaml" get service/service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service LoadBalancer 10.245.239.60 1x4.2x9.1x8.x2 8080:30626/TCP 113s
- curl завершается ошибкой с пустым ответом
$ curl --verbose http://1x4.2x9.1x8.x2:8080/
* Trying 1x4.2x9.1x8.x2...
* TCP_NODELAY set
* Connected to 1x4.2x9.1x8.x2 (1x4.2x9.1x8.x2) port 8080 (#0)
> GET / HTTP/1.1
> Host: 1x4.2x9.1x8.x2:8080
> User-Agent: curl/7.54.0
> Accept: */*
>
* Empty reply from server
* Connection #0 to host 1x4.2x9.1x8.x2 left intact
curl: (52) Empty reply from server
Я ожидаю, что трафик будет перенаправлен на службу к одной из модулей / реплик в развертывании. Что я делаю не так?