gpt4 book ai didi

php - Kubernetes:如何正确设置php-fpm和nginx共享卷权限

转载 作者:行者123 更新时间:2023-12-04 08:06:06 25 4
gpt4 key购买 nike

我是 kubernetes 的新手,
目前我正在尝试在 kuberetes 上部署 Laravel 应用程序。我已经设置了 1 个部署 yaml,其中包含 2 个容器(nginx 和 php-fpm)和一个共享卷。
这是完整的 yaml:


apiVersion: v1
kind: Service
metadata:
name: operation-service
labels:
app: operation-service
spec:
type: NodePort
selector:
app: operation
ports:
- port: 80
targetPort: 80
protocol: TCP
name: http
- port: 443
targetPort: 443
protocol: TCP
name: https
- port: 9000
targetPort: 9000
protocol: TCP
name: fastcgi

---
# Create a pod containing the PHP-FPM application (my-php-app)
# and nginx, each mounting the `shared-files` volume to their
# respective /var/www/ directories.

apiVersion: apps/v1
kind: Deployment
metadata:
name: operation
spec:
selector:
matchLabels:
app: operation
replicas: 1
template:
metadata:
labels:
app: operation
spec:
volumes:
# Create the shared files volume to be used in both pods
- name: shared-files
emptyDir: {}

# Secret containing
- name: secret-volume
secret:
secretName: nginxsecret

# Add the ConfigMap we declared for the conf.d in nginx
- name: configmap-volume
configMap:
name: nginxconfigmap

containers:
# Our PHP-FPM application
- image: asia.gcr.io/operations
name: app
volumeMounts:
- name: shared-files
mountPath: /var/www
ports:
- containerPort: 9000
lifecycle:
postStart:
exec:
command: ["/bin/sh", "-c", "cp -r /app/. /var/www"]

- image: nginx:latest
name: nginx
ports:
- containerPort: 443
- containerPort: 80
volumeMounts:
- name: shared-files
mountPath: /var/www
- mountPath: /etc/nginx/ssl
name: secret-volume
- mountPath: /etc/nginx/conf.d
name: configmap-volume

---

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress
annotations:
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
nginx.ingress.kubernetes.io/from-to-www-redirect: "true"
nginx.ingress.kubernetes.io/proxy-body-size: 100m
spec:
rules:
- host: testing.com
http:
paths:
- path: /
backend:
serviceName: operation-service
servicePort: 443
这是我的工作 nginxconf :
server {
listen 80;
listen [::]:80;

# For https
listen 443 ssl;
listen [::]:443 ssl ipv6only=on;
ssl_certificate /etc/nginx/ssl/tls.crt;
ssl_certificate_key /etc/nginx/ssl/tls.key;

server_name testing.com;
root /var/www/public;
index index.php index.html index.htm;

location / {
try_files $uri $uri/ /index.php$is_args$args;
}

location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#fixes timeouts
fastcgi_read_timeout 600;
include fastcgi_params;
}

location ~ /\.ht {
deny all;
}

location /.well-known/acme-challenge/ {
root /var/www/letsencrypt/;
log_not_found off;
}


error_log /var/log/nginx/laravel_error.log;
access_log /var/log/nginx/laravel_access.log;
}

部署后,我的应用程序将无法加载到网络上。原来 nginx 日志正在返回:
[error] 19#19: *64 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught ErrorException: file_put_contents(/app/storage/framework/views/ba2564046cc89e436fb993df6f661f314e4d2efb.php): failed to open stream: Permission denied in /var/www/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php:185
我知道如何在本地 docker 中正确设置卷,如何在 kubernetes 中正确设置共享卷权限?

最佳答案

您可以使用 init container如所述 here更改挂载目录的权限,或者您可以设置 fsGroup更改拥有卷的 groupID,如 here .
在您的情况下,我认为通过修改“复制”命令来设置权限会更容易:

command: ["/bin/sh", "-c", "cp -r /app/. /var/www"]
添加 chmod带有适当参数的命令,例如:
command: ["/bin/sh", "-c", "cp -r /app/. /var/www && chmod -R a+r /var/www"]

关于php - Kubernetes:如何正确设置php-fpm和nginx共享卷权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66218961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com