【问题标题】:Kubernetes / Docker - SSL certificates for web service useKubernetes / Docker - 用于 Web 服务的 SSL 证书
【发布时间】:2020-06-04 06:14:16
【问题描述】:

我有一个从前端客户端收集数据的 Python Web 服务。每隔几秒钟,它就会在我们的主题上创建一个 Pulsar 生产者并发送收集到的数据。我还设置了一个 dockerfile 来构建映像,并正在努力将其部署到我们组织的 Kubernetes 集群。

Pulsar 代码依赖于证书和密钥 .pem 文件进行 TLS 身份验证,这些文件通过测试代码中的文件路径加载。但是,如果 .pem 文件包含在构建的 Docker 映像中,则会导致我们的 Kubernetes 实例上的 Twistlock 扫描明显违反合规性。

我对 Docker、Kubernetes 和一般证书的安全性非常缺乏经验。存储和加载用于此 Web 服务的 .pem 文件的最佳方式是什么?

【问题讨论】:

  • 你熟悉Kubernetessecrets吗?我不是专家,但听起来他们就是专门针对这种情况的。

标签: docker ssl kubernetes


【解决方案1】:

您可以使用 Kubernetes 密钥在 Pod 中挂载证书。

首先,您需要创建一个 Kubernetes 密钥: (将您的证书复制到为您的 Kubernetes 集群配置 kubectl 的位置。例如文件 mykey.pem 并将其复制到 /opt/certs 文件夹。)

kubectl create secret generic mykey-pem --from-file=/opt/certs/

确认它是正确创建的:

kubectl describe secret mykey-pem

在部署中挂载您的密钥(例如 nginx 部署):

apiVersion:  apps/v1
kind: Deployment 
metadata:
  labels:
    app: nginx
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx
        name: nginx
        volumeMounts:
          - mountPath: "/etc/nginx/ssl"
            name: nginx-ssl
            readOnly: true
        ports:
        - containerPort: 80
      volumes:
        - name: nginx-ssl
          secret:
            secretName: mykey-pem
      restartPolicy: Always

之后 .pem 文件将在容器内可用,您无需将它们包含在 docker 映像中。

【讨论】:

  • 感谢您的帮助。我确实不得不做一些诡计——我们使用的库需要密钥和证书文件的路径,所以我不得不将这些秘密作为环境变量并将它们写入临时文件——但这就是我们让它们工作的方式。
猜你喜欢
  • 1970-01-01
  • 2015-12-15
  • 2013-11-01
  • 2015-10-21
  • 2019-01-05
  • 2018-09-15
  • 2020-04-14
  • 2013-05-24
  • 2014-02-23
相关资源
最近更新 更多