skip to Main Content

I know that they are tons of similar problem but after I have read all of them I am not able to figure it out… :/

First of all I am not using minikube, I am using kubernetes docker desktop.

I have simple express.js server like:

app.get('/test', async (_, res) => {
  console.log("Sth happened")
  res.json({ status: 200 });
});

I am trying to deploy it and use ingress to expose it to my localhost.

What I have done:
In etc/hosts I have added:

127.0.0.1 123test.mydomain.com

The ingress looks like:

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: 80

Service:

apiVersion: v1
kind: Service
metadata:
  name: mytestservice
spec:
  ports:
  - name: http
    port: 80
    targetPort: 3000
  selector:
    name: mytestservice

Deployment:

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 matter

When I deploy it the pod is up and running because I am able to see startup logs
The ingress description

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>

When i CURL it I receive:

curl 123test.mydomain.com/test
curl: (7) Failed to connect to 123test.mydomain.com port 80: Connection refused 

2

Answers


  1. did you create all the resources in the same namespace? I see your ingress is defined as:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: mytestservice
      namespace: mytestservice
    

    so it will be created in the mytestservice namespace. Whereas your deployment and service doesn’t have the namespace: mytestservice in metadata. So they will be created in the default namespace.

    check if all your resources are in the same namespace:

    kubectl get deployments --namespace mytestservice
    kubectl get service --namespace mytestservice
    kubectl get ingress --namespace mytestservice
    

    a hint to the error is in the describe of the ingress:

    Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
    
    Login or Signup to reply.
  2. The problem is DNS. With your local /etc/hosts you are pointing to localhost instead to the IP of your Kubernetes host.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search