Kubernetes GKE入口后端标记为;“不健康”;

Kubernetes GKE入口后端标记为;“不健康”;,kubernetes,google-kubernetes-engine,kubernetes-ingress,Kubernetes,Google Kubernetes Engine,Kubernetes Ingress,我正在学习如何使用入口在Google Kubernetes引擎上公开我的应用程序。我学习了几本教程,大致了解了需要什么。然而,我不知道为什么我的服务被标记为不健康,尽管它们可以从我直接定义的NodePort服务访问 这是我的部署文件:(我删除了一些数据,但大部分数据保持不变) 在阅读时,我需要一个ReadinessProbe和livinesprobe,以便GKE在我定义的路径上运行运行状况检查,并且通过使用我自己定义的路径(此处显示为/app1)(将返回200 OK),生成的运行状况检查应该通过

我正在学习如何使用入口在Google Kubernetes引擎上公开我的应用程序。我学习了几本教程,大致了解了需要什么。然而,我不知道为什么我的服务被标记为不健康,尽管它们可以从我直接定义的NodePort服务访问

这是我的部署文件:(我删除了一些数据,但大部分数据保持不变)

在阅读时,我需要一个ReadinessProbe和livinesprobe,以便GKE在我定义的路径上运行运行状况检查,并且通过使用我自己定义的路径(此处显示为/app1)(将返回200 OK),生成的运行状况检查应该通过。我将初始延迟设置为70秒,作为映像中运行的tomcat服务器启动的缓冲时间

接下来,我创建了一个节点端口服务作为入口的后端: 我通过连接到该服务的节点的公共IP和节点端口进行了测试,它成功运行

---
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  ports:
  - name: my-port
    port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: deployment-1
  type: NodePort
然后是入口清单文件:

在这里,我保留了一个名为“gke my static IP”的静态IP地址,并创建了一个域名为“mydomain.web.com”的managedCertificate“gke my certificate”。在DNS记录上也配置了这一点,以将其指向保留的静态IP

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: gke-my-ingress-1
  annotations:
    kubernetes.io/ingress.global-static-ip-name: gke-my-static-ip
    networking.gke.io/managed-certificates: gke-my-certificate
spec:
  rules:
  - host: mydomain.web.com
    http:
      paths:
      - backend:
          serviceName: my-service
          servicePort: my-port
默认情况下,入口创建两个后端,一个在/healthz路径上,另一个在自定义路径/app1上。healthz路径返回200 OK,但我的自定义路径无法连接。我已经检查了防火墙规则,并允许使用端口tcp30000-32767

检查stackdriver时,运行状况检查尝试使用/app1路径访问我的LoadBalancer的IP,但它似乎总是返回502错误

我的设置中是否缺少任何步骤

连接的入口、端点:

NAME                                        HOSTS                    ADDRESS          PORTS   AGE
ingress.extensions/gke-my-ingress-1   mydomain.web.com   <IP_ADDRESS>   80      3d15h

NAME                         ENDPOINTS           AGE
endpoints/kubernetes          <IP_ADDRESS>443   9d
endpoints/presales-service    <IP_ADDRESS>:8080     4d16h
NAME主机地址端口年龄
ingres.extensions/gke-my-ingres-1 mydomain.web.com 80 3d15h
姓名端点年龄
端点/kubernetes 443 9d
端点/售前服务:80804D16H
kubectl进入:

Name:             gke-my-ingress-1
Namespace:        default
Address:          <IP_ADDRESS>
Default backend:  default-http-backend:80 (<IP_ADDRESS>)
Rules:
  Host                    Path  Backends
  ----                    ----  --------
  mydomain.web.com
                          /   my-service:my-port (<IP_ADDRESS>:8080)
Annotations:
  ingress.kubernetes.io/target-proxy:                k8s-tp-default-gke-my-ingress-1--d8d0fcf4484c1dfd
  ingress.kubernetes.io/url-map:                     k8s-um-default-gke-my-ingress-1--d8d0fcf4484c1dfd
  kubernetes.io/ingress.global-static-ip-name:       gke-my-static-ip
  networking.gke.io/managed-certificates:            gke-my-certificate
  ingress.gcp.kubernetes.io/pre-shared-cert:         mcrt-e7dd5612-e6b4-42ca-91c9-7d9a86abcfb2
  ingress.kubernetes.io/forwarding-rule:             k8s-fw-default-gke-my-ingress-1--d8d0fcf4484c1dfd
  ingress.kubernetes.io/ssl-cert:                    mcrt-e7dd5612-e6b4-42ca-91c9-7d9a86abcfb2
  kubectl.kubernetes.io/last-applied-configuration:  {"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{"kubernetes.io/ingress.global-static-ip-name":"gke-my-static-ip","networking.gke.io/managed-certificates":"gke-my-certificate"},"name":"gke-my-ingress-1","namespace":"default"},"spec":{"rules":[{"host":"mydomain.web.com","http":{"paths":[{"backend":{"serviceName":"my-service","servicePort":"my-port"},"path":"/"}]}}]}}

  ingress.kubernetes.io/backends:               {"k8s-be-30242--d8d0fcf4484c1dfd":"HEALTHY","k8s-be-30310--d8d0fcf4484c1dfd":"UNHEALTHY"}
  ingress.kubernetes.io/https-forwarding-rule:  k8s-fws-default-gke-my-ingress-1--d8d0fcf4484c1dfd
  ingress.kubernetes.io/https-target-proxy:     k8s-tps-default-gke-my-ingress-1--d8d0fcf4484c1dfd
名称:gke-my-ingres-1
名称空间:默认值
地址:
默认后端:默认http后端:80()
规则:
主机路径后端
----                    ----  --------
mydomain.web.com
/我的服务:我的端口(:8080)
注释:
ingress.kubernetes.io/target-proxy:k8s-tp-default-gke-my-ingress-1--d8d0fcf4484c1dfd
ingress.kubernetes.io/url-map:k8s-um-default-gke-my-ingres-1--d8d0fcf4484c1dfd
kubernetes.io/ingres.global-static-ip-name:gke my static ip
networking.gke.io/managed-certificates:gke我的证书
ingress.gcp.kubernetes.io/pre-shared-cert:mcrt-e7dd5612-e6b4-42ca-91c9-7d9a86abcfb2
ingress.kubernetes.io/forwarding-rule:k8s-fw-default-gke-my-ingres-1--d8d0fcf4484c1dfd
ingress.kubernetes.io/ssl-cert:mcrt-e7dd5612-e6b4-42ca-91c9-7d9a86abcfb2
kubectl.kubernetes.io/last-applicated-configuration:{“apiVersion”:“extensions/v1beta1”,“kind”:“ingres”,“metadata”:{“annotations”:{“kubernetes.io/ingres.global static ip name”:“gke my static ip”,“networking.gke.io/managed certificates”:“gke my certificate”},“name”:“gke-my-ingres-1”,“namespace”:“default”},“spec”:{“rules”:[“rules”:[“host”:“mydomain.web.com”,http:{“路径”:[{“后端”:{“服务名”:“我的服务”,“服务端口”:“我的端口”},“路径”:“/“}]}]}}
ingress.kubernetes.io/backends:{“k8s-be-30242--d8d0fcf4484c1dfd:“健康”,“k8s-be-30310--d8d0fcf4484c1dfd:“不健康”}
ingress.kubernetes.io/https-forwarding-rule:k8s-fws-default-gke-my-ingres-1--d8d0fcf4484c1dfd
ingress.kubernetes.io/https-target-proxy:k8s-tps-default-gke-my-ingres-1--d8d0fcf4484c1dfd

通过添加一个successThreshold和FailureThreshold来修补Readiness和Livelity探针,我成功地让我的入口工作起来。这可能是因为我的应用程序需要多一点缓冲时间来运行

        readinessProbe:
          httpGet:
            path: /app1/
            port: 8080
          periodSeconds: 5
          timeoutSeconds: 60 
          successThreshold: 1
          failureThreshold: 3
          initialDelaySeconds: 70      
        livenessProbe:
          httpGet:
            path: /app1/
            port: 8080
          periodSeconds: 5
          timeoutSeconds: 60
          successThreshold: 1
          failureThreshold: 3          
          initialDelaySeconds: 70  

您好,您使用的是什么GKE版本?我使用的是最新版本,应该是1.14.10-GKE.17。检查您的tomcat配置中的
/app1
位置是否未配置为仅在本地访问(从
localhost
)。验证是否可以从集群外部访问
/app1
位置。例如通过NodePort服务?我试过了,我可以使用节点的ip和NodePort端口访问它。[NODE_EXTERNAL_IP]:[NODEPORT]您能否连接
kubectl get ingress、endpoints
kubectl Descripte ingress gke-my-ingress-1
的输出?
        readinessProbe:
          httpGet:
            path: /app1/
            port: 8080
          periodSeconds: 5
          timeoutSeconds: 60 
          successThreshold: 1
          failureThreshold: 3
          initialDelaySeconds: 70      
        livenessProbe:
          httpGet:
            path: /app1/
            port: 8080
          periodSeconds: 5
          timeoutSeconds: 60
          successThreshold: 1
          failureThreshold: 3          
          initialDelaySeconds: 70