最近有收到小伙伴的一些关于eks或者tke集群使用的一些问题,具体的问题是这样的
首先我们来分别分析下这2个问题是什么原因导致的,解决方案是什么,这里和secret又有什么联系呢?
到这里就有点迷茫了,配置没问题,权限也ok,为什么日志没有到cls呢,其实这里我们忽略了一步,那就是没有检查SecretId和SecretKey的值是否准确,我们只是检查了pod的yaml中ENV环境变量SecretId和SecretKey是否有正常引用而已。
那么接下来我们去检查下secret里面,如果secret里SecretId和SecretKey的值都是正确的,那就是组件出问题了,这个时候就需要找腾讯云工程师排查了。
这里控制台或者kubectl查看下对应的secret的yaml,然后查看SecretId和SecretKey的值,因为secret默认会进行base64编码,所以我们看到内容是编码后的,这里我们用下面命令解码。
$ echo "" | base64 -d
解码后发现SecretId和SecretKey的值和正常的不一样,解码后的值像是经过base64编码,这里于是将解码后值再base64解码一次,才是正确的值,那么这里的问题就明确了,导致cls无法检索到日志是因为引用的secret配置的账号SecretId和SecretKey不正确导致,SecretId和SecretKey对应的值base64编码了2次。为什么会编码2次呢?后面我们再统一总结,先分析下第二个问题。
这里我们还是和上面一样,通过命令base64解码qcloud_cert_id的值,发现解码后的值也是base64编码过的,这边再base64解码一次才获取到了正确的证书id,那么这里为什么会base64编码2次呢?
上面2个问题,我们都简要分析了下,其实产生问题的原因,就是secret里配置的一些值base64编码2次,导致引用异常。
正常来说,通过yaml创建Opaque类型的secret,如果是键值对方式,通常需要先对value值进行base64编码,这个是正确的操作方式,但是如果是在腾讯云控制台创建secret,前端会默认对你传入的值进行base64编码,所以你在控制台填写了base64编码后的value,那么到集群中secret对应值就相对于编码了2次,从而获取对应的value值不正确。
既然这里知道原因了,那么解决方案就出来了,控制台创建secret,不需要对value值先进行base64编码,直接用原始的内容即可。
这里的问题总结一句话就是:
腾讯云容器服务控制台创建secret,变量值填写原始内容,不需要先base64编码。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。