当前位置: 首页 > 知识库问答 >
问题:

转换docker-comment到库伯内特斯nginx

申高峰
2023-03-14

我有一个停靠的symfony项目,我正试图在Kubernetes集群的GPC中对其进行delpoy。在开发中,我使用docker compose,我有两个用于php fpm和nginx的单独容器。

当我运行docker compose up--build时,一切都正常,但是当我尝试创建kubernetes集群时,在运行kubectl apply-f nginx之后,我遇到了这个错误。部署。亚马尔:

在 /etc/nginx/conf.d/default.conf:11的上游php-fpm中找不到主机

这是nginx的默认设置。配置文件:

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_passphp-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放在同一个部署上,但仍然得到相同的错误。

我错过了什么?

共有2个答案

夏侯渊
2023-03-14

由于nginx拒绝启动任何proxy\u pass服务,因此需要首先启动php fpm服务。您尚未共享php fpm的部署yaml。随着php-fpm的kubernetes部署,您需要在与nginx相同的名称空间内为php-fpm创建一个名为php-fpm的kubernetes服务对象

您还可以使用Nicolai建议的变量hack,这样就可以启动nginx,而不依赖于php fpm。但无论哪种情况,您都需要为php fpm创建kubernetes部署和服务对象,以便应用程序能够实际工作。

公德明
2023-03-14

这里有2个问题:

>

  • 主机名php fpm未通过k8s中的DNS解析为服务的IP

    如果无法解析代理通行证中使用的主机名,nginx/openresty将拒绝启动

    nginx:[emerg]在上游“主机名”中找不到主机

    解决方案:

    >

  • 使用在kubernetes中正确解析的主机名。

    GKE中Core DNS使用的DNS方案为

    首先在变量中存储php fpm服务的正确主机名。

    然后使用这个变量作为(fastcgi-)代理传递的目标。

    这将使nginx启动,无论是否能够解析目标主机名。

    示例:

    set $upstream php-fpm.your-namespace.svc.cluster.local:9000;
    
    fastcgi_pass $upstream; 
    

  •  类似资料:
    • 我打算有一个带有Jenkins的光盘管道,它接受我的应用程序,将码头工人映像发布到我的私人码头工人存储库。我想我知道怎么做。 我不确定的是库伯内特斯部分。我想把那个图像部署到我的私人库伯内特斯集群(目前是1个主集群) 问:安装了 kubectl 和 docker 的詹金斯从站是否需要成为 Kubernetes 集群的一部分才能触发部署?如何触发该部署?

    • 我假设没有愚蠢的问题,所以这里有一个我找不到直接答案的问题。 现在的情况 我目前有一个运行1.15的Kubernetes集群。AKS上的x,通过Terraform部署和管理。AKS最近宣布Azure将在AKS上停用Kubernetes的1.15版本,我需要将集群升级到1.16或更高版本。现在,据我所知,直接在Azure中升级集群不会对集群的内容产生任何影响,即节点、豆荚、秘密和当前在那里的所有其他

    • 我在Kubernetes是个新手。我想知道在kubernetes环境中最好的生产部署场景是什么。 在过去的学派中,我习惯于将Web服务器(例如Nginx或Apache)放在DMZ层,而将其放在其他层(我们称之为层)。这样,只有web服务器在DMZ上,恶意攻击只能在web服务器VM上进行。 据我所知,K8S部署不再需要这种方法;这是因为K8S自己处理网络、吊舱和流量。所以我在考虑最确定的部署方案。

    • 据我所知,作业对象应该在一定时间后收获豆荚。但是在我的GKE集群(库伯内特斯1.1.8)上,“kubectl get pods-a”似乎可以列出几天前的豆荚。 所有这些都是使用乔布斯API创建的。 我确实注意到在使用 kubectl 删除作业后,pod 也被删除了。 我在这里主要担心的是,我将在批量作业中在集群上运行成千上万个pod,并且不想让内部待办系统过载。

    • 我试图设置Kubernetes入口,将外部http流量路由到前端pod(路径/)和后端pod(路径/rest/*),但我总是得到400错误,而不是主nginx索引。html。 所以我在第https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer页尝试了谷歌库伯内特斯的例子,但我总是得到400个错误。有什么想法吗?

    • 我是Kubernetes的新手,他们的概念我不太清楚:云提供商。 我已经使用RKE(Rancher引擎)安装了我的库伯内特斯集群。 我的集群设置在rancher2的顶部。 我的节点是托管OVH服务器的虚拟机。 我设法让运行中的应用程序具有L7入口和ClusterIP服务,但每次我尝试使用L4负载平衡器时,负载平衡器都处于挂起状态。根据https://github.com/rancher/ranch