web-dev-qa-db-ja.com

GCEIngressが準備プローブからヘルスチェックを取得しない

GCEイングレスを作成すると、Google LoadBalancerは準備プローブからヘルスチェックを設定しません。ドキュメント( Ingress GCEヘルスチェック )によると、それを取得する必要があります。

サービスをサポートするポッドの準備プローブとして任意の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
7

したがって、明らかに、PodSpecにコンテナポートを含める必要があります。どこにも文書化されていないようです。

例えば.

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

ブライアンに感謝します! https://github.com/kubernetes/ingress-gce/issues/241

9

GKEIngressヘルスチェックパスは現在構成できません。 http://console.cloud.google.com (UI)にアクセスし、ロードバランサーリストにアクセスして、使用されているヘルスチェックを確認できます。

現在、イングレスのヘルスチェックは、イングレスで指定された各GET /backend:です。したがって、GKE Ingressの背後にあるすべてのアプリは、GET /リクエストに対してHTTP200OKを返す必要があります。

とはいえ、ポッドで指定したヘルスチェックは、ポッドが実際に機能していて正常であることを確認するために、kubeletによって引き続き使用されています。

2
AhmetB - Google

Google Cloud Load BalancerがKubernetesポッド準備プローブからGCEヘルスチェック構成を取得しないもう1つの理由は、サービスが「セレクターレス」として構成されていることである可能性があります(selector属性が空で、エンドポイントを直接管理します)。

これは、例えばの場合です。 kube-legohttps://github.com/jetstack/kube-lego/issues/68#issuecomment-303748457 および https://github.com/jetstack/kube-lego/issues/68#issuecomment-327457982

元の質問にはサービスでセレクターが指定されているため、このヒントは適用されません。このヒントは、同じ問題を別の原因で抱えている訪問者に役立ちます。

0
Matěj Laitl