从 .env 文件创建 kubernetes env var 机密

kri*_*ris 3 bitbucket environment-variables node.js docker kubernetes

我有一个 nodejs 应用程序,它在环境变量中存储变量。

我正在使用dotenv模块,所以我有一个如下所示的.env文件:

VAR1=value1
VAR2=something_else
Run Code Online (Sandbox Code Playgroud)

我目前正在设置一个 BitBucket Pipeline 以将其自动部署到 Kubernetes 集群。
我对 kubernetes 的秘密不是很熟悉,尽管我正在阅读它们

我很好奇 :

有没有一种简单的方法可以将我在.env文件中定义的所有环境变量发送到 Docker-container/kubernetes-deployment,以便它们在我的应用程序运行的 pod 中可用?

我希望有一个示例secrets.yml文件或类似文件,它可以将所有内容从.env容器中的环境变量中提取出来。但它也可以在 BitBucket 管道级别或 Docker 容器级别完成..我不确定......

Kam*_*san 6

第 1 步:使用您的.env文件创建 k8s 密钥:

# kubectl create secret generic <secret-name> --from-env-file=<path-to-env-file> 

$ kubectl create secret generic my-env-list --from-env-file=.env 
secret/my-env-list created
Run Code Online (Sandbox Code Playgroud)

第 2 步:改变秘密:

$ kubectl get secret my-env-list -o yaml
apiVersion: v1
data:
  VAR1: dmFsdWUx
  VAR2: c29tZXRoaW5nX2Vsc2U=
kind: Secret
metadata:
  name: my-env-list
  namespace: default
type: Opaque
Run Code Online (Sandbox Code Playgroud)

第 3 步:添加env到 pod 的容器中:

apiVersion: v1
kind: Pod
metadata:
  name: demo-pod
spec:
  containers:
    - name: demo-container
      image: k8s.gcr.io/busybox
      command: [ "/bin/sh", "-c", "env" ]
      envFrom:
      - secretRef:
          name: my-env-list # <---- here
  restartPolicy: Never
Run Code Online (Sandbox Code Playgroud)

第 4 步:运行 pod 并检查是否env存在:

$ kubectl apply -f pod.yaml 
pod/demo-pod created

$ kubectl logs -f demo-pod 
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT=443
HOSTNAME=demo-pod
SHLVL=1
HOME=/root
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
VAR1=value1  # <------------------------------------------------------here 
VAR2=something_else # <-----------------------------------------------here
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT_HTTPS=443
PWD=/
KUBERNETES_SERVICE_HOST=10.96.0.1

Run Code Online (Sandbox Code Playgroud)