【问题标题】:how to access go templated kubernetes secret in manifest如何在清单中访问 Go 模板 kubernetes 机密
【发布时间】:2021-05-12 14:44:51
【问题描述】:

我正在运行本教程https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-deploy-elasticsearch.html,发现 elasticsearch 运算符包含一个预定义的秘密,可通过kubectl get secret quickstart-es-elastic-user -o go-template='{{.data.elastic | base64decode}}' 访问。我想知道如何在将其用作环境变量的 pod 的清单文件中访问它。 Pod 的清单如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: user-depl
spec:
  replicas: 1
  selector:
    matchLabels:
      app: user
  template:
    metadata:
      labels:
        app: user
    spec:
      containers:
        - name: user
          image: reactor/user
          env:
            - name: PORT
              value: "3000"
            - name: ES_SECRET
              valueFrom:
                secretKeyRef:
                  name: quickstart-es-elastic-user
                  key: { { .data.elastic } }

---
apiVersion: v1
kind: Service
metadata:
  name: user-svc
spec:
  selector:
    app: user
  ports:
    - name: user
      protocol: TCP
      port: 3000
      targetPort: 3000

当我在此清单中尝试定义 ES_SECRET 时,我收到以下错误消息:invalid map key: map[interface {}]interface {}{\".data.elastic\":interface {}(nil)}\n。任何有关解决此问题的帮助将不胜感激。

【问题讨论】:

    标签: elasticsearch kubernetes


    【解决方案1】:

    通过 API (kubectl get secret ...) 返回的秘密是一个 JSON 结构,其中:

    {
      "data": {
        "elastic": "base64 encoded string"
      }
    }
    

    所以你只需要替换

    key: { { .data.elastic } }
    

    key: elastic
    

    因为它是 secretKeyReference(例如,您在某个秘密的 data (=contents) 中引用了某个 key 中的值,该名称是您在上面指定的名称)。无需担心base64解码; Kubernetes 为您完成。

    【讨论】:

    • 你好。我在处理其他问题时遇到了麻烦,因此无法对此进行全面测试。现在我已经解决了其他问题,我看到了这个错误:{...caused_by":{"type":"illegal_argument_exception","reason":"Illegal base64 character 3a"},"header":{"WWW-Authenticate":["Basic realm=\"security\" charset=\"UTF-8\"","Bearer realm=\"security\"","ApiKey"]}},"status":401}。我想知道我如何能够解码这个,因为看起来我可能需要这样做。谢谢!
    • @reactor 这么少的细节很难说清楚。 AFAIK hex 3a 是一个冒号 : 字符,在 WWW-Authentication 方面,它通常将用户名和密码分开。这对于Basic 身份验证类型是合法的,不确定是否允许ApiKey。您提到的指南使用curl -u "elastic:$PASSWORD",即Basic 身份验证类型。
    猜你喜欢
    • 2015-09-22
    • 2018-05-28
    • 2020-07-01
    • 1970-01-01
    • 2020-10-05
    • 2022-12-04
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    相关资源
    最近更新 更多