web-dev-qa-db-fra.com

Pourquoi Google Cloud affiche-t-il une erreur lors de l'utilisation de ClusterIP

Dans ma console gcloud, il affiche l'erreur suivante pour mes entrées définies:

Erreur lors de la synchronisation: erreur lors de l'évaluation de la spécification d'entrée: le service "monitoring/kube-prometheus" est de type "ClusterIP", attendu "NodePort" ou "LoadBalancer"

J'utilise traefik comme proxy inverse (au lieu de nginx) et donc je définis une entrée en utilisant un ClusterIP. Pour autant que je comprends le processus, tout le trafic est acheminé par le biais du service traefik (qui a une entrée Loadbalancer définie) et donc toutes mes autres entrées DEVRAIENT avoir réellement un ClusterIP au lieu de NodePort ou Loadbalancer?

Question:

Alors, pourquoi Google Cloud m'avertit-il qu'il attendait un NodePort ou un LoadBalancer?

enter image description here

13
kentor

Je ne sais pas pourquoi cette erreur se produit, car il me semble que c'est une configuration valide. Mais pour effacer l'erreur, vous pouvez basculer votre service vers un NodePort nommé. Ensuite, changez votre entrée pour utiliser le nom du port au lieu du numéro. Par exemple:

Un service:

apiVersion: v1
kind: Service
metadata:
  name: testapp
spec:
  ports:
  - name: testapp-http # ADD THIS
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: testapp
  type: NodePort

Entrée:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: testapp
spec:
  rules:
  - Host: hostname.goes.here
    http:
      paths:
      - backend:
          serviceName: testapp
          # USE THE PORT NAME FROM THE SERVICE INSTEAD OF THE PORT NUMBER
          servicePort: testapp-http
        path: /

Mise à jour:

C'est l'explication que j'ai reçue de Google.

Comme les services par défaut sont ClusterIP [1] et ce type de service est censé être accessible depuis l'intérieur du cluster. Il est accessible de l'extérieur lorsque kube-proxy est utilisé, et non destiné à être directement accessible avec une entrée.

À titre de suggestion, je trouve personnellement cet article [2] bon pour comprendre la différence entre ces types de services.

[1] https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types

[2] https://medium.com/google-cloud/kubernetes-nodeport-vs-loadbalancer-vs-ingress-when-should-i-use-what-922f010849e

6
aayore

Merci @aayore. Dans mon cas, j'ai dû spécifier explicitement une classe d'entrée, afin que Google Cloud n'interfère pas. L'entrée de Nginx semble être satisfaite des services ClusterIp.

metadata:
  name: foo
  annotations:
    kubernetes.io/ingress.class: "nginx"
3
petrus-jvrensburg