无法通过Windows上的minikube(Kubenetes)提供Angular应用程序

时间:2018-01-08 18:54:07

标签: angular docker kubernetes minikube

我正在运行Docker for Windows和Minikube(Kubernetes)来为Angular应用程序提供服务。角度应用程序使用ng serve提供,并在Windows上正常工作。我创建了下面的Dockerfile:

# Use an official Nodejs runtime as a parent image
FROM node:6.10.3

#Create an unprivileged user 'app'
#Install dependencies
RUN useradd --user-group --create-home --shell /bin/false app &&\
   npm install -g grunt-cli &&\
   npm install -g @angular/cli

# Define environment variable
ENV ENVIRONMENT="dev" HOME=/home/app

#Copy the code to the image
COPY . $HOME/frontend/

#Chmod the files to allow unprivileged user 'app' to read/write
RUN chown -R app:app $HOME/*

#Use unprivileged user 'app' to run the app inside the container
USER app

#Set Current Working Directory of the runtime 
WORKDIR $HOME/frontend

#Install NPM dependencies
RUN npm install

# Make port 8080 and 4200 available to the world outside this container
EXPOSE 4200

# Start the webpack server when the container launches
CMD ng serve

我在windows中为minikube设置了我的环境变量以及我的Docker变量(minikube docker-env)

DOCKER_API_VERSION
DOCKER_CERT_PATH
DOCKER_HOST
DOCKER_MACHINE_NAME
DOCKER_TLS_VERIFY

我构建了Docker镜像并将其标记为v1:

docker build -t frontend:v1 .

我从图像中部署了POD并公开了部署:

kubectl run frontend --image=frontend:v1 --port=4200
kubectl expose deployment frontend --type=LoadBalancer

kubectl get pods显示我的广告连播正在投放,而kubectl get deployments显示我的部署可用

我使用kubectl exec curl localhost:4200执行卷曲,该卷曲在容器上执行,并且正确返回我的页面但是当我尝试使用minikube service frontend运行我的服务时,它会打开浏览器但无法访问我的申请。

值得注意的是,我使用node server.js运行的普通Nodejs应用程序执行了相同的步骤,并使用相同的步骤正确提供。

任何想法为什么我的角度应用程序在开始使用ng服务时没有服务于Kubernetes或者如何解决问题是什么?我可以看到Kubernetes Dashboard中的映射是正确的。

3 个答案:

答案 0 :(得分:1)

这可能与 angular-cli 更相关。 ng serve默认仅绑定到localhost。因此,您的docker容器没有监听它的公共IP地址。

尝试使用:

ng serve --host 0.0.0.0

答案 1 :(得分:0)

Minikube并不真正支持LoadBalancer的服务类型。它不会呕吐,但你应该读一读它的真正含义。做

minikube service list

查看您可以点击的实际端点。塞巴斯蒂安的观点可能仍然适用

答案 2 :(得分:-1)

尝试公开端口80而不是4200,即

kubectl run frontend --image=frontend:v1 --port=80