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


首先应创建 configmapssecrets

Creating and managing configmaps and creating and managing secrets

可以创建不同类型的secrets


  1. 使用configmaps/secrets作为环境变量。

进一步引用 configMapssecretsenvironment 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
      ...
  1. 使用 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。