У меня есть простой сервер Express.js Dockerized, и когда я запускаю его, как:
docker run -p 3000:3000 mytag:my-build-id
http://localhost:3000/ отвечает просто отлично, а также если я использую IP-адрес локальной сети моей рабочей станции, как http://10.44.103.60:3000/
Теперь, если я разверну это на MicroK8 с декларацией развертывания службы, например:
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
name: my-service
spec:
type: NodePort
ports:
- name: "3000"
port: 3000
targetPort: 3000
status:
loadBalancer: {}
и спецификацией модуля, как это (обновление 2019-11-05):
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
name: my-service
spec:
replicas: 1
selector:
matchLabels:
name: my-service
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
name: my-service
spec:
containers:
- image: mytag:my-build-id
name: my-service
ports:
- containerPort: 3000
resources: {}
restartPolicy: Always
status: {}
и получите незащищенный NodePort через kubectl get services
равным 32750 и попробуйте посетить его на хост-компьютере MicroK8s следующим образом:
curl http://127.0.0.1:32750
тогда запрос просто зависнети если я пытаюсь посетить IP-адрес локальной сети хоста MicroK8s с моей рабочей станции по адресу http://192.168.191.248:32750/, то запрос немедленно отклоняется.
Но, если я пытаюсь перенести порт в модуль с
kubectl port-forward my-service-5db955f57f-q869q 3000:3000
затем http://localhost:3000/ работает просто отлично.
Таким образом, развертывание модуля, кажется, работает нормально, и примеры служб, таких как служба microbot-службы, прекрасно работают в этом кластере.
Я убедился, что сервер Express.js прослушивает все IP с
app.listen(port, '0.0.0.0', () => ...
Так в чем же проблема?