【问题标题】:Unable to deploy Kubernetes secrets using Helm无法使用 Helm 部署 Kubernetes 机密
【发布时间】:2022-06-22 22:00:23
【问题描述】:

我正在尝试使用 GitLab 管道在 AKS 集群上创建我的第一个 Helm 版本, 但是当我运行以下命令时

- helm upgrade server ./aks/server
      --install
      --namespace demo
      --kubeconfig ${CI_PROJECT_DIR}/.kube/config
      --set image.name=${CI_PROJECT_NAME}/${CI_PROJECT_NAME}-server
      --set image.tag=${CI_COMMIT_SHA}
      --set database.user=${POSTGRES_USER}
      --set database.password=${POSTGRES_PASSWORD}

我收到以下错误:

"Error: Secret in version "v1" cannot be handled as a Secret: v1.Secret.Data: 
decode base64: illegal base64 data at input byte 8, error found in #10 byte of ..."

似乎有些东西无法使用机密文件,但我不明白是什么。

secret.yaml模板文件定义如下:

apiVersion: v1
kind: Secret
metadata:
  name: server-secret
  namespace: demo
type: Opaque
data:
  User: {{ .Values.database.user }}
  Host: {{ .Values.database.host }}
  Database: {{ .Values.database.name }}
  Password: {{ .Values.database.password }}
  Port: {{ .Values.database.port }}

我还将添加部署和服务.yaml 文件。

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Values.app.name }}
  labels:
    app: {{ .Values.app.name }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      tier: backend
      stack: node
      app: {{ .Values.app.name }}
  template:
    metadata:
      labels:
        tier: backend
        stack: node
        app: {{ .Values.app.name }}
    spec:
      containers:
        - name: {{ .Values.app.name }}
          image: "{{ .Values.image.name }}:{{ .Values.image.tag }}"
          imagePullPolicy: IfNotPresent
          env:
          - name: User
            valueFrom:
              secretKeyRef:
                name: server-secret
                key: User
                optional: false
          - name: Host
            valueFrom:
              secretKeyRef:
                name: server-secret
                key: Host
                optional: false
          - name: Database
            valueFrom:
              secretKeyRef:
                name: server-secret
                key: Database
                optional: false
          - name: Password
            valueFrom:
              secretKeyRef:
                name: server-secret
                key: Password
                optional: false
          - name: Ports
            valueFrom:
              secretKeyRef:
                name: server-secret
                key: Ports
                optional: false
          resources:
            limits:
              cpu: "1"
              memory: "128M"
          ports:
            - containerPort: 3000

service.yaml

apiVersion: v1
kind: Service
metadata:
  name: server-service
spec:
  type: ClusterIP
  selector:
    tier: backend
    stack: node
    app: {{ .Values.app.name }}
  ports:
    - protocol: TCP
      port: 3000
      targetPort: 3000

有什么提示吗?

【问题讨论】:

    标签: kubernetes kubernetes-helm


    【解决方案1】:

    您必须将秘密值编码为 base64

    查看文档encoding-functions

    试试下面的代码

    apiVersion: v1
    kind: Secret
    metadata:
      name: server-secret
      namespace: demo
    type: Opaque
    data:
      User: {{ .Values.database.user | b64enc }}
      Host: {{ .Values.database.host | b64enc }}
      Database: {{ .Values.database.name | b64enc }}
      Password: {{ .Values.database.password | b64enc }}
      Port: {{ .Values.database.port | b64enc }}
    

    否则使用stringData 代替data

    stringData 将允许您创建无需编码为 base64 的秘密

    查看link中的示例

    apiVersion: v1
    kind: Secret
    metadata:
      name: server-secret
      namespace: demo
    type: Opaque
    stringData:
      User: {{ .Values.database.user | b64enc }}
      Host: {{ .Values.database.host | b64enc }}
      Database: {{ .Values.database.name | b64enc }}
      Password: {{ .Values.database.password | b64enc }}
      Port: {{ .Values.database.port | b64enc }}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-08
      • 1970-01-01
      • 2020-01-11
      • 2020-09-14
      • 2019-10-19
      • 2021-08-29
      相关资源
      最近更新 更多