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

库伯内特斯php-fpm丢失入口nginx配置

皇甫飞宇
2023-03-14

为了在minikube的k8s上运行php fpm应用程序,我缺少一些kubernetes ingress nginx配置。

k8s配置文件:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-service
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - http:
        paths:
          - path: /
            backend:
              serviceName: server-cluster-ip-service
              servicePort: 5000

---
apiVersion: v1
kind: Service
metadata:
  name: server-cluster-ip-service
spec:
  type: ClusterIP
  selector:
    component: server
  ports:
    - port: 5000
      targetPort: 5000
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: server-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      component: server
  template:
    metadata:
      labels:
        component: server
    spec:
      containers:
        - name: server
          image: xxx/phpfpm
          ports:
            - containerPort: 5000
          env:
            - name: APP_ENV
              value: dev
            - name: APP_DEBUG
              value: '1'
            - name: APP_SECRET
              value: 74bd83726749616f29166ef53c5f0557
            - name: MYSQL_HOST
              value: mysql-cluster-ip-service
            - name: MYSQL_ROOT_PASSWORD
              value: root
            - name: MYSQL_DATABASE
              value: db
            - name: MYSQL_DATABASE_TEST
              value: test
            - name: MYSQL_USER
              value: user
            - name: MYSQL_PASSWORD
              value: secret
---
apiVersion: v1
kind: Service
metadata:
  name: mysql-cluster-ip-service
spec:
  type: ClusterIP
  selector:
    component: mysql
  ports:
    - port: 3306
      targetPort: 3306
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      component: mysql
  template:
    metadata:
      labels:
        component: mysql
    spec:
      volumes:
        - name: mysql-storage
          persistentVolumeClaim:
            claimName: database-persistent-volume-claim
      containers:
        - name: mysql
          image: mysql:5.7.22
          ports:
            - containerPort: 3306
          volumeMounts:
            - name: mysql-storage
              mountPath: /var/lib/mysql
              subPath: mysql
          env:
            - name: MYSQL_HOST
              value: mysql-cluster-ip-service
            - name: MYSQL_ROOT_PASSWORD
              value: root
            - name: MYSQL_DATABASE
              value: db
            - name: MYSQL_USER
              value: user
            - name: MYSQL_PASSWORD
              value: secret
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: database-persistent-volume-claim
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi

先前docker开发环境的docker Nginx映像上使用的Nginx服务器工作配置文件(Nginx位于docker中,是与php容器分离的容器):

server {

    listen 443 default_server ssl;

    root   /opt/app/public;
    index  index.php;

    ...

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

    location /healthcheck {
        return 200 'ok';
        add_header Content-Type text/plain;
    }

    error_page 404 /index.php;

    location ~ ^/(index)\.php(/|$) {

        fastcgi_pass php:9000;
        fastcgi_index index.php;

        include fastcgi_params;
    }
}

在浏览器上访问minikube ip时,出现502错误。

我已经安装了运行以下命令的ingress nginx(如安装指南中所述)

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml
$ minikube addons enable ingress
$ make dev-env

我假设我需要以某种方式将根目录(nginx conf)映射到/opt/app/public,并以某种方式在入口nginx中配置fastcgi_过程,老实说,我对所有这些都是如何工作的还有些迷茫。

共有1个答案

皇甫繁
2023-03-14

这可能是以下问题之一。你的入口看起来不错。

>

  • 您的意思是在与php容器相同的pod中运行nginx容器吗?一旦nginx在同一个pod中运行,您将不得不将fastci_pass中的php替换为127.0.0.1。

    检查pod日志,如果连接被拒绝,这是php容器的问题,它没有正确地公开端口。尝试在您的php pod上执行port forwarding,看看是否可以通过localhost访问5000。

    我看到你有你的fastcgi_pass在php: 9000,这应该是5000吗?

  •  类似资料:
    • 我的公司有一个伪造的CA证书。实例com和一张伪造地图的唱片。实例com连接到我们的负载平衡器的IP 负载平衡器正在将流量转发到我们的Kubernetes群集。 在集群中,我部署了nginx ingress helm图表,在30200处公开了https节点端口 我根据上述证书创建了一个名为test secret的k8s TLS机密。 我部署了一个带有服务“test”的应用程序,并安装了以下入口:

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

    • 我有一个网站在kubernetes集群中运行。我可以在本地访问它,但希望通过internet访问它。(我有一个注册域),但外部IP一直挂起 我按照以下指示工作:https://dev.to/peterj/expose-a-kubernetes-service-on-your-own-custom-domain-52dd 这是服务和入口的代码 因此,我正在使用helm安装nginx控制器,但在那之后

    • 我在K8S集群中面临一个奇怪的问题 基本上我有两个应用程序: identity manager(基于WSO2,但该问题与WSO2无关) 将管理X509身份验证的外部SAML2 IDP 为了使用这个外部SAML2 IDP,我配置了WSO2 当我尝试通过X509登录时,WSO2显示登录页面,我单击智能卡,重定向到外部SAML IDP。 在这种情况下,nginx入口为我提供了502个坏网关。如果我复制U

    • 我是整个Kubernetes社区的新手,目前我正在尝试使用Ingress Nginx来暴露仪表板。我试过几种方法,但我找不到一个很好的解释如何暴露仪表板入口。我现在拥有的只是一个仪表板,可以通过“kubectl port forward”访问。我还安装了Ingress Nginx,控制器正在运行。我应该如何开始为kubernetes仪表板创建入口?

    • 我怎样才能使用入口呢?我尝试使用NodePort和--Target etPort=1001,我在servicePort中添加了80在。 kubectl公开部署测试--Target-port=1001--type=NodePort 我得到了错误 找不到后端-404 我使用的是正确的方法还是需要遵循其他方法?