【问题标题】:How does AKS handle the .env file in a container?AKS 如何处理容器中的 .env 文件?
【发布时间】:2021-12-22 21:37:09
【问题描述】:

假设有一个后端应用程序,其私钥存储在 .env 文件中。

对于项目文件结构:

|-App files
|-Dockerfile
|-.env

如果我在本地运行 docker 映像,则可以在 API 请求期间使用有效的公钥正常访问应用程序。但是,如果我使用相同的 docker 映像将容器部署到 AKS 集群中,应用程序将失败。

我想知道 AKS 群集中的容器如何处理 .env 文件。我应该怎么做才能解决这个问题?

【问题讨论】:

  • 您可以尝试将您需要的私钥变量作为环境变量添加到 kubernetes 部署/Pod 对象中,或者如果您需要保护它们,您可以将它们作为 kubernetes 机密传递
  • 在 docker 上有效的东西不适用于开箱即用的 kubernetes。主要目标是什么?使用容器将公钥传输到 pod?有几种方法可以实现。
  • @VishwasKarale 我理解传递 kubernetes 机密是一种方式。但我想知道为什么它在 docker 中有效,但在 kubernetes 中无效。
  • @moonkotte 我是 kubernetes 的新手,为什么会发生这种情况?对于我的情况,我想在 GET 请求中传输我的公钥,然后存储在应用程序中的私钥将对其进行身份验证并返回正确的响应。如果我想使用和docker类似的方式,你有什么建议吗?
  • @WytrzymałyWiktor 嗨,最后我使用 kubernetes secret 将凭据传递到 pod,因为我找不到其他方法来处理它。

标签: docker kubernetes environment-variables containers azure-aks


【解决方案1】:

将其移出 cmets 以获得更好的可见性。


首先也是最重要的是 docker 与 kubernetes 不同。在 docker 上有效的东西不会直接在 Kubernetes 上有效。 Docker 是一个容器运行时,而 kubernetes 是一个容器编排工具,它位于 docker 之上(现在并不总是 docker,containerd 也在使用)。

互联网上有许多资源描述了关键区别。比如这个来自microsoft docs


首先应创建configmapssecrets

Creating and managing configmapscreating and managing secrets

可以创建不同类型的secrets


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

进一步将configMapssecrets 称为environment variables 看起来像(configmaps 和secrets 具有相同的结构):

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。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-04-20
  • 1970-01-01
  • 2020-10-29
  • 1970-01-01
  • 1970-01-01
  • 2019-01-12
  • 2022-08-22
  • 2013-03-28
相关资源
最近更新 更多