Kubernetes 库伯内特斯吊舱

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

我将我的容器部署在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          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 *;
    }
  }
}