2

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

对于项目文件结构:

|-App files
|-Dockerfile
|-.env

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

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

4

1 回答 1

1

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


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

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


首先configmaps并且secrets应该创建:

创建和管理配置映射以及创建和管理机密

可以创建不同类型的秘密。


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

进一步参考configMaps和看起来secretsenvironment 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 作为卷(它将显示为文件)。

下面是使用秘密作为文件安装在特定目录中的示例:

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

有一篇很好的文章解释并展示了秘密的用例及其限制,例如大小限制为 1Mb。

于 2021-11-18T11:01:46.973 回答