将docker compose转换为nginx&;的Kubernetes;php fpm容器
我有一个停靠的symfony项目,我正试图在Kubernetes集群的GPC中对其进行delpoy。 在开发中,我使用docker compose,我有两个用于php fpm和nginx的单独容器 当我运行docker compose up--build时,一切正常,但当我尝试创建kubernetes群集时,在运行kubectl apply-f nginx.deployment.yaml后,我遇到了以下错误: nginx:[emerg]在/etc/nginx/conf.d/default.conf:11的上游“php fpm”中找不到主机 这是nginx default.conf文件:将docker compose转换为nginx&;的Kubernetes;php fpm容器,php,docker,symfony,nginx,kubernetes,Php,Docker,Symfony,Nginx,Kubernetes,我有一个停靠的symfony项目,我正试图在Kubernetes集群的GPC中对其进行delpoy。 在开发中,我使用docker compose,我有两个用于php fpm和nginx的单独容器 当我运行docker compose up--build时,一切正常,但当我尝试创建kubernetes群集时,在运行kubectl apply-f nginx.deployment.yaml后,我遇到了以下错误: nginx:[emerg]在/etc/nginx/conf.d/default.con
server {
listen 80;
server_name localhost;
root /app/public;
location / {
try_files $uri /index.php$is_args$args;
}
location ~ ^/index\.php(/|$) {
fastcgi_pass php-fpm:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $document_root;
internal;
}
location ~ \.php$ {
return 404;
}
}
请注意
fastcgi_pass php fpm:9000
它引用了php fpm容器
nginx的Dockerfile:
ARG VERSION
# Dev image
FROM nginx:${VERSION}-alpine as dev
# Copy nginx config
COPY ./docker/nginx/default.conf /etc/nginx/conf.d/default.conf
# Prod image
FROM dev as prod
# Copy assets
COPY ./assets /app/public
这里是nginx.deployment.yaml文件:
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
kompose.cmd: kompose convert -f ../docker-compose.yml
kompose.version: 1.22.0 (955b78124)
creationTimestamp: null
labels:
io.kompose.service: nginx
name: nginx
spec:
replicas: 1
selector:
matchLabels:
io.kompose.service: nginx
strategy:
type: Recreate
template:
metadata:
annotations:
kompose.cmd: kompose convert -f ../docker-compose.yml
kompose.version: 1.22.0 (955b78124)
creationTimestamp: null
labels:
io.kompose.service: nginx
spec:
containers:
- image: myDockerHubRegistry/symfony-nginx:0.2
name: nginx
ports:
- containerPort: 80
resources: {}
volumeMounts:
- mountPath: /app/public
name: nginx-claim
restartPolicy: Always
volumes:
- name: nginx-claim
persistentVolumeClaim:
claimName: nginx-claim
status: {}
我还尝试将nginx和phpfpm放在同一个部署上,但仍然得到相同的错误
我遗漏了什么?这里有两个问题:
- 主机名
未通过k8s中的DNS解析为服务的IPphp fpm
- 如果无法解析代理过程中使用的主机名,nginx/openresty将拒绝启动 nginx:[emerg]在上游“主机名”中找不到主机
- 使用在kubernetes内部正确解析的主机名
GKE中核心DNS使用的DNS方案是
.svc.cluster.local
- 首先在变量中存储php fpm服务的正确主机名 然后将此变量用作(fastcgi-)代理传递的目标 这将使nginx启动,无论是否能够解析目标主机名
set $upstream php-fpm.your-namespace.svc.cluster.local:9000;
fastcgi_pass $upstream;
由于
nginx
拒绝启动任何proxy\u pass
服务,因此需要首先启动php fpm
服务。您尚未共享php fpm
的部署yaml。随着php-fpm
的kubernetes部署,您需要在与nginx
相同的名称空间中为php-fpm
创建一个名为php-fpm
的对象
您还可以使用Nicolai建议的变量hack,这样就可以启动nginx,而不依赖于
php fpm
。但无论哪种情况,您都需要为php fpm
创建kubernetes部署和服务对象,以便应用程序能够实际工作。您是否为这两种部署提供了匹配的服务?您需要一个名为phpfpm
的服务来解析该名称。