Cannot make GET request to service from angular pod on kubernetes cluster

4/9/2020

I have an Angular app running on Nginx deployed along with Spring Boot rest service. When I launch docker containers locally everything works fine so my only guess is that something wrong with Kubernetes configuration.

I receive this error in Chrome console with IP address provided Failed to load resource: net::ERR_CONNECTION_TIMED_OUT However, with DNS name I get: Failed to load resource: net::ERR_NAME_NOT_RESOLVED

Strangely, I am able to curl my service from radial/busyboxplus:curl pod but I cannot ping my service from my front pod (don't have a curl in build).

I am accessing front through ingress:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: main-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
    - http:
        paths:
          - path: /
            backend:
              serviceName: front
              servicePort: 80

My frontend:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: product-adviser-front-deployment
  labels:
    app: angular-front
    version: v1
spec:
  replicas: 1
  selector:
    matchLabels:
      name: product-adviser-front-deployment
  template:
    metadata:
      labels:
        name: product-adviser-front-deployment
    spec:
      containers:
        - name: product-adviser-front-app
          image: aurrix/seb:product-adviser-front
          imagePullPolicy: Always
          ports:
            - containerPort: 80
          env:
            - name: API_URL
              value: http://back.default.svc.cluster.local/
          readinessProbe:
            initialDelaySeconds: 30
            httpGet:
              path: /healthz
              port: 80
          livenessProbe:
            initialDelaySeconds: 30
            httpGet:
              path: /healthz
              port: 80
      restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
  name: front
spec:
  selector:
    name: product-adviser-front-deployment
  ports:
    - port: 80
  type: NodePort

My backend:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: product-adviser-back-deployment
  labels:
    app: backend-service
    version: v1
spec:
  replicas: 1
  selector:
    matchLabels:
      name: product-adviser-back-deployment
  template:
    metadata:
      labels:
        name: product-adviser-back-deployment
    spec:
      containers:
        - name: product-adviser-back-deployment
          image: aurrix/seb:product-adviser
          imagePullPolicy: Always
          ports:
            - containerPort: 8080
          readinessProbe:
            initialDelaySeconds: 30
            httpGet:
              path: /actuator/health
              port: 8080
          livenessProbe:
            initialDelaySeconds: 30
            httpGet:
              path: /actuator/health
              port: 8080
      restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
  name: back
spec:
  selector:
    name: product-adviser-back-deployment
  ports:
    - port: 80
      targetPort: 8080
-- Alisher
angular
docker
kubernetes
nginx
spring-boot

1 Answer

4/9/2020

You have set value: http://back.default.svc.cluster.local/ as env, are you calling this endpoint for backend service from your front-end app? If so, this will not work as frontend application runs on browser and it is the browser that will make the API call. In this case you will have to add another rule in the ingress and route the requests to backend pod.

I also noticed the frontend service is set to nodePort and from ingress you are calling the service directly. You may want to set the service to cluster-IP(default) like the backend service.

-- Naveen Kulkarni
Source: StackOverflow