我正在准备一个k8清单来部署一个自定义应用程序,这需要在一些豆荚中使用一个"git克隆“,而且我面临一个错误。
所以我想先把git部分分离出来,然后在一个简单的吊舱里进行测试。但我也有同样的错误。
错误是:
URL using bad/illegal format or missing URL我的测试舱和YAML秘密清单如下:
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-tokenPod显示git克隆命令失败:
→ 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但是,如果我在同一个荚中手动运行以下命令,它就能正常工作。
git clone https://gitlab-ci-token:$GITLABTOKEN@gitlab.com/ORG/infra/deploy/apps/sec-manager.git因此,我认为Pod中shell命令中的某些字符存在一些YAML解析错误,但无法确定哪些字符以及如何准确地更正这些行。
有什么想法吗?
发布于 2022-11-09 17:35:41
找到了问题所在。
问题是将一个换行符自动添加到base64编码的字符串中。
例如,如果原始令牌为12345,我们可以按以下方式对base64进行编码:
▶ echo "12345" | base64
MTIzNDUK但是很有可能在字符串的末尾出现尾随空格或换行符,并且编码的字符串很可能是错误的,而不是编码的标记之一。
若要防止任何尾随换行符或空格,请使用标志-n和echo。
▶ echo -n "12345" | base64
MTIzNDU=与第一个结果相比,您可以看到编码的令牌差异。
基本上,同样的问题发生在我来自Kubernetes秘密secret-manager的secret-manager值上。新行在env变量$GITLABTOKEN之后破坏了git。

https://stackoverflow.com/questions/74362821
复制相似问题