3 votes

GKE ingress incapable de se connecter au service en bonne santé

J'ai suivi le tutoriel ici : https://medium.com/@nithinmallya4/deploying-a-rails-application-to-google-container-engine-with-kubernetes-b08b2de353fc

Avec leur base de code : https://github.com/nmallya/gkedemoapp

Vous pouvez voir comment ce déploiement est réalisé ici, entre les commentaires "FIRST TIME DEPLOYMENT" : https://github.com/nmallya/gkedemoapp/blob/master/gcloud_deployment.sh

J'ai créé le certificat SSL, le service web est en ligne et fonctionnel, mais je ne peux pas créer l'ingress comme décrit. Le statut de l'ingress est "Tous les services back-end sont dans un état NON SAIN".

Le YML de l'ingress est le suivant :

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: gke-ingress 
  annotations:
    kubernetes.io/ingress.class: "gce"
    # kubernetes.io/ingress.allow-http: "false"
    # ingress.kubernetes.io/ssl-redirect: "true"
spec:
  tls:
  # Cela suppose que tls-secret existe.
  - secretName: gkecert
  backend:
    serviceName: web
    servicePort: 443

J'imagine que je devrai fournir plus d'informations mais je ne sais pas quoi/ où chercher pour dépanner ensuite.

0 votes

Le message d'erreur implique que vos backends (pods) ne passent pas leurs vérifications de santé. Vous devez curler le chemin HC pour voir si vous obtenez une réponse 200. Pouvez-vous nous fournir le YAML de votre service afin que nous puissions savoir sur quel port de destination le HC interroge ?

0 votes

Ma impression selon laquelle les pods étaient en bonne santé provenait de l'indication READY 2/2 dans kubectl get pods. En réalité, ils n'étaient pas en bonne santé et la vérification des journaux du service Web dans ces pods a révélé pourquoi. Je posterai bientôt une réponse sur la manière dont j'ai trouvé le problème.

4voto

Archonic Points 304

Il s'avère que mes services n'étaient pas en bon état. Être "READY" ne signifie pas qu'ils répondent avec un code 200 sur le chemin racine (/). J'ai utilisé kubectl get pods pour lister mes pods, puis j'ai inspecté les logs.

NOM                            READY     STATUS    RESTARTS   AGE
cable-76bfb45bb-rkz8f           2/2       Running   0          24m
rails-67d569746d-54hs8          2/2       Running   0          24m
elasticsearch-0                 1/1       Running   0          16m
redis-master-945b795f6-ldg5x    1/1       Running   0          14h
sidekiq-597c876bc4-zg24k        2/2       Running   0          24m

Je pouvais ensuite inspecter des logs spécifiques avec kubectl logs rails-67d569746d-54hs8 rails où le deuxième rails est le nom du conteneur dans le pod. Vous devriez voir les logs du contrôle de santé là, ce qui devrait indiquer ce qui ne va pas.

Si vous ne voyez que le démarrage du serveur et aucun log de contrôle de santé, il est probable que votre pod ne soit pas accessible. Vérifiez vos services et les ports sur eux. Tant qu'ils sont accessibles et répondent avec un code 200 sur le chemin racine (et ne redirigent pas), le contrôle de santé devrait passer et l'ingress devrait autoriser la connexion.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X