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
here is the GKE services:
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: {}
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