Sé que hay toneladas de problemas similares, pero después de haberlos leído todos, no puedo resolverlo... :/
En primer lugar, no estoy usando minikube, estoy usando el escritorio docker de kubernetes.
Tengo un servidor express.js simple como:
app.get('/test', async (_, res) => { console.log("Sth happened") res.json({ status: 200 }); });Estoy tratando de implementarlo y usar el ingreso para exponerlo a mi localhost.
Lo que he hecho: En etc/hosts he añadido:
127.0.0.1 123test.mydomain.comLa entrada se parece a:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: mytestservice namespace: mytestservice annotations: kubernetes.io/ingress.class: "nginx" spec: rules: - host: 123test.mydomain.com http: paths: - pathType: ImplementationSpecific path: / backend: service: name: mytestservice port: number: 80Servicio:
apiVersion: v1 kind: Service metadata: name: mytestservice spec: ports: - name: http port: 80 targetPort: 3000 selector: name: mytestserviceDespliegue:
apiVersion: apps/v1 kind: Deployment metadata: name: mytestservice spec: replicas: 1 selector: matchLabels: name: mytestservice template: metadata: labels: name: mytestservice spec: containers: - name: mytestservice image: myimagename imagePullPolicy: IfNotPresent ports: - containerPort: 3000 env: ...my envs, doesnt matterCuando lo implemento, el pod está en funcionamiento porque puedo ver los registros de inicio La descripción de ingreso
kubectl get ingress mytestservice NAME CLASS HOSTS ADDRESS PORTS AGE mytestservice <none> 123test.mydomain.com 80, 443 53s kubectl describe ingress mytestservice Name: mytestservice Namespace: mytestservice Address: Default backend: default-http-backend:80 (<error: endpoints "default-http-backend" not found>) Rules: Host Path Backends ---- ---- -------- 123test.mydomain.com / mytestservice:80 (10.1.0.16:3000) Annotations: kubernetes.io/ingress.class: nginx meta.helm.sh/release-name: mytestservice meta.helm.sh/release-namespace: mytestservice Events: <none>Cuando lo CURL recibo:
curl 123test.mydomain.com/test curl: (7) Failed to connect to 123test.mydomain.com port 80: Connection refusedEl problema es el DNS. Con su /etc/hosts local, está apuntando a localhost en lugar de a la IP de su host de Kubernetes.
¿Creaste todos los recursos en el mismo espacio de nombres? Veo que su entrada se define como:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: mytestservice namespace: mytestservice por lo que se creará en el espacio de nombres mytestservice . Mientras que su implementación y servicio no tienen el espacio de namespace: mytestservice en los metadatos. Por lo tanto, se crearán en el espacio de nombres default .
compruebe si todos sus recursos están en el mismo espacio de nombres:
kubectl get deployments --namespace mytestservice kubectl get service --namespace mytestservice kubectl get ingress --namespace mytestserviceuna pista del error está en la descripción del ingreso:
Default backend: default-http-backend:80 (<error: endpoints "default-http-backend" not found>)