Can’t seem to get this working and need help on where I am going wrong.
Have an old PHP app subpathed at /admin
. ingress-nginx
forwards the traffic for it to an nginx
server running in the Pod. I’ve verified I can do the following and it serves the assets correctly:
kubectl port-forward <admin-pod> 4000:4000
skaffold dev --port-forward
docker run -p 4000:4000 <image>
However, when I try to connect to access it through browser via the minikube ip
, 192.168.64.5/admin
for example, I just get the following:
It displays the HTML, but none of the assets are loading because they aren’t being found and I’m not sure why.
This is the nginx
default.conf
that serves the PHP application. I’d like to fix it in here, if possible, as opposed to in the ingress.yaml
because they tends to mess with my other routes and took me a bit of time to get those working properly.
Here is what I have for those files:
# default.conf server { listen 4000; # rewrite ^([^.]*[^/])$ $1/ permanent; root /usr/share/nginx/html/src; include /etc/nginx/default.d/*.conf; index app.php index.php index.html index.htm; client_max_body_size 500m; location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ [^/].php(/|$) { fastcgi_split_path_info ^(.+?.php)(/.*)$; # Mitigate https://httpoxy.org/ vulnerabilities fastcgi_param HTTP_PROXY ""; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } }
# ingress.yaml apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: kubernetes.io/ingress.class: "nginx" nginx.ingress.kubernetes.io/proxy-body-size: "0" nginx.org/client-max-body-size: "500m" name: ingress-service-dev namespace: default spec: rules: - http: paths: - path: /adminv2/ backend: serviceName: admin-new-cluster-ip-service-dev servicePort: 4001 - path: /admin/ backend: serviceName: admin-old-cluster-ip-service-dev servicePort: 4000 - path: /api/ backend: serviceName: api-cluster-ip-service-dev servicePort: 5000 - path: / backend: serviceName: client-cluster-ip-service-dev servicePort: 3000
# Dockerfile FROM php:7.3-fpm # PHP_CPPFLAGS are used by the docker-php-ext-* scripts ENV PHP_CPPFLAGS="$PHP_CPPFLAGS -std=c++11" RUN apt-get update && apt-get install -y nginx && apt-get install -y libpq-dev zlib1g-dev libzip-dev && docker-php-ext-install pgsql zip mbstring opcache RUN { echo 'opcache.memory_consumption=128'; echo 'opcache.interned_strings_buffer=8'; echo 'opcache.max_accelerated_files=4000'; echo 'opcache.revalidate_freq=2'; echo 'opcache.fast_shutdown=1'; echo 'opcache.enable_cli=1'; } > /usr/local/etc/php/conf.d/php-opocache-cfg.ini COPY . /usr/share/nginx/html COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer COPY ./conf/default.conf /etc/nginx/conf.d/default.conf COPY ./conf/entrypoint.sh /etc/entrypoint.sh WORKDIR /usr/share/nginx/html/src RUN composer install # COPY --chown=www-data:www-data . /app/src RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" RUN mv "/usr/share/nginx/html/conf/file_size.ini" "$PHP_INI_DIR/conf.d/" # EXPOSE 4000 ENTRYPOINT ["sh", "/etc/entrypoint.sh"]
# project structure app-root/ admin-new/ admin-old/ conf/ company.conf src/ css/ js/ Templates/ index.tbs index.php Dockerfile.dev api/ client/ manifests/
# docker structure /app conf/ company.conf src/ css/ js/ Templates/ index.tbs index.php Dockerfile.dev
Thanks for the help.
Advertisement
Answer
Managed to get all routes working by moving this path to a separate ingress config. Probably not ideal, but I just need it working until it is replaced in hopefully 6 months.
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: kubernetes.io/ingress.class: "nginx" nginx.ingress.kubernetes.io/proxy-body-size: "0" nginx.org/client-max-body-size: "500m" nginx.ingress.kubernetes.io/rewrite-target: /$1 nginx.ingress.kubernetes.io/configuration-snippet: | rewrite ^(/admin)$ $1/ permanent; name: ingress-service-dev-admin namespace: default spec: rules: - http: paths: - path: /admin/?(.*) backend: serviceName: admin-old-cluster-ip-service-dev servicePort: 4000 --- apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: kubernetes.io/ingress.class: "nginx" nginx.ingress.kubernetes.io/configuration-snippet: | rewrite ^(/new-admin)$ $1/ permanent; name: ingress-service-dev namespace: default spec: rules: - http: paths: - path: /new-admin/ backend: serviceName: admin-new-cluster-ip-service-dev servicePort: 4001 - path: /api/ backend: serviceName: api-cluster-ip-service-dev servicePort: 5000 - path: / backend: serviceName: client-cluster-ip-service-dev servicePort: 3000