Передайте секретные значения / переменную среды в параметры flexvol - PullRequest
1 голос
/ 06 марта 2020

Я пытаюсь использовать секреты k8s или иметь переменные окружения из моей локальной среды для установки значений параметров flexvol, это возможно?

Я вижу, что секреты смонтированы успешно, но flexvol не может быть смонтировать успешно. Цените, если есть какое-либо иное решение, кроме секретов, если таковые имеются.

deploy.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}

secret.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: "###"

1 Ответ

2 голосов
/ 07 марта 2020

Я изучал ту же самую вещь, и это не возможно без внешних инструментов.

Проблема в том, что flexvolume только берет учетные данные из секрета, но остальные считаются конфигурацией и должны быть переданы в. То, что вы хотите сделать здесь, это по существу переменная подстановка, которую kubernetes не поддерживает и не будет поддерживать: https://github.com/kubernetes/kubernetes/issues/52787#issuecomment -369645645

С другой стороны, вы можете использовать любой инструмент заменить эти значения переменными из переменных env, от сценария bash / ps, до подходящих решений по развертыванию kubernetes, таких как helm.

KV flexvolume является открытым исходным кодом, поэтому также может быть изменен для обработки этого варианта использования

...