GCE Ingress没有从准备情况调查中获取健康检查

时间:2018-04-25 09:05:22

标签: kubernetes google-compute-engine google-kubernetes-engine kubernetes-health-check

当我创建GCE入口时,Google Load Balancer不会从就绪探针设置运行状况检查。根据文档(Ingress GCE health checks),它应该提取它。

  

在支持服务的pod上公开任意URL作为就绪探测。

任何想法为什么?

部署:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: frontend-prod
  labels:
    app: frontend-prod
spec:
  selector:
    matchLabels:
      app: frontend-prod
  replicas: 3
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: frontend-prod
    spec:
      imagePullSecrets:
        - name: regcred
      containers:
      - image: app:latest
        readinessProbe:
          httpGet:
            path: /healthcheck
            port: 3000
          initialDelaySeconds: 15
          periodSeconds: 5
        name: frontend-prod-app
      - env:
        - name: PASSWORD_PROTECT
          value: "1"
        image: nginx:latest
        readinessProbe:
          httpGet:
            path: /health
            port: 80
          initialDelaySeconds: 5
          periodSeconds: 5
        name: frontend-prod-nginx

服务:

apiVersion: v1
kind: Service
metadata:
  name: frontend-prod
  labels:
    app: frontend-prod
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
    name: http
  selector:
    app: frontend-prod

入口:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: frontend-prod-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: frontend-prod-ip
spec:
  tls:
    - secretName: testsecret
  backend:
    serviceName: frontend-prod
    servicePort: 80

5 个答案:

答案 0 :(得分:6)

显然,您需要在PodSpec上包含容器端口。 似乎没有在任何地方记录。

e.g。

    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

谢谢Brian! https://github.com/kubernetes/ingress-gce/issues/241

答案 1 :(得分:3)

现在可以在最新的GKE中实现(我在1.14.10-gke.27上,不确定是否很重要)

  1. 在部署中的容器上定义一个readinessProbe
  2. 重新创建您的Ingress。
  3. 运行状况检查将指向Deployment yaml配置的readinessProbe.httpGet.path中的路径。

答案 2 :(得分:2)

Google最近添加了对CRD的支持,该支持可以配置您的后端服务以及运行状况检查:

apiVersion: cloud.google.com/v1beta1
kind: BackendConfig
metadata:
  name: backend-config
  namespace: prod
spec:
  healthCheck:
    checkIntervalSec: 30
    port: 8080
    type: HTTP #case-sensitive
    requestPath: /healthcheck

请参见here

答案 3 :(得分:0)

GKE Ingress运行状况检查路径目前无法配置。您可以转到http://console.cloud.google.com(UI)并访问Load Balancers列表以查看它使用的运行状况检查。

目前,Ingress上指定的每个GET /上的Ingress运行状况检查为backend:。因此,GKE Ingress背后的所有应用都必须将HTTP 200 OK返回GET /个请求。

也就是说,您在Pod上指定的健康检查仍在使用 - 通过kubelet确保您的Pod实际上正常运行并且健康。

答案 4 :(得分:0)

Google Cloud Load Balancer无法从Kubernetes Pod准备就绪探测器获取GCE运行状况检查配置的另一个原因可能是该服务被配置为“无选择器”(selector属性为空,您可以直接管理端点)。

例如, kube-lego:请参见https://github.com/jetstack/kube-lego/issues/68#issuecomment-303748457https://github.com/jetstack/kube-lego/issues/68#issuecomment-327457982

原始问题 在服务中指定了选择器,因此该提示不适用。此提示可以为那些因不同原因而遇到相同问题的访客提供服务。