Kubernetes GKE入口后端标记为;“不健康”;
我正在学习如何使用入口在Google Kubernetes引擎上公开我的应用程序。我学习了几本教程,大致了解了需要什么。然而,我不知道为什么我的服务被标记为不健康,尽管它们可以从我直接定义的NodePort服务访问 这是我的部署文件:(我删除了一些数据,但大部分数据保持不变) 在阅读时,我需要一个ReadinessProbe和livinesprobe,以便GKE在我定义的路径上运行运行状况检查,并且通过使用我自己定义的路径(此处显示为/app1)(将返回200 OK),生成的运行状况检查应该通过。我将初始延迟设置为70秒,作为映像中运行的tomcat服务器启动的缓冲时间 接下来,我创建了一个节点端口服务作为入口的后端: 我通过连接到该服务的节点的公共IP和节点端口进行了测试,它成功运行Kubernetes GKE入口后端标记为;“不健康”;,kubernetes,google-kubernetes-engine,kubernetes-ingress,Kubernetes,Google Kubernetes Engine,Kubernetes Ingress,我正在学习如何使用入口在Google Kubernetes引擎上公开我的应用程序。我学习了几本教程,大致了解了需要什么。然而,我不知道为什么我的服务被标记为不健康,尽管它们可以从我直接定义的NodePort服务访问 这是我的部署文件:(我删除了一些数据,但大部分数据保持不变) 在阅读时,我需要一个ReadinessProbe和livinesprobe,以便GKE在我定义的路径上运行运行状况检查,并且通过使用我自己定义的路径(此处显示为/app1)(将返回200 OK),生成的运行状况检查应该通过
---
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