• K8S hostpath配置


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 Jerry在认真做笔记 2024-05-21 15:33 采纳率: 66.7% 浏览 10 首页/ 云计算 / K8S hostpath配置 kubernetes容器ubuntu k8s配置nginx,hostpath配置到宿主机路径后,curl nginx-pod发生404报错,无法正常访问index.html,请问有没有好的解决办法 apiVersion: v1 kind: Pod metadata: name: nginx-pod namespace: test labels: app: nginx spec: nodeName: k8s-node-1 containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent volumeMounts: - name: nginx-logs mountPath: /var/log/nginx name: nginx-html mountPath: /usr/share/nginx volumes: - name: nginx-logs hostPath: path: /root/nginx/logs name: nginx-html hostPath: path: /root/nginx/html 收起 写回答 好问题 1 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    5条回答 默认 最新

    • 专家-百锦再@新空间代码工作室 全栈领域优质创作者 2024-05-21 15:34
      关注

      apiVersion: v1kind: Podmetadata:name: nginx-podspec:containers:- name: nginximage: nginximagePullPolicy: IfNotPresentvolumeMounts:- name: nginx-htmlmountPath: /usr/share/nginx/htmlvolumes:- name: nginx-htmlhostPath:path: /root/html

      在这个配置中,我们将主机路径/root/html挂载到了Pod中Nginx容器的/usr/share/nginx/html路径下。这样做可以让Nginx容器访问主机路径中的文件,并正常展示在网页上。

      如果您在这个配置下仍然遇到404报错,可能是路径配置不正确或者文件权限问题。您可以通过查看Nginx容器的日志来进一步调试和排查问题。希望可以帮助您解决这个问题。


      有问题你别着急,评论留言都可以,看到马上就回复,尽量及时补充齐
      评论
      Jerry在认真做笔记 2024-05-21 16:54

      我只要把hostpath中的html配置删掉就能正常访问了,问题肯定是出在这部分

      回复
      Jerry在认真做笔记 2024-05-21 16:57

      img

      回复
      Jerry在认真做笔记 回复 Jerry在认真做笔记 2024-05-21 16:58

      路径都是正确的,宿主机的/root/nginx/html目录下就有index.html

      回复
    • IT工程师_二师兄 2024-05-21 16:02
      关注

      你把报错原始截图发给我看看

      评论
      Jerry在认真做笔记 2024-05-21 16:07

      原始截图就是那个404的截图,我创建pod后curl就报这个错

      回复
    • 阿里嘎多学长 2024-05-21 15:33
      关注

      以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


      您想要解决的问题: 您想要解决的问题是在 Kubernetes (K8S) 环境中配置 Nginx 时,通过 hostPath 将容器内的路径挂载到宿主机的路径上,但是当您尝试通过 curl 访问 nginx-pod 时,遇到了 404 错误,无法访问到预期的 index.html 页面。

      图片内容: 图片显示了您在 Kubernetes 集群中执行的命令和输出结果。具体来说:

      • 您首先使用 kubectl get pod -n test 命令查看了 test 命名空间下的 Pod 状态,显示 nginx-pod 处于 Running 状态。
      • 然后使用 kubectl get pod -n test -owide 命令获取了更详细的 Pod 信息,包括 IP 地址和节点信息。
      • 通过 curl 命令访问 nginx-pod 的 IP 地址 (10.244.1.46),返回了 404 Not Found 错误页面。

      问题出现原因: 根据您提供的 YAML 配置文件和错误信息,问题可能出现的原因包括:

      1. 挂载路径错误:YAML 文件中 volumeMounts 下的 mountPath 配置有误,应该是两个不同的路径,但您为 nginx-logsnginx-html 配置了相同的 mountPath
      2. 文件不存在:即使路径配置正确,index.html 文件可能不存在于宿主机的挂载路径 /root/nginx/html 中。
      3. Nginx 配置问题:Nginx 可能没有正确配置以服务 /root/nginx/html 目录下的文件。

      问题解决方案

      1. 修正 YAML 文件中的路径挂载错误

        • 确保 nginx-logsnginx-html 指向不同的 mountPath
        • 示例修正后的 YAML 文件部分:
          volumeMounts: 
          - name: nginx-logs
            mountPath: /var/log/nginx
          - name: nginx-html
            mountPath: /usr/share/nginx/html  # 确保这是正确的服务目录
          volumes: 
          - name: nginx-logs
            hostPath:
              path: /root/nginx/logs
          - name: nginx-html
            hostPath:
              path: /root/nginx/html  # 确保这个路径下有 index.html 文件
          
      2. 确保 index.html 文件存在

        • 检查宿主机的 /root/nginx/html 目录下是否存在 index.html 文件,如果不存在,需要创建或复制该文件。
      3. 检查 Nginx 配置

        • 确保 Nginx 的配置文件指向了正确的服务目录,通常是 /usr/share/nginx/html

      提供代码: 修正后的 YAML 文件配置如上所示。

      代码运行方式

      1. 应用修正后的 YAML 文件到 Kubernetes:

        kubectl apply -f <修正后的配置文件名>.yaml
        
      2. 确认 Pod 重新启动并处于 Running 状态:

        kubectl get pod -n test
        

      代码预期运行结果: 如果配置正确,并且 index.html 文件存在于正确的路径下,curl nginx-pod 的 IP 地址应该会返回 index.html 的内容,而不是 404 错误。

      推荐相关链接

      1. Kubernetes Documentation on Volumes
      2. Nginx Official Documentation
      3. HostPath Volumes in Kubernetes
      4. Debugging Nginx in Kubernetes

      展开全部

      评论 编辑记录
    • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-21 15:33
      关注

      引自免费微信小程序:皆我百晓生

      看起来您在尝试将Host Path卷挂载到Nginx容器中,并通过Pod的IP地址进行访问,但遇到了404错误。根据提供的信息,您的yaml文件中存在一个语法错误:volumeMountsvolumes 部分的 name 属性被重复定义了。这会导致Pod创建失败。让我们修复这个问题并重新部署Pod。

      首先,修正YAML配置文件中的语法错误。下面是修改后的配置:

      apiVersion: v1
      kind: Pod
      metadata:
        name: nginx-pod
        namespace: test
        labels:
          app: nginx
      spec:
        affinity:
          nodeAffinity:
            requiredDuringSchedulingIgnoredDuringExecution:
              nodeSelectorTerms:
              - matchExpressions:
                  - key: kubernetes.io/hostname
                    operator: In
                    values:
                    - k8s-node-1
        containers:
        - name: nginx
          image: nginx
          imagePullPolicy: IfNotPresent
          volumeMounts:
          - name: nginx-logs
            mountPath: /var/log/nginx
          - name: nginx-html
            mountPath: /usr/share/nginx/html
        volumes:
        - name: nginx-logs
          hostPath:
            path: /root/nginx/logs
        - name: nginx-html
          hostPath:
            path: /root/nginx/html
      

      然后,删除现有的Pod(如果有)并重新部署:

      kubectl delete pod nginx-pod -n test
      kubectl apply -f 
      

      接下来,确保宿主机目录 /root/nginx/html 中有一个名为 index.html 的文件,这是Nginx服务器默认会查找的页面。如果没有,创建一个简单的 index.html 文件,例如:

      echo '

      Hello, Nginx!

      ' > /root/nginx/html/index.html

      最后,再次尝试通过Pod的IP地址访问:

      curl http://10.244.1.46
      

      这样应该可以正确地显示 "Hello, Nginx!" 页面,而不是404错误。如果您仍然遇到问题,请检查Nginx日志(位于 /var/log/nginx/access.log/var/log/nginx/error.log),这些日志可能会提供关于问题的更多线索。

      展开全部

      评论 编辑记录
    • Kwan的解忧杂货铺 2024-05-21 15:33
      关注

      下午好🌅🌅🌅
      本答案参考ChatGPT-3.5

      问题描述:

      在k8s中配置nginx pod时,使用hostPath挂载宿主机的路径后,访问nginx出现404错误,无法正常访问index.html。

      解决方案:

      1.检查宿主机路径权限是否正确,可以使用ls -alh命令查看路径下的文件权限是否正确。

      2.检查volumeMounts和volumes配置是否正确,需要保证挂载的路径正确,这里需要注意一下name的使用方式,volumeMounts中的name需要和volumes中的name对应起来。

      3.检查nginx配置是否正确。如果nginx没有配置正确,会导致访问出现404错误。可以使用kubectl exec命令进入pod中查看nginx的配置文件是否正确,路径是否正确。

      正确的配置如下:

      apiVersion: v1
      kind: Pod
      metadata:
        name: nginx-pod
        namespace: test
        labels:
           app: nginx
      spec:
        nodeName: k8s-node-1
        containers:
        - name: nginx
          image: nginx
          imagePullPolicy: IfNotPresent
          volumeMounts: 
          - name: nginx-logs
            mountPath: /var/log/nginx
          - name: nginx-html
            mountPath: /usr/share/nginx/html
        volumes: 
        - name: nginx-logs
          hostPath:
            path: /root/nginx/logs
        - name: nginx-html
          hostPath:
            path: /root/nginx/html
      

      展开全部

      评论
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    显示控件——图标类之图标变量
    MSSQL RAISERROR
    使用 Learner Lab - 使用 API Gateway 触发 AWS Lambda
    Leetcode——1636. 按照频率将数组升序排序
    Pytorch中loss.backward()和torch.autograd.grad的使用和区别(通俗易懂)
    UniApp video 使用(自定义进度条,及微信无法暂停播放设置进度问题)
    神经网络和图神经网络,神经网络 图像相似度
    【数组的使用续篇】
    SpringBoot集成Dubbo
    实验五 图像分割与描述
  • 原文地址:https://ask.csdn.net/questions/8106944