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
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.
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.
Ê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