我认为您可以在全球范围内找到大量关于客户 Web 应用程序在 Kubernetes 集群中的集成以及进一步向服务访问者展示它们的教程。
实际上,在Docker 环境中容器化的应用程序必须从Dockerfile 移植到特定的Image 或在Docker Compose 工具中构建,以保留所有应用程序的服务依赖关系;当镜像准备好后,它可以存储在公共DockerHub或隔离Private registry中,因此Kubernetes容器runtime然后拉取这个镜像并根据声明的资源在集群内创建适当的工作负载(Pods)@ 987654329@.
我会推荐以下场景:
从您最初的 Dockerfile 构建 docker 映像(我做了一些更正):
FROM node:8
WORKDIR /usr/src/app
COPY dist/ ./dist/
RUN npm install -g serve
$ sudo docker image build <PATH>
创建与源图片相关的tag:
$ sudo docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
将图像导出到 DockerHub 或一些私有注册表:
$ sudo docker push [OPTIONS] NAME[:TAG]
创建相关的Kubernetes工作负载(Pod)并应用到Kubernetes集群中,在容器内启动Node服务器,监听5000端口:
apiVersion: v1
kind: Pod
metadata:
name: nodetest
labels:
node: test
spec:
containers:
- name: node-test
image: TARGET_IMAGE[:TAG]
ports:
- containerPort: 5000
command: [ "/bin/bash", "-ce", "serve -s dist" ]
如果您考虑将应用程序暴露给外部集群客户端,请查看NodePort 服务:
$ kubectl expose po nodetest --port=5000 --target-port=5000 --type=NodePort
Update_1:
然后,应用程序服务可能会在某个特定端口内访问主机,您可以简单地检索此端口值:
kubectl get svc nodetest -o jsonpath='{.spec.ports[0].nodePort}'
Update_2:
为了在某个所需端口上公开NodePort 服务,只需应用以下清单,接近 30000 端口分配:
apiVersion: v1
kind: Service
metadata:
labels:
node: test
name: nodetest
spec:
ports:
- nodePort: 30000
port: 5000
protocol: TCP
targetPort: 5000
selector:
node: test
type: NodePort