AKS 如何处理容器中的 .env 文件?
How does AKS handle the .env file in a container?
假设有一个后端应用程序,其私钥存储在 .env 文件中。
对于项目文件结构:
|-App files
|-Dockerfile
|-.env
如果我在本地运行 docker 图像,在API 请求期间使用有效的public 密钥可以正常访问应用程序。但是,如果我使用相同的 docker 映像将容器部署到 AKS 集群中,应用程序将失败。
我想知道 AKS 群集中的容器如何处理 .env 文件。我应该怎么做才能解决这个问题?
为了更好的可见性,将其从评论中移出。
首先也是最重要的是 docker 与 kubernetes 不同。在 docker 上起作用的东西不会直接在 kubernetes 上起作用。 Docker 是一个容器运行时,而 kubernetes 是一个位于 docker 之上的容器编排工具(现在不总是 docker,也使用 containerd
)。
Internet 上有许多资源描述了主要区别。例如这个来自 microsoft docs
首先应创建 configmaps
和 secrets
:
Creating and managing configmaps and creating and managing secrets
可以创建不同类型的secrets。
- 使用configmaps/secrets作为环境变量。
进一步引用 configMaps
和 secrets
为 environment variables
看起来像(配置映射和秘密具有相同的结构):
apiVersion: v1
kind: Pod
metadata:
name: pod-example
spec:
containers:
- ...
env:
-
name: ADMIN_PASS
valueFrom:
secretKeyRef: # here secretref is used for sensitive data
key: admin
name: admin-password
-
name: MYSQL_DB_STRING
valueFrom:
configMapKeyRef: # this is not sensitive data so can be used configmap
key: db_config
name: connection_string
...
- 使用 configmaps/secrets 作为卷(它将显示为文件)。
下面使用secrets作为挂载在特定目录的文件的例子:
apiVersion: apps/v1
kind: Deployment
metadata:
...
spec:
containers:
- ...
volumeMounts:
- name: secrets-files
mountPath: "/mnt/secret.file1" # "secret.file1" file will be created in "/mnt" directory
subPath: secret.file1
volumes:
- name: secrets-files
secret:
secretName: my-secret # name of the Secret
有一个 good article 解释并显示了秘密的用例及其局限性,例如大小限制为 1Mb。
假设有一个后端应用程序,其私钥存储在 .env 文件中。
对于项目文件结构:
|-App files
|-Dockerfile
|-.env
如果我在本地运行 docker 图像,在API 请求期间使用有效的public 密钥可以正常访问应用程序。但是,如果我使用相同的 docker 映像将容器部署到 AKS 集群中,应用程序将失败。
我想知道 AKS 群集中的容器如何处理 .env 文件。我应该怎么做才能解决这个问题?
为了更好的可见性,将其从评论中移出。
首先也是最重要的是 docker 与 kubernetes 不同。在 docker 上起作用的东西不会直接在 kubernetes 上起作用。 Docker 是一个容器运行时,而 kubernetes 是一个位于 docker 之上的容器编排工具(现在不总是 docker,也使用 containerd
)。
Internet 上有许多资源描述了主要区别。例如这个来自 microsoft docs
首先应创建 configmaps
和 secrets
:
Creating and managing configmaps and creating and managing secrets
可以创建不同类型的secrets。
- 使用configmaps/secrets作为环境变量。
进一步引用 configMaps
和 secrets
为 environment variables
看起来像(配置映射和秘密具有相同的结构):
apiVersion: v1
kind: Pod
metadata:
name: pod-example
spec:
containers:
- ...
env:
-
name: ADMIN_PASS
valueFrom:
secretKeyRef: # here secretref is used for sensitive data
key: admin
name: admin-password
-
name: MYSQL_DB_STRING
valueFrom:
configMapKeyRef: # this is not sensitive data so can be used configmap
key: db_config
name: connection_string
...
- 使用 configmaps/secrets 作为卷(它将显示为文件)。
下面使用secrets作为挂载在特定目录的文件的例子:
apiVersion: apps/v1
kind: Deployment
metadata:
...
spec:
containers:
- ...
volumeMounts:
- name: secrets-files
mountPath: "/mnt/secret.file1" # "secret.file1" file will be created in "/mnt" directory
subPath: secret.file1
volumes:
- name: secrets-files
secret:
secretName: my-secret # name of the Secret
有一个 good article 解释并显示了秘密的用例及其局限性,例如大小限制为 1Mb。