作者:xjoliemonicane_934 | 来源:互联网 | 2023-10-10 16:12
这两个翻车记录,一个让我端午前干到凌晨一点半,一个让我昨天干到晚上十二点半。
一,K8S证书过期
本来,集群是作过主要组件50年过期的,也作了kubelet自动续期的。
但一年之后,kubectl的证书还是过期了。
那个周三的上午,有同事就作了kubectl续期,然后,以为一切搞定。
怎知下午有同事一定要更新k8s集群,无法更新,删除了POD无法自动重建。
于是,开始找各种原因,以为是SA,以为是KUBELET问题,看各种LOG,进入KUBE-SYSTEM的POD看挂载的证书过期。
最后,终于知道,MASTER的证书一年过期,要同时更新三个证书,要同时更新三个证书,要同时更新三个证书!!!
kubectl使用的admin.conf
kube-controller-manager使用的conf
kube-scheduler使用的conf
留下两个技巧:
1,查看证书过期脚本
https://zhuanlan.zhihu.com/p/133828552
CERT_DIR=${CERT_DIR:-/etc/kubernetes/pki}
for i in $(find $CERT_DIR -name '*.crt' -o -name '*.pem'); do
echo $i
openssl x509 -enddate -in $i -noout
done
for f in $(ls /etc/kubernetes/{admin,controller-manager,scheduler}.conf); do
echo $f
kubectl --kubeconfig $f config view --raw -o jsOnpath='{range .users[*]}{.user.client-certificate-data}{end}' | base64 -d | openssl x509 -enddate -noout
done
kubeadm提供的类似命令(不同版本的话,看help)
kubeadm alpha certs check-expiration
2, 更新证书的操作,使用kubeadm操作,最好一个一个操作,不要renew all,这种,不透明。操作命令类似如下(不同版本有不同):
kubeadm alpha certs renew admin.conf
kubeadm alpha certs renew scheduler.conf
kubeadm alpha certs renew controller-manager.conf
更新了这三个证书之后,必须要将api,controller-manager,scheduler这几个POD重启,或是删除自动重建,不然,这几个POD里还是挂载了老的过期证书文件,切记切记!
二,Vue.js线上环境不能登陆
这个问题,也是困扰了我两天,本来好好的要完结的项目,使用的vue-element-admin这样的前端管理框架,后端使用go + gin +gorm完成,前后端分离。
在npm run dev时,一切OK,各种爽。
但一旦使用npm run build:prod这样的命令之后,我X,登陆时老是通不过,我看后端登陆有请求,且返回给了前端jwt的token值的。但死活不请求下一个url:getinfo()。
又没招了,找天找地,webpack配置更新,不行,后端fmt.Println,输出信息帮助不大。vue.js的前端各端console.log,输出信息也不大,反正就是Login之后,毛都不作了。
以为是token不能保存本地,废了js-COOKIE,使用Localstorage,还是dev可以,build不行。废了Localstorage,使用SessionStrorage,同样的现象。
不顺啊不顺。
最后最后最后,,想到了mock(),结果神奇了,这个vue-element-admin版本,默认在线上环境启用了mock,而dev环境不使用mock。当然,人家也作为注释说明的。
搞定就好,搞定就好,搞定就好。
vue-admin/src/main.js
/**
* If you don't want to use mock-server
* you want to use MockJs for mock api
* you can execute: mockXHR()
*
* Currently MockJs will be used in the production environment,
* please remove it before going online! ! !
*/
import { mockXHR } from '../mock'
if (process.env.NODE_ENV === 'production') {
mockXHR()
}
注释掉这段MOCK,一切正常,天下太平,安心过周末。