Kubernetes 库伯内特斯吊舱
我将我的容器部署在kubernetes吊舱中,D吊舱和相关服务已经启动并运行 请查找以下pod和pod的部署状态Kubernetes 库伯内特斯吊舱,kubernetes,Kubernetes,我将我的容器部署在kubernetes吊舱中,D吊舱和相关服务已经启动并运行 请查找以下pod和pod的部署状态 root@jenkins-linux-vm:/home/admin/kubernetes# kubectl get pods NAME READY STATUS RESTARTS AGE angular-deployment-5d5fbf967c-zvzvl 1/1 Running 0
root@jenkins-linux-vm:/home/admin/kubernetes# kubectl get pods
NAME READY STATUS RESTARTS AGE
angular-deployment-5d5fbf967c-zvzvl 1/1 Running 0 70m
root@jenkins-linux-vm:/home/admin/kubernetes# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
angular-service NodePort 10.96.16.68 <none> 80:31000/TCP 79m
root@jenkins-linux-vm:/home/admin/kubernetes# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
angular-deployment 1/1 1 1 70m
即使我无法在浏览器中访问我的应用程序服务,如下所示
https://10.0.0.1:31000
如果您通过
nodeip:nodeport
访问pod,请有人帮助我如何解决此问题,该方法仅在您使用浏览器从集群外部访问pod时有效
这里有一个关于如何使用的指南。在这种情况下,kubernetes集群的节点需要是可访问的,即应该具有公共ip
您应该使用集群ip从集群内访问pod,即通过exec从另一个pod访问pod,如下面的命令所示
kubectl exec -it angular-deployment-5d5fbf967c-zvzvl curl 10.96.16.68:80
我感觉您的docker容器没有监听端口80。这里我可以看到问题在于您的Angular Dockerfile,您正在使用
ng serve
如果您在package.json中看到依赖项,您将看到“@Angular/cli”:“*”
为了在docker中实现这一点,您需要添加运行npm install
这将在docker容器中安装所有依赖项,您可以执行ng serve
但是ng serve
用于本地开发,我认为这不是一个好方法
要识别此类问题,建议在本地计算机上运行类似的操作,以便在将docker容器部署到k8s集群之前,确定其工作是否正常。正如您所知,kubernetes是一个非常大的领域,它需要时间来识别实际问题
好的,说到这个问题(我可以简单地在dockerfile中添加一个命令并添加我的答案,但我不建议使用这种方法。所以添加完整的答案看起来不错),在部署某些前端相关应用程序时,docker image需要具备为index.html页面提供服务的功能,它是构建Angular
或React
应用程序后的最终产品
有几种方法可以做到这一点。有几个教程解释了这一点,我建议你的dockerfile
应该是这样的。添加他们所做的评论
#Stage0: builder, based on Node alpine imagine to build and compile your angular code
FROM node:10-alpine as builder
WORKDIR /app
COPY package*.json /app/
# This is one thing you forgot in your dockerfile, if you add this it might work
RUN npm install
COPY . .
# This is normal build, it does ng build
RUN npm run build
#Stage 1, based on Nginx imagine, to have only the compile app inside nginx folders to serve
FROM nginx:1.15
COPY --from=builder /app/dist/ /usr/share/nginx/html
# This one copies the local nginx.conf file as default.conf for nginx to let it serve
COPY ./nginx.conf /etc/nginx/conf.d/default.conf
请确保代码中有nginx.conf
文件,文件级别与package.json相同
server {
listen 80;
sendfile on;
default_type application/octet-stream;
gzip on;
gzip_http_version 1.1;
gzip_disable "MSIE [1-6]\.";
gzip_min_length 1100;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_comp_level 9;
root /usr/share/nginx/html;
location / {
#try_files $uri $uri/ /index.html =404;
expires -1d;
alias /usr/share/nginx/html/;
try_files $uri$args $uri$args/ /index.html =404;
location ~* \.(?:ico|css|js|gif|jpe?g|png|svg|woff|woff2|ttf|eot)$ {
add_header Access-Control-Allow-Origin *;
}
}
}
在将其部署到集群之前,请确保在本地计算机上运行docker run
希望这能有所帮助。10.0.0.1这是pod的ip?10.0.0.1不是pod的ip,它的ip地址是我的主机。你能从
kubectl exec-it--ss-ln发布输出吗?它将显示您暴露的端口是否已打开。root@jenkins-linux vm:/home/admin/kubernetes#kubectl exec-it angular-deployment-5d5fbf967c-zvzvl curl 10.96.16.68:80 curl:(7)无法连接到10.96.16.68端口80:连接被拒绝命令终止,退出代码7您能描述一下pod kubectl描述podnameHi Arghya吗,我已经更新了pod descripe,您能帮助meso如何在浏览器中公开应用程序吗?我们需要查看服务是否有端点。请提供kubectl descripe服务输出的输出
root@jenkins-linux-vm:/home/admin# kubectl describe svc angular-service
Name: angular-service
Namespace: pre-release
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"angular-service","namespace":"pre-release"},"spec":{"ports":[{"no...
Selector: app=frontend-app
Type: NodePort
IP: 10.96.227.143
Port: <unset> 80/TCP
TargetPort: 80/TCP
NodePort: <unset> 31000/TCP
Endpoints: 10.32.0.4:80,10.32.0.8:80
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
FROM node:12.2.0
# set working directory
WORKDIR /app
# add `/app/node_modules/.bin` to $PATH
ENV PATH /app/node_modules/.bin:$PATH
# install and cache app dependencies
COPY package.json /app/package.json
# add app
COPY . /app
# start app
CMD ng serve --host 0.0.0.0
kubectl exec -it angular-deployment-5d5fbf967c-zvzvl curl 10.96.16.68:80
#Stage0: builder, based on Node alpine imagine to build and compile your angular code
FROM node:10-alpine as builder
WORKDIR /app
COPY package*.json /app/
# This is one thing you forgot in your dockerfile, if you add this it might work
RUN npm install
COPY . .
# This is normal build, it does ng build
RUN npm run build
#Stage 1, based on Nginx imagine, to have only the compile app inside nginx folders to serve
FROM nginx:1.15
COPY --from=builder /app/dist/ /usr/share/nginx/html
# This one copies the local nginx.conf file as default.conf for nginx to let it serve
COPY ./nginx.conf /etc/nginx/conf.d/default.conf
server {
listen 80;
sendfile on;
default_type application/octet-stream;
gzip on;
gzip_http_version 1.1;
gzip_disable "MSIE [1-6]\.";
gzip_min_length 1100;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_comp_level 9;
root /usr/share/nginx/html;
location / {
#try_files $uri $uri/ /index.html =404;
expires -1d;
alias /usr/share/nginx/html/;
try_files $uri$args $uri$args/ /index.html =404;
location ~* \.(?:ico|css|js|gif|jpe?g|png|svg|woff|woff2|ttf|eot)$ {
add_header Access-Control-Allow-Origin *;
}
}
}