繁体   English   中英

无法在 kubernetes 上运行 angular 应用程序

[英]Unable to run an angular app on kubernetes

我开发了一个 angular 应用程序,它在本地运行良好。 然后我创建了一个 docker 映像,该映像在 docker 环境中也运行良好。 现在我正在尝试将映像部署为 Kubernetes 集群中的服务。 它显示 pod 正在运行,但是我无法访问该应用程序。 最初我尝试通过nodeport运行应用程序。 当它不起作用时,我尝试使用loadbalancer ,但它总是将EXTERNAL-IP显示为待处理。

这是我的详细信息:

nginx-custom.conf

# Expires map
map $sent_http_content_type $expires {
    default                    off;
    text/html                  epoch;
    text/css                   max;
    application/json           max;
    application/javascript     max;
    ~image/                    max;
}

server {
  listen 4200;
  location / {
      root /usr/share/nginx/html;
      index index.html index.htm;
      try_files $uri $uri/ /index.html =404;
    }
  expires $expires;
  gzip  on;
}

Dockerfile

# Stage 1 , "build-step",
FROM node:12.16-alpine as build-step
RUN mkdir -p /app
WORKDIR /app
COPY package*.json /app/
RUN npm install
COPY . /app
RUN npm run build -- --output-path=./dist/out --configuration $configuration

# Stage 2
FROM nginx:1.17.1-alpine
COPY --from=build-step /app/dist/out/ /usr/share/nginx/html
COPY ./nginx-custom.conf /etc/nginx/conf.d/default.conf

部署.yaml

--- 
apiVersion: apps/v1
kind: Deployment
metadata: 
  labels: 
    app: login-ui
    version: v1
  name: login-ui
spec: 
  strategy: # Default, so usually not specified
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1 
      maxUnavailable: 25% 
  replicas: 1
  selector: 
    matchLabels: 
      app: login-ui
      version: v1
  template: 
    metadata: 
      labels: 
        app: login-ui
        version: v1

spec: 
  containers: 
    - image: "tagged-image"
      imagePullPolicy: Always
      name: login-ui
      ports: 
      - name: httpport
        containerPort: 4200
        #hostPort: 4200 

服务.yaml

--- 
apiVersion: v1
kind: Service
metadata: 
  labels: 
    app: login-ui
    version: v1
  name: login-ui
spec: 
  ports: 
    - name: http
      port: 4200
      protocol: TCP
  selector: 
    app: login-ui
    version: v1
  type: NodePort  

    

kubectl 获取 pod

NAME                                READY   STATUS    RESTARTS   AGE
login-ui-7445d644f6-n7d5m           1/1     Running   0          33m 

kubectl 获取 svc

NAME               TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
login-ui           NodePort       XX.XX.XX.XX     <none>        4200:31475/TCP   33m

kubectl 描述 pod login-ui

Events:
  Type    Reason     Age        From                Message
  ----    ------     ----       ----                -------
  Normal  Scheduled  <unknown>                      Successfully assigned default/login-ui-7445d644f6-n7d5m to node01-vm
  Normal  Pulling    38m        kubelet, node01-vm  Pulling image "tagged-image"
  Normal  Pulled     37m        kubelet, node01-vm  Successfully pulled image "tagged-image" in 5.401860205s
  Normal  Created    37m        kubelet, node01-vm  Created container login-ui
  Normal  Started    37m        kubelet, node01-vm  Started container login-ui

之后,我尝试通过以下方式访问浏览器:

http://"my-node-ip":4200/

但我收到无法连接的错误。 此外,当我尝试检查 pod 日志时,那里没有日志。 其他吊舱在那里运行良好。 我可以看到其他 pod 的日志,并且能够从浏览器访问应用程序。

您需要 kubectl get service output 中的第二个端口号。
尝试:

http://any-k8s-node.example.com:31475

除非您有LoadBalancer类型的服务并且您的集群知道如何填充该字段,否则不会填写EXTERNAL-IP字段(公共云 Kubernetes 安装可能会;minikube 可能不会)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM