The bottom line is that I need to replace the pod with php code in the kubernetes cluster with a docker container using telepresence, this pod contains 2 containers: php and nginx. I do everything according to the instructions (https://www.telepresence.io/tutorials/php) but it seems kubernetes does not see my container.
I run the cluster locally on minikube version 1.16.0, kubernetes version 1.20.0. I am using the NodePort service to access the application. After swap the pod, I get a 404 error.
This is how I find the external address: addr = kubectl get nodes -o jsonpath='{ $.items*.status.addresses?(@.type=="InternalIP").address }'
Target browser address: addr + :30000
Spoof command: telepresence --swap-deployment telepresence-php --docker-run --rm -v$(pwd)/web:/var/www/html telepresence-dev
apiVersion: apps/v1
kind: Deployment
metadata:
name: telepresence-php
spec:
replicas: 1
selector:
matchLabels:
svc: telepresence-php
template:
metadata:
labels:
svc: telepresence-php
spec:
containers:
- name: telepresence-php
image: mavellol/telepresence-php
ports:
- containerPort: 9000
volumeMounts:
- name: shared-files
mountPath: /var/www/html
lifecycle:
postStart:
exec:
command: ["/bin/sh", "-c", "cp -r /app/. /var/www/html"]
- name: telepresence-nginx
image: mavellol/telepresence-nginx
ports:
- containerPort: 80
volumeMounts:
- name: shared-files
mountPath: /var/www/html
volumes:
- name: shared-files
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: telepresence-np
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 30000
selector:
svc: telepresence-php
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: telepresence-db
spec:
replicas: 1
selector:
matchLabels:
svc: telepresence-db
template:
metadata:
labels:
svc: telepresence-db
spec:
containers:
- name: telepresence-db
image: mavellol/telepresence-db
ports:
- name: db-port
containerPort: 3306
volumes:
- name: telepresence-mysql-data
persistentVolumeClaim:
claimName: telepresence-mysql-pvc
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: telepresence-mysql
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
- ReadOnlyMany
persistentVolumeReclaimPolicy: Retain
hostPath:
path: /tmp/telepresence-mysql
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: telepresence-mysql-pvc
spec:
resources:
requests:
storage: 1Gi
accessModes:
- ReadWriteOnce
storageClassName: ""
---
apiVersion: v1
kind: Service
metadata:
name: telepresence-db
spec:
ports:
- name: db-port
port: 3306
targetPort: db-port
selector:
svc: telepresence-db
FROM nanoninja/php-fpm:latest
RUN apt-get update && apt-get install nginx -y
ADD ./etc/nginx/default.conf /etc/nginx/conf.d/default.conf
RUN rm /etc/nginx/sites-enabled/default
CMD nginx && php-fpm
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name localhost;
index index.php index.html;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/html/public;
set $virtualdir "";
set $realdir "";
if ($request_uri ~ ^/([^/]*)/.*$ ) {
set $virtualdir /$1;
}
if (-d "$document_root$virtualdir") {
set $realdir "${virtualdir}";
}
location / {
try_files $uri $uri/ $realdir/index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass localhost:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
Help if it's not difficult. The demo project is here https://github.com/Mavellol/kuber-nginx-php-mysql