使用Ingress设置的GKE始终提供状态为UNHEALTHY

时间:2018-01-25 11:47:43

标签: kubernetes google-cloud-platform google-kubernetes-engine docker-ingress

首先,我在https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer

测试了教程

工作正常。我也测试了相同的教程,但添加了一个秘密,以测试https也工作正常。

当我创建自己的图像时,我的问题就出现了。以下是我采取的步骤:

  1. Dockerfile:
  2.      # We label our stage as "builder"
         FROM node:9.4.0-alpine as builder
    
         COPY package.json package-lock.json ./
    
         ## Storing node modules on a separate layer will prevent unnecessary npm installs at each build
         RUN npm i && mkdir /srv/cs-ui && cp -R ./node_modules ./srv/cs-ui
    
         WORKDIR /srv/cs-ui
    
         COPY . .
    
         ## Build the angular app in production mode and store the artifacts in dist folder
         RUN $(npm bin)/ng build --environment "prod"
    
         FROM nginx
    
         ## Copy our default nginx config
         COPY nginx/default.conf /etc/nginx/conf.d/
    
         ## Remove default nginx website
         RUN rm -rf /usr/share/nginx/html/*
    
         ## From "builder" stage copy over the artifacts in dist folder to default nginx nginx public folder
         COPY --from=builder /srv/cs-ui/dist /usr/share/nginx/html/
    
    1. Dockerfile使用如下所示的docker-compose文件运行:
    2. version: '2'
      services:
        cs-ui:
          image: "gcr.io/cs-micro/cs-ui:v1"
          container_name: "cs-ui"
          tty: true
          build: .
          ports:
            - "80:80"
      
      1. 本地工作没有任何问题。我接下来要把它推到Container Registry。
      2. gcloud docker -- push gcr.io/cs-micro/cs-ui:v1
        1. 之后我创建了一个容器:
        2. kubectl run cs-ui --image=gcr.io/cs-micro/cs-ui:v1 --port=80
          1. 然后我揭露它:
          2. kubectl expose deployment cs-ui --target-port=80  --type=NodePort
            1. 然后我运行以下入口文件:
            2. apiVersion: extensions/v1beta1
              kind: Ingress
              metadata:
                name: basic-ingress
              spec:
                tls:
                  - secretName: tls-certificate
                backend:
                  serviceName: cs-ui
                  servicePort: 80
              

              使用命令:

              kubectl apply -f test.yaml
              1. kubectl描述服务
              2.     Name:                     cs-ui
                    Namespace:                default
                    Labels:                   run=cs-ui
                    Annotations:              
                    Selector:                 run=cs-ui
                    Type:                     NodePort
                    IP:                       10.35.244.124
                    Port:                       80/TCP
                    TargetPort:               80/TCP
                    NodePort:                   30272/TCP
                    Endpoints:                10.32.0.32:80
                    Session Affinity:         None
                    External Traffic Policy:  Cluster
                    Events:                   
                
                
                    Name:              kubernetes
                    Namespace:         default
                    Labels:            component=apiserver
                                       provider=kubernetes
                    Annotations:       
                    Selector:          
                    Type:              ClusterIP
                    IP:                10.35.240.1
                    Port:              https  443/TCP
                    TargetPort:        443/TCP
                    Endpoints:         35.195.192.28:443
                    Session Affinity:  ClientIP
                    Events:            
                
                1. kubectl描述部署
                2.     Name:                   cs-ui
                      Namespace:              default
                      CreationTimestamp:      Thu, 25 Jan 2018 12:27:59 +0100
                      Labels:                 run=cs-ui
                      Annotations:            deployment.kubernetes.io/revision=1
                      Selector:               run=cs-ui
                      Replicas:               1 desired | 1 updated | 1 total | 1 available | 0 unavailable
                      StrategyType:           RollingUpdate
                      MinReadySeconds:        0
                      RollingUpdateStrategy:  1 max unavailable, 1 max surge
                      Pod Template:
                        Labels:  run=cs-ui
                        Containers:
                         cs-ui:
                          Image:        gcr.io/cs-micro/cs-ui:v1
                          Port:         80/TCP
                          Environment:  
                          Mounts:       
                        Volumes:        
                      Conditions:
                        Type           Status  Reason
                        ----           ------  ------
                        Available      True    MinimumReplicasAvailable
                      OldReplicaSets:  
                      NewReplicaSet:   cs-ui-2929390783 (1/1 replicas created)
                      Events:
                        Type    Reason             Age   From                   Message
                        ----    ------             ----  ----                   -------
                        Normal  ScalingReplicaSet  9m    deployment-controller  Scaled up replica set cs-ui-2929390783 to 1
                  
                  1. kubectl describe ing
                  2.     Name:             basic-ingress
                        Namespace:        default
                        Address:          35.227.220.186
                        Default backend:  cs-ui:80 (10.32.0.32:80)
                        TLS:
                          tls-certificate terminates
                        Rules:
                          Host  Path  Backends
                          ----  ----  --------
                          *     *     cs-ui:80 (10.32.0.32:80)
                        Annotations:
                          https-forwarding-rule:  k8s-fws-default-basic-ingress--f5fde3efbfa51336
                          https-target-proxy:     k8s-tps-default-basic-ingress--f5fde3efbfa51336
                          ssl-cert:               k8s-ssl-default-basic-ingress--f5fde3efbfa51336
                          target-proxy:           k8s-tp-default-basic-ingress--f5fde3efbfa51336
                          url-map:                k8s-um-default-basic-ingress--f5fde3efbfa51336
                          backends:               {"k8s-be-30272--f5fde3efbfa51336":"UNHEALTHY"}
                          forwarding-rule:        k8s-fw-default-basic-ingress--f5fde3efbfa51336
                          static-ip:              k8s-fw-default-basic-ingress--f5fde3efbfa51336
                        Events:
                          Type    Reason   Age               From                     Message
                          ----    ------   ----              ----                     -------
                          Normal  ADD      12m               loadbalancer-controller  default/basic-ingress
                          Normal  CREATE   11m               loadbalancer-controller  ip: 35.227.220.186
                          Normal  Service  6m (x4 over 11m)  loadbalancer-controller  default backend set to cs-ui:30272
                    
                    1. 3-5分钟后,我得到了不健康,我不知道为什么因为设置几乎与他们的设置完全相同。
                    2. 当你获得Unhealthy的后端状态时,我已经读过无数关于该做什么的线索,但是没有一个有帮助。有人提到在本教程中添加了防火墙规则:我添加了https://cloud.google.com/compute/docs/load-balancing/health-checks,但没有帮助。

                      如果您有任何建议我会很乐意测试它们。

1 个答案:

答案 0 :(得分:0)

原来我们的Angular应用程序在'/'上有一个重定向,它给了它一个302响应。此响应使健康检查失败并导致不健康状态。

一旦我们设置了自定义运行状况检查,它就会起作用。