简体   繁体   English

无法使用 Helm 部署 Kubernetes 机密

[英]Unable to deploy Kubernetes secrets using Helm

I'm trying to create my first Helm release on an AKS cluster using a GitLab pipeline, but when I run the following command我正在尝试使用 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}

I receive the following error:我收到以下错误:

"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 ..."

It looks like something is not working with the secrets file, but I don't understand what.看起来有些东西不适用于秘密文件,但我不明白是什么。

The secret.yaml template file is defined as follows: 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 }}

I will also add the deployment and the service .yaml files.我还将添加部署和服务.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

Any hint?有什么提示吗?

You have to encode secret values to base64您必须将秘密值编码为 base64

Check the doc encoding-functions检查文档编码功能

Try below code试试下面的代码

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

Else use stringData instead of data否则使用stringData代替data

stringData will allow you to create the secrets without encode to base64 stringData 将允许您在不编码到 base64 的情况下创建秘密

Check the example in the 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 }}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 无法在 Kubernetes 集群上使用 helm chart 部署服务 - Unable to deploy services using helm chart on Kubernetes cluster 使用 Helm 在 kubernetes 上安装 jupyterhub 的秘密 - mount secrets for jupyterhub on kubernetes with Helm 来自 kube.netes 秘密的掌舵值? - helm values from kubernetes secrets? 在使用 helm chart 时动态刷新 kubernetes 上秘密更新的 pod - Dynamically refresh pods on secrets update on kubernetes while using helm chart 使用 Helm 和 kubernetes 机密的数据库连接字符串问题 - Issue with database connection string using Helm and kubernetes secrets 使用 Helm 使用 PostgreSQL 将微服务部署到 Kubernetes - Deploy Microservice to Kubernetes with PostgreSQL via using Helm 无法在 Azure Kubernetes 集群 (AKS) 中使用 helm 部署第二个入口控制器 - Unable to deploy a second ingress controller using helm in Azure Kubernetes Cluster ( AKS ) 无法识别数据的头盔秘密 - Helm Secrets Unable To Recognize Data Terraform GCP Kubernetes:无法使用kubernetes_secret创建秘密 - Terraform GCP Kubernetes: Unable to create Secrets using kubernetes_secret 如何通过 helm 模板使用 kubernetes 密封的秘密 - How to use kubernetes sealed secrets with helm templates
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM