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!
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}