无法使用docker和kubernetes部署yaml文件从本地机器读取文件

问题描述 投票:0回答:1

我正在使用 minikube 来测试 kubernetes。下面是我的 dockerfile 和部署文件。我安装了 2 卷。我使用下面的 yaml 文件部署了图像。集群和镜像运行良好。但只有 1 个问题是以下配置无法从给定路径读取文件并将文件写入本地系统。文件位于这些文件夹内

Dockerfile

FROM openjdk:17-jdk-alpine
ARG JARFILE=target/*.jar
COPY ./target/zion-0.0.1-SNAPSHOT.jar app.jar
VOLUME /home/ubuntu/yd/
VOLUME /etc/dost/yd/
ENTRYPOINT ["java", "-jar", "/app.jar"]

下面是我的部署 yaml 文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploymentlocal
spec:
  replicas: 2
  selector:
    matchLabels:
      app: dep
  template:
    metadata:
      labels:
        app: dep
    spec:
      containers:
        - name: dep-container
          image: java17dep
          imagePullPolicy: Never
          ports:
            - containerPort: 8080
          livenessProbe:
            httpGet:
              path: /v3/test/db
              port: 8080
            initialDelaySeconds: 60
            periodSeconds: 60
            timeoutSeconds: 5
          volumeMounts:
            - name: yd-volume
              mountPath: /home/ubuntu/yd
            - name: z-volume
              mountPath: /etc/dost/yd
      volumes:
        - name: yd-volume
          hostPath:
            path: /home/ubuntu/yd
        - name: z-volume
          hostPath:
            path: /etc/dost/yd

你能告诉我这些有什么问题吗?我无法从给定路径读取文件并将其写入本地系统。

提前致谢

docker kubernetes minikube
1个回答
0
投票

正如 DavidMaze 所建议的,Kubernetes 不是访问本地文件的正确工具。 hostPath 卷将主机节点文件系统中的文件或目录挂载到 Pod 中。使用 hostPath 卷类型会带来许多安全风险。如果您可以避免使用 hostPath 卷,那么您应该这样做。相反,您可以使用 local PersistentVolume。

如果您允许不受信任的 Pod 对任何主机路径进行读写挂载,则该 Pod 中的容器可能能够破坏读写主机挂载。

使用 hostPath 卷时需要小心,无论这些卷是以只读还是读写方式安装的,因为:

  • 对主机文件系统的访问可以暴露特权系统凭据(例如 kubelet)或特权 API(例如容器运行时套接字),这些凭据可用于容器逃逸或攻击集群的其他部分。

  • 具有相同配置的 Pod(例如从 PodTemplate 创建的 Pod)可能由于节点上的文件不同而在不同节点上表现不同。

© www.soinside.com 2019 - 2024. All rights reserved.