web-dev-qa-db-fra.com

Kubernetes Nginx Ingress ne trouve pas de point de terminaison de service

J'ai du mal à faire fonctionner le contrôleur d'entrée Nginx dans mon cluster Kubernetes. J'ai créé les déploiements, services, rôles, etc. nginx-ingress selon https://kubernetes.github.io/ingress-nginx/deploy/

J'ai également déployé un simple hello-world application qui écoute sur le port 8080

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: hello-world
  namespace: default
spec:
  selector:
    matchLabels:
      name: hello-world
  template:
    metadata:
      labels:
        name: hello-world
    spec:
      containers:
      - name: hello-world
        image: myrepo/hello-world
        resources:
          requests:
            memory: 200Mi
            cpu: 150m
          limits:
            cpu: 300m
        ports:
          - name: http
            containerPort: 8080
            protocol: TCP

Et créé un service pour cela

kind: Service
apiVersion: v1
metadata:
  namespace: default
  name: hello-world
spec:
  selector:
    app: hello-world
  ports:
    - name: server
      port: 8080

Enfin, j'ai créé un secret TLS (my-tls-secret) et déployé l'entrée nginx conformément aux instructions. Par exemple:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
  name: hello-world
  namespace: default
spec:
  rules:
    - Host: hello-world.mydomain.com
      http:
        paths:
        - path: /
          backend:
            serviceName: hello-world
            servicePort: server
  tls:
      - hosts:
          - hello-world.mydomain.com
        secretName: my-tls-cert

Cependant, je ne parviens jamais à accéder à mon application, et dans les journaux que je vois

W0103 19:11:15.712062       6 controller.go:826] Service "default/hello-world" does not have any active Endpoint.
I0103 19:11:15.712254       6 controller.go:172] Configuration changes detected, backend reload required.
I0103 19:11:15.864774       6 controller.go:190] Backend successfully reloaded.

Je ne sais pas pourquoi il est écrit Service "default/hello-world" does not have any active Endpoint. J'ai utilisé une définition de service similaire pour le contrôleur d'entrée traefik sans aucun problème.

J'espère que je manque quelque chose d'évident avec l'entrée de nginx. Toute aide que vous pourriez fournir serait appréciée!

5
cookandy

Une autre situation où cela peut se produire est lorsque la classe d'entrée du contrôleur d'entrée ne correspond pas à la classe d'entrée dans le manifeste de ressource d'entrée utilisé pour vos services.

Commande d'installation de Nginx, bref exemple:

  helm install stable/nginx-ingress \
  --name ${INGRESS_RELEASE_NAME} \
  --namespace ${K8S_NAMESPACE} \
  --set controller.scope.enabled=true \
  --set controller.scope.namespace=${K8S_NAMESPACE} \
  --set controller.ingressClass=${NGINX_INGRESS_CLASS}

spécification de ressource d'entrée , extrait:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  labels:
  annotations:
    # folowing line is not valid for K8s or Helm, 
    # but reflects the values must be the same
    kubernetes.io/ingress.class: ${NGINX_INGRESS_CLASS}
0
Rostislav Matl