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.
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