【问题标题】:Pass Secret values/environment var to the flexvol options将 Secret 值/环境变量传递给 flexvol 选项
【发布时间】:2020-03-06 16:40:49
【问题描述】:

我正在尝试使用 k8s 机密或使用本地环境中的环境变量来设置 flexvol 选项值,这可能吗?

我可以看到 secrets 已成功挂载,但 flexvol 无法成功挂载。如果有秘密以外的任何其他解决方案,如果有的话,请欣赏。

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
  namespace: default
  labels:
    app: my-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-deployment
  template:
    metadata:
      labels:
        app: my-deployment
    spec:
      containers:
      - image: traefik:1.7.7-alpine
        name: traefik
        livenessProbe:
          tcpSocket:
            port: 80
          failureThreshold: 3
          initialDelaySeconds: 10
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 2
        volumeMounts:
        - name: certs 
          mountPath: /certs
        ports:
        - name: http
          containerPort: 80
          protocol: TCP
        env:
        - name: KV_NAME
          valueFrom:
            secretKeyRef:
              name: flexvol-var-secret
              key: keyvaultname
        - name: KV_OBJ_NAME
          valueFrom:
            secretKeyRef:
              name: flexvol-var-secret
              key: keyvaultobjectname
        - name: TENANT_ID
          valueFrom:
            secretKeyRef:
              name: flexvol-var-secret
              key: tenantid
        - name: RESOURCE_GROUP
          valueFrom:
            secretKeyRef:
              name: flexvol-var-secret
              key: resourcegroup
        - name: SUB_ID
          valueFrom:
            secretKeyRef:
              name: flexvol-var-secret
              key: subscriptionid
      volumes:
      - name: certs
        flexVolume:
          driver: "azure/kv"
          secretRef:
            name: kvcreds
          options:
            keyvaultname: ${KV_NAME}
            keyvaultobjectname: ${KV_OBJ_NAME}
            keyvaultobjecttype: "secret"
            tenantid: ${TENANT_ID}
            resourcegroup: ${RESOURCE_GROUP}
            subscriptionid: ${SUB_ID}

秘密.yaml

kind: Secret
apiVersion: v1
metadata:
  name: flexvol-var-secret
  labels:
    name: flexvol-var-secret
  annotations:
    description: Template for flexVolume variables values
stringData:
  keyvaultname: "###"
  keyvaultobjectname: "###"
  tenantid: ""###"
  resourcegroup: "###"
  subscriptionid: "###"

【问题讨论】:

    标签: kubernetes azure-keyvault azure-aks


    【解决方案1】:

    我一直在研究同样的事情,如果没有外部工具,这实际上是不可能的。

    问题是flexvolume只是从secret中获取凭证,而rest被认为是配置,需要传入。你在这里要做的本质上是变量替换,kubernetes不支持,也不支持:@ 987654321@

    从好的方面来说,您可以使用任何工具将这些值替换为 env 变量、bash/ps 脚本以及适当的 kubernetes 部署解决方案(如 helm)中的变量。

    KV flexvolume 是开源的,因此也可以修改以处理此用例

    【讨论】:

    • 我在 flexvol repo github.com/Azure/kubernetes-keyvault-flexvol/issues/28发现了一个未解决的问题
    • 这个问题是关于从 keyvault 挂载机密作为容器内的环境变量,而不是使用 kubernetes secret 挂载 keyvault :)
    • :) 如果您觉得我的回答有用,别忘了点赞并接受
    猜你喜欢
    • 2021-11-06
    • 2013-12-29
    • 2021-09-05
    • 2020-03-27
    • 2017-03-30
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多