我正在使用 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
你能告诉我这些有什么问题吗?我无法从给定路径读取文件并将其写入本地系统。
提前致谢
正如 DavidMaze 所建议的,Kubernetes 不是访问本地文件的正确工具。 hostPath 卷将主机节点文件系统中的文件或目录挂载到 Pod 中。使用 hostPath 卷类型会带来许多安全风险。如果您可以避免使用 hostPath 卷,那么您应该这样做。相反,您可以使用 local PersistentVolume。
如果您允许不受信任的 Pod 对任何主机路径进行读写挂载,则该 Pod 中的容器可能能够破坏读写主机挂载。
使用 hostPath 卷时需要小心,无论这些卷是以只读还是读写方式安装的,因为:
对主机文件系统的访问可以暴露特权系统凭据(例如 kubelet)或特权 API(例如容器运行时套接字),这些凭据可用于容器逃逸或攻击集群的其他部分。
具有相同配置的 Pod(例如从 PodTemplate 创建的 Pod)可能由于节点上的文件不同而在不同节点上表现不同。