1

我有一个 Spring Boot 应用程序,其中有用于部署、配置映射和机密的 k8s 文件。它们的值正在使用 helm 进行更新。我想要一个secrets.yaml将值放在那里的地方,它会替换application.yamlSpring Boot 中的值。我设法为配置图做到了这一点。我创建了configmap.yaml,把我想替换的值放在那里,设置 Spring Cloud K8s 以获得执行它的权限(创建 rbac)并且它工作。但是对于秘密我没有设法做到这一点。

这是我的application.yaml。我想更换banana.database.password.

spring:
  main:
    banner-mode: off
  application:
    name: devops-integration
  cloud:
    kubernetes:
      secrets:
        name: devops-integration
        paths: /etc/secrets
banana:
  valueTest: hello
  valueDebug: world
  database:
    password: dGVzdAo=

这是我的secret.yaml

apiVersion: v1
kind: Secret
metadata:
  namespace: {{ .Release.Namespace }}
  name: {{ .Release.Name }}
  labels:
    environment: {{ .Values.cloud.project.environment }}
    release: {{ .Release.Name }}
    tier: {{ .Values.application.tier }}
data:
  banana.database.password: {{ .Values.application.database.password }}

这是我values.yaml想要的秘密的最终值。

application:
  name: devops-integration
  database:
    password: dGVzdHBhc3N3b3JkCg==

这是我deployment.yaml尝试为秘密配置坐骑的地方,但它不起作用。

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: {{ .Release.Namespace }}
  name: {{ .Release.Name }}-deployment
  labels:
    environment: {{ .Values.cloud.project.environment }}
    release: {{ .Release.Name }}
    tier: {{ .Values.application.tier }}
spec:
  replicas: {{ .Values.application.pod.replicas }}
  selector:
    matchLabels:
      environment: {{ .Values.cloud.project.environment }}
      release: {{ .Release.Name }}
      tier: {{ .Values.application.tier }}
  template:
    metadata:
      namespace: {{ .Values.cloud.project.namespace }}
      labels:
        environment: {{ .Values.cloud.project.environment }}
        release: {{ .Release.Name }}
        tier: {{ .Values.application.tier }}
    spec:
      containers:
      - image: gcr.io/{{ .Values.cloud.project.name }}/{{ .Values.application.name }}
        name: {{ .Release.Name }}-container
        volumeMounts:
        - mountPath: "/etc/secrets"
          name: {{ .Release.Name }}-volume
        ports:
        - containerPort: {{ .Values.application.pod.container.port }}
          protocol: {{ .Values.application.pod.container.protocol }}
      volumes:
      - name: {{ .Release.Name }}-volume
        secret:
          secretName: {{ .Release.Name }}

当我部署所有内容时,发生的情况是密码的值是 里面的那个application.yaml,而不是secret.yaml正在使用的那个。对于 configmap,同样的模式也有效。

有人知道我做错了什么吗?

PS.:一切都将部署到 GKE。

4

0 回答 0