首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在为Pod定义的命令中,使用shell env变量中的令牌不用于git克隆

在为Pod定义的命令中,使用shell env变量中的令牌不用于git克隆
EN

Stack Overflow用户
提问于 2022-11-08 14:58:49
回答 1查看 58关注 0票数 0

我正在准备一个k8清单来部署一个自定义应用程序,这需要在一些豆荚中使用一个"git克隆“,而且我面临一个错误。

所以我想先把git部分分离出来,然后在一个简单的吊舱里进行测试。但我也有同样的错误。

错误是:

代码语言:javascript
复制
URL using bad/illegal format or missing URL

我的测试舱和YAML秘密清单如下:

代码语言:javascript
复制
apiVersion: v1
kind: Secret
metadata:
  name: secret-manager
  namespace: sec-manager
type: Opaque
data:
  gitlab-access-token: SOMETOKEN

---

apiVersion: v1
kind: Pod
metadata:
  name: "sec-manager"
  namespace: sec-manager
  labels:
    app: sec-manager
    use: passwordmanager
spec:
  containers:
  - name: disk-checker
    image: "alpine:latest"
    command: ["/bin/sh"]
    args:
      - "-c"
      - |
        apk add --no-cache git;
        git --version;
        cd /root;
        git clone https://gitlab-ci-token:$GITLABTOKEN@gitlab.com/ORG/infra/deploy/apps/sec-manager.git;
        sleep 9999;
    env:
      - name:  GITLABTOKEN
        valueFrom:
          secretKeyRef:
            name:  secret-manager
            key:  gitlab-access-token

Pod显示git克隆命令失败:

代码语言:javascript
复制
→ kubectl -n sec-manager logs sec-manager 
fetch https://dl-cdn.alpinelinux.org/alpine/v3.16/main/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.16/community/x86_64/APKINDEX.tar.gz
(1/7) Installing ca-certificates (20220614-r0)
(2/7) Installing brotli-libs (1.0.9-r6)
(3/7) Installing nghttp2-libs (1.47.0-r0)
(4/7) Installing libcurl (7.83.1-r4)
(5/7) Installing expat (2.5.0-r0)
(6/7) Installing pcre2 (10.40-r0)
(7/7) Installing git (2.36.3-r0)
Executing busybox-1.35.0-r17.trigger
Executing ca-certificates-20220614-r0.trigger
OK: 19 MiB in 21 packages
git version 2.36.3
Cloning into '@gitlab.com/ORG/infra/deploy/apps/sec-manager.git'...
fatal: unable to access 'https://gitlab-ci-token:glpat-252jb98b39/': URL using bad/illegal format or missing URL

但是,如果我在同一个荚中手动运行以下命令,它就能正常工作。

代码语言:javascript
复制
git clone https://gitlab-ci-token:$GITLABTOKEN@gitlab.com/ORG/infra/deploy/apps/sec-manager.git

因此,我认为Pod中shell命令中的某些字符存在一些YAML解析错误,但无法确定哪些字符以及如何准确地更正这些行。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-09 17:35:41

找到了问题所在。

问题是将一个换行符自动添加到base64编码的字符串中。

例如,如果原始令牌为12345,我们可以按以下方式对base64进行编码:

代码语言:javascript
复制
▶ echo "12345" | base64
MTIzNDUK

但是很有可能在字符串的末尾出现尾随空格或换行符,并且编码的字符串很可能是错误的,而不是编码的标记之一。

若要防止任何尾随换行符或空格,请使用标志-necho

代码语言:javascript
复制
▶ echo -n "12345" | base64
MTIzNDU=

与第一个结果相比,您可以看到编码的令牌差异。

基本上,同样的问题发生在我来自Kubernetes秘密secret-managersecret-manager值上。新行在env变量$GITLABTOKEN之后破坏了git。

reference1

reference2

reference3

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74362821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档