web-dev-qa-db-fra.com

État de backend de l'équilibreur de charge GCP inconnu

Je suis sidéré.

J'ai un environnement de mise en scène et de production. Les deux environnements ont les mêmes déploiements, services, entrées, règles de pare-feu et les deux servent un 200 sur /.

Cependant, après avoir activé l'environnement de transfert et provisionné la même entrée, le service de transfert échoue avec Some backend services are in UNKNOWN state. La production est toujours en direct.

Les pods frontend et backend sont prêts sur GKE. J'ai testé manuellement les bilans de santé et ils réussissent lorsque je visite /.

Je ne vois rien dans les journaux ou les documents gcp pointant dans la bonne direction. Qu'est-ce que j'aurais pu casser?

ingress.yaml:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: fanout-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: "STATIC-IP"
spec:
  backend:
    serviceName: frontend
    servicePort: 8080
  tls:
  - hosts:
    - <DOMAIN>
    secretName: staging-tls
  rules:
  - Host: <DOMAIN>
    http:
      paths:
      - path: /*
        backend:
          serviceName: frontend
          servicePort: 8080
      - path: /backend/*
        backend:
          serviceName: backend
          servicePort: 8080

frontend.yaml:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: frontend
  name: frontend
  namespace: default
spec:
  ports:
  - nodePort: 30664
    port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: frontend
  type: NodePort
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  generation: 15
  labels:
    app: frontend
  name: frontend
  namespace: default
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  selector:
    matchLabels:
      app: frontend
  minReadySeconds: 5
  template:
    metadata:
      labels:
        app: frontend
    spec:
      containers:
      - image: <our-image>
        name: frontend
        ports:
        - containerPort: 8080
          protocol: TCP
        readinessProbe:
          httpGet:
            path: /
            port: 8080
          initialDelaySeconds: 60
          periodSeconds: 30
          timeoutSeconds: 3
        livenessProbe:
          httpGet:
            path: /
            port: 8080
          initialDelaySeconds: 60
          periodSeconds: 30
          timeoutSeconds: 3
9
Mike

Hier, même ce guide https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer

n'a pas fonctionné. Je ne sais pas ce qui s'est passé mais a même attendu 30 minutes + l'entrée signalait un état INCONNU pour les backends.

Après 24 heures, les choses semblent aller beaucoup mieux. L7 http ingress fonctionne mais avec un gros retard sur le signalement de backends sains.

4
Yannis

Je pense que c'est un bug. J'ai créé un nouveau cluster et je n'ai pas pu reproduire. Si quelqu'un frappe à nouveau, je suggérerais d'essayer un nouveau cluster.

1
Mike

Êtes-vous toujours confronté à ce problème?

J'ai essayé de reproduire en suivant la documentation publique de Google sur: Configuration de l'équilibrage de charge HTTP avec Ingress à déployer:

Une application Web utilisant l'exemple d'image de conteneur d'application Web qui écoute sur un serveur HTTP sur le port 8080:

Cependant, cela semble fonctionner maintenant. Donc, si vous rencontrez toujours ce problème, veuillez envisager de déposer un problème public contre kubernetes/ingress-gce à l'aide de outil de suivi des problèmes de Google . Incluez autant de détails que possible, y compris les étapes de reproduction pour que ce problème puisse obtenir une meilleure visibilité ainsi que plus d'échantillonnage.

Veuillez noter:

Issue Tracker Politique de contenu et de conduite de l'utilisateur détaille les types d'informations qui ne sont pas appropriées pour être soumises à Issue Tracker, notamment des informations personnelles sensibles et le spam. Veuillez ne pas soumettre de contenu inapproprié dans Issue Tracker.

Sortie Repo $ kubectl describe ing

sunny@test-dev:~$ kubectl describe ing basic-ingress
Name:             basic-ingress
Namespace:        default
Address:          xx.xxx.xxx.228
Default backend:  web:8080 (10.8.2.6:8080)
Rules:
Host  Path  Backends
----  ----  --------
*     *     web:8080 (10.8.2.6:8080)
Annotations:
target-proxy:     k8s-tp-default-basic-ingress--f5636f071d87exxx
url-map:          k8s-um-default-basic-ingress--f5636f071d87exxx
backends:         {"k8s-be-31544--f5636f071d87exxx":"HEALTHY"}
forwarding-rule:  k8s-fw-default-basic-ingress--f5636f071d87exxx
Events:
Type    Reason   Age                From                     Message
----    ------   ----               ----                     -------
Normal  Service  7m (x376 over 2d)  loadbalancer-controller  default backend set to web:31544
0
arp-sunny.