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?
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
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"