裸机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
相关产品推荐
相关产品推荐

