You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

裸机K8s集群中Nextcloud无法通过Ingress访问问题求助

排查Nextcloud无法通过Ingress访问的问题

从你提供的集群状态和配置文件来看,核心问题出在Nextcloud容器的端口映射配置不匹配,这也是Ghost能正常访问但Nextcloud不行的关键原因,下面一步步拆解问题并给出修复方案:

1. 定位核心错误:端口配置不匹配

Nextcloud官方镜像(包括你使用的arm32v7/nextcloud)默认监听的是80端口,但你的Deployment和Service配置里都错误地指向了8080:

  • Deployment的容器配置中,你指定了containerPort: 8080,但容器实际并没有在这个端口提供服务
  • Service的targetPort: 8080也因此无法将流量转发到容器的正确端口

对比Ghost的配置(容器端口2368与Service、Ingress配置完全一致),就能明显看出差异所在。

2. 修复步骤

步骤1:修正Nextcloud Deployment的容器端口

编辑你的Deployment YAML,将containerPort改为容器实际监听的80:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-nextcloud
  namespace: nextcloud
  labels:
    env: prod
    app: nextcloud-app
spec:
  template:
    metadata:
      name: nextcloud-app-pod
      labels:
        app: nextcloud-app
        env: production
    spec:
      containers:
      - name: nextcloud
        image: arm32v7/nextcloud
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80  # 从8080改为容器实际监听的80端口
        volumeMounts:
        - mountPath: /var/www/html
          name: nextcloud-data
        securityContext:
          privileged: True
      volumes:
      - name: nextcloud-data
        persistentVolumeClaim:
          claimName: pvc-nextcloud
      nodeSelector:
        kubernetes.io/arch: arm
  replicas: 2
  selector:
    matchLabels:
      app: nextcloud-app

步骤2:修正Nextcloud Service的targetPort

调整Service的targetPort为80,port可以保留8080(只要和Ingress的servicePort对应即可):

apiVersion: v1
kind: Service
metadata:
  name: nextcloud-service
  namespace: nextcloud
  labels:
    app: nextcloud-app
spec:
  type: ClusterIP
  selector:
    app: nextcloud-app
  ports:
  - port: 8080  # 这个端口可保留,和Ingress配置的servicePort一致就行
    targetPort: 80  # 从8080改为容器实际端口80
    protocol: TCP

步骤3:应用修改并验证

执行命令更新资源:

kubectl apply -f deployment-nextcloud.yaml -n nextcloud
kubectl apply -f nextcloud-service.yaml -n nextcloud

然后检查Pod状态,确保新Pod正常启动:

kubectl get pods -n nextcloud

查看Pod日志确认服务运行正常:

kubectl logs <你的nextcloud-pod名称> -n nextcloud

3. 额外排查点(若修复后仍有问题)

  • DNS解析验证:在本地执行nslookup nextcloud.myhomeserver.io,确认域名能正确解析到MetalLB分配的Ingress IP(192.168.178.200)
  • Ingress Controller日志:查看Ingress控制器的Pod日志,排查转发错误:
    kubectl logs -n ingress-nginx <ingress-nginx-controller-pod名称>
    
  • 集群内连通性测试:在集群任意Pod中,尝试访问nextcloud-service.nextcloud.svc.cluster.local:8080,验证Service是否能正确转发流量到容器

内容的提问来源于stack exchange,提问作者IT_novice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:38:41