skip to Main Content

I’ve created an nginx ingress controller that is linked to two services. The website works fine but the js and css files are not loaded in the HTML page (404) error. I’ve created nginx pod using helm, and Included the nginx config in the ingress.yaml. The error is raised when I use nginx, I’ve I run the docker image locally, it works fine. Also, if I made the services’ types as a Load balancer, the applications work fine.

![here is the error in the webpage
]
1

enter image description here

here is the GKE services:

enter image description here

ingress.yaml:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  creationTimestamp: 2019-07-08T08:35:52Z
  generation: 1
  name: www
  namespace: default
  resourceVersion: "171166"
  selfLink: /apis/extensions/v1beta1/namespaces/default/ingresses/www
  uid: 659594d6-a15b-11e9-a671-42010a980160
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  rules:
  - host: twitter.domain.com
    http:
      paths:
      - backend:
          serviceName: twitter
          servicePort: 6020
  - host: events.omarjs.com
    http:
      paths:
      - backend:
          serviceName: events
          servicePort: 6010
  - http:
      paths:
      - backend:
          serviceName: twitter
          servicePort: 6020
        path: /twitter
      - backend:
          serviceName: events
          servicePort: 6010
        path: /events
  tls:
  - secretName: omarjs-ssl
status:
  loadBalancer: {}

twitter.yaml:

apiVersion: v1
kind: Service
metadata:
  creationTimestamp: 2019-07-07T20:43:49Z
  labels:
    run: twitter
  name: twitter
  namespace: default
  resourceVersion: "27299"
  selfLink: /api/v1/namespaces/default/services/twitter
  uid: ec8920ca-a0f7-11e9-ac47-42010a98008f
spec:
  clusterIP: 10.7.253.177
  externalTrafficPolicy: Cluster
  ports:
  - nodePort: 31066
    port: 6020
    protocol: TCP
    targetPort: 3020
  selector:
    run: twitter
  sessionAffinity: None
  type: NodePort
status:
  loadBalancer: {}
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: 2019-07-07T20:43:49Z
  labels:
    run: twitter
  name: twitter
  namespace: default
  resourceVersion: "27299"
  selfLink: /api/v1/namespaces/default/services/twitter
  uid: ec8920ca-a0f7-11e9-ac47-42010a98008f
spec:
  clusterIP: 10.7.253.177
  externalTrafficPolicy: Cluster
  ports:
  - nodePort: 31066
    port: 6020
    protocol: TCP
    targetPort: 3020
  selector:
    run: twitter
  sessionAffinity: None
  type: NodePort
status:
  loadBalancer: {}

2

Answers


  1. You can probably solve your problem by adding additional ingress rules which will route the requests for static files to proper directories. As far as I can see on the attached print screen, your static files are placed in css and js directories respectively, so you need to add 4 additional rules to your ingress.yaml. The final version of this fragment may look like that:

      - http:
          paths:
          - backend:
              serviceName: twitter
              servicePort: 6020
            path: /twitter
          - backend:
              serviceName: twitter
              servicePort: 6020
            path: /css
          - backend:
              serviceName: twitter
              servicePort: 6020
            path: /js
          - backend:
              serviceName: events
              servicePort: 6010
            path: /events
          - backend:
              serviceName: events
              servicePort: 6010
            path: /css
          - backend:
              serviceName: events
              servicePort: 6010
            path: /js
    
    Login or Signup to reply.
  2. The issue for me was the same, however I don’t even had my .js/.css/etc files in a separete folder, yet I couldn’t get it loaded.

    After hours of search, it turned out to be an incorrect Exact pathType in the .yaml file:
    I have changed it to Prefix, and it solved the issue.

    My sample Ingress yaml, with the correct pathType:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: my-webapp-ingress
      annotations:
        kubernetes.io/ingress.class: "nginx"
      namespace: default
    spec:
      rules:
        - host: my.webapp.com
          http:
            paths:
              - path: /
                pathType: Prefix  #<----- the correct pathType for me
                backend:
                  service:
                    name: my-webapp-service
                    port:
                      number: 80
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search