Я настроил кластер Kubernetes на облаке Google с 2 узлами. все работает нормально, кроме Wordpress.
Краткая информация о программе установки и о том, что я пытаюсь сделать.
Я пытаюсь запустить контейнеры laravel, WordPress и mysql. пока laravel и mysql работает нормально и доступно. но возникли проблемы с Wordpress. каждый раз, когда я пытаюсь получить доступ к WordPress, он всегда перенаправляется на https://k8s.example.com/wp-admin/setup-config.php и css, также отсутствует, он показывает смешанный контент, когда я проверяю браузер> проверять> консоль, когда я пытаюсь просмотреть любой css URL вручную он перенаправляет в setup-config. php снова, как https://k8s.example.com/wp-includes/js/jquery/jquery.js?ver=1.12.4-wp, он снова будет принимать https://k8s.example.com/wp-admin/setup-config.php, короче говоря, все, что я его обозреваю, перенаправляет в setup-config . php, так как у меня есть файл info. php и попробуйте получить доступ с помощью https://k8s.example.com/info.php, который также используется для настройки конфигурации. php
Я использую следующие изображения :
wordpress: - wordpress: php7 .4-fpm-alpine
laravel: - пользовательский образ сборки с использованием Dockerfile
mysql: - mysql: 5.7
nginx: - nginx: alpine
Я использую NFS для обработки кода, и это работает нормально. Я вижу файлы на NFS-сервере должным образом.
здесь Nginx config ниже
# /etc/nginx/conf.d/default.conf
server {
listen 80;
root /var/www/html/app/public;
index index.php index.html index.htm index.nginx-debian.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass laravel-service-port:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_buffers 256 128k;
fastcgi_connect_timeout 300s;
fastcgi_send_timeout 300s;
fastcgi_read_timeout 300s;
include fastcgi_params;
}
}
server {
listen 81;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass wordpress-service:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_buffers 256 128k;
fastcgi_connect_timeout 300s;
fastcgi_send_timeout 300s;
fastcgi_read_timeout 300s;
include fastcgi_params;
}
}
Я подключился с php -fpm, используя их имена serivce в fastcgi_pass и открыл Порт laravel на 80 и порт WordPress на 81 и открыли оба порта в развертывании nginx с использованием containerPort.
, затем создали службу с типом ClusterIP. Ниже приведено содержимое файла.
apiVersion: v1
kind: Service
metadata:
name: application-webserver-service
spec:
type: ClusterIP
selector:
component: frontend
ports:
- name: laravel
targetPort: 80
port: 80
- name: wordpress
targetPort: 81
port: 81
Тогда вот входные файлы для обоих.
# laravel-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx-ingress-service
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /$2
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
spec:
tls:
- secretName: k8s-example-tls
hosts:
- k8s.example.com
rules:
- host: k8s.example.com
http:
paths:
- path: /laravel(/|$)(.*)
backend:
serviceName: application-webserver-service
servicePort: 80
Я прочитал документы для реализации аннотаций. так как это laravel нет, и проблема работает нормально. только что упомянул прояснение настройки
# wordpress-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: wordpress-ingress-service
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
spec:
tls:
- secretName: k8s-example-tls
hosts:
- k8s.example.com
rules:
- host: k8s.example.com
http:
paths:
- path: /
backend:
serviceName: application-webserver-service
servicePort: 81
Здесь я получаю проблему с Wordpress. Я попытался выполнить обе аннотации, связанные с SSL, но перенаправление происходило.
Я пытался использовать метод, который я использовал в laravel, например, создание пути с /wordpress(/|$)(.*) и rewrite-target / $ 2, но происходит то же самое.
до того, как оба конфигурационных YAML находятся в одном файле, я разделил их, чтобы сделать его более понятным и правильно реализовать правила перенаправления, чтобы laravel rules don ' У меня проблема с работающим WordPress.
Надеюсь, я все объяснил правильно, но если какая-то часть отсутствует, пожалуйста, дайте мне знать.
Спасибо
РЕДАКТИРОВАТЬ 1
# kubectl get all
NAME READY STATUS RESTARTS AGE
pod/application-nginx-loadbalancer-5d8c58775-fdx9t 1/1 Running 0 27m
pod/application-test-deployment-65bf678959-cm2dd 1/1 Running 0 27m
pod/mysql-deployment-instance-6dff9dcb6b-n9qwk 1/1 Running 0 27m
pod/nginx-ingress-controller-6456bbf68-db6pn 1/1 Running 0 3h17m
pod/nginx-ingress-default-backend-674d599c48-fc689 1/1 Running 0 3h17m
pod/wordpress-deployment-79849f7497-jzmhc 1/1 Running 0 27m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/application-service-port ClusterIP 10.0.15.193 <none> 9000/TCP 27m
service/application-webserver-service ClusterIP 10.0.5.90 <none> 80/TCP,81/TCP 27m
service/kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 6d1h
service/mysql-service-instace ClusterIP 10.0.15.54 <none> 3306/TCP 27m
service/nginx-ingress-controller LoadBalancer 10.0.8.169 192.168.1.1 80:30327/TCP,443:31217/TCP 6d1h
service/nginx-ingress-default-backend ClusterIP 10.0.10.103 <none> 80/TCP 6d1h
service/redis-service-instace ClusterIP 10.0.5.9 <none> 6379/TCP 27m
service/wordpress-service ClusterIP 10.0.7.197 <none> 9000/TCP 27m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/application-nginx-loadbalancer 1/1 1 1 27m
deployment.apps/application-test-deployment 1/1 1 1 27m
deployment.apps/mysql-deployment-instance 1/1 1 1 27m
deployment.apps/nginx-ingress-controller 1/1 1 1 6d1h
deployment.apps/nginx-ingress-default-backend 1/1 1 1 6d1h
deployment.apps/wordpress-deployment 1/1 1 1 27m
NAME DESIRED CURRENT READY AGE
replicaset.apps/application-nginx-loadbalancer-5d8c58775 1 1 1 27m
replicaset.apps/application-test-deployment-65bf678959 1 1 1 27m
replicaset.apps/mysql-deployment-instance-6dff9dcb6b 1 1 1 27m
replicaset.apps/nginx-ingress-controller-6456bbf68 1 1 1 6d1h
replicaset.apps/nginx-ingress-default-backend-674d599c48 1 1 1 6d1h
replicaset.apps/wordpress-deployment-79849f7497 1 1 1 27m
# nginx deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: application-nginx-loadbalancer
spec:
replicas: 1
selector:
matchLabels:
component: frontend
template:
metadata:
labels:
component: frontend
spec:
containers:
- name: nginx
image: rvraj/nginx
ports:
- containerPort: 80
- containerPort: 81
# nginx service
apiVersion: v1
kind: Service
metadata:
name: application-webserver-service
spec:
type: ClusterIP
selector:
component: frontend
ports:
- name: laravel
targetPort: 80
port: 80
- name: wordpress
targetPort: 81
port: 81
# wordpress deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress-deployment
spec:
replicas: 1
selector:
matchLabels:
component: wordpress
template:
metadata:
labels:
component: wordpress
spec:
containers:
- name: wordpress
image: wordpress:php7.4-fpm-alpine
ports:
- containerPort: 9000
volumeMounts:
- name: wordpress-storage
mountPath: /var/www/html
volumes:
- name: wordpress-storage
persistentVolumeClaim:
claimName: wordpress-pvc
# wordpress service
apiVersion: v1
kind: Service
metadata:
name: wordpress-service
spec:
type: ClusterIP
selector:
component: wordpress
ports:
- port: 9000
targetPort: 9000
#wordpress pvc
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wordpress-pvc
spec:
storageClassName: ""
accessModes:
- ReadWriteMany
resources:
requests:
storage: 500Mi
# wordpress pv
apiVersion: v1
kind: PersistentVolume
metadata:
name: wordpress-pv-config
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
nfs:
server: 10.148.0.2
path: "/k8s_nfs_disk/wordpress"