superedge / edgeadm

Edgeadm is a tool based on Kubeadm to create superedge cluster environment
Apache License 2.0
11 stars 8 forks source link

tunnel-cloud manifests 模版缺少参数 #27

Open yhlooo opened 2 years ago

yhlooo commented 2 years ago

发生了什么:

在我的 minikube 中尝试使用 edgeadm 将其转换为一个具有边缘能力的集群,我执行了以下命令

edgeadm change --ca.cert ./ca.crt --ca.key ./ca.key

其日志输出如下:

image

看起来并没有成功

我猜测的原因:

从命令执行的输出来看,是往 Kubernetes 创建一个 Secret 报错了,原因是某个值不是一个合法的 base64

找到相关代码:

https://github.com/superedge/edgeadm/blob/d63c731345424cd26e39734144b852784f4245aa/pkg/edgeadm/cmd/change/kubeadm.go#L238-L251

  1. 247 行读取 tunnel-cloud 组件的 manifests 模版,因为没有指定所以使用的是默认值 manifests.TunnelCloudYaml 其中有一个名为 tunnel-cloud-cert 的 Secret ,含有变量 {{.TunnelAnpServerCet}}{{.TunnelAnpServerKey}}
  2. 238 行定义了为 tunnel-cloud manifests 模版填充的变量,其中并没有 "TunnelAnpServerCet""TunnelAnpServerKey" 两个键,因此生成的最终的 manifests 中这两个变量会被 <no value> 替代(这不是个合法的 base64 字符串)
  3. 248 行的 CreateResourceWithFile 方法会使用变量填充模版,然后提交到 Kubernetes ,导致了上述报错

经过我验证,如果在 manifests 中注释掉相关 Secret 中 tunnel-anp-server.crttunnel-anp-server.key 即可无错误地通过这段逻辑。但是因为不了解这个证书的用途,因此也不确定这样是否会导致其它问题。

其它信息:

执行 edgeadm version 的输出:

{
   "gitVersion": "v0.8.0",
   "gitBranch": "release-1.20",
   "gitCommit": "d63c731345424cd26e39734144b852784f4245aa",
   "gitTreeState": "dirty",
   "buildDate": "2022-07-25T14:11:51Z",
   "goVersion": "go1.17.11",
   "compiler": "gc",
   "platform": "linux/amd64"
}