K8S 证书操作

203 阅读1分钟

在K8S中创建 secret:

kubectl create secret tls 名字 --cert 私钥 --key 公钥 -n 命名空间 kubectl create secret tls secret_name --cert xxx.pem --key xxx.key -n test

如果已经存在则需要更新, 更新有如下几种方式:

参考: K8S从secret文件生成密钥后,如何更新Kubernetes上的密钥呢?

  1. 暴力方式: 直接删除老的,然后创建
# 查询
kubectl get secret -n monitoring |grep secret_name
# 删除
kubectl delete secret secret_name -n namespace
  1. 更新证书
# --dry-run 用来验证,不会真正执行
kubectl create secret tls secret_name --cert xxx.pem --key xxx.key -n default --dry-run -o yaml
# 上面的命令会输出创建的 yaml 文件, 将输出的yaml信息写入文件 入 demo.yaml
# 然后执行该文件
kubectl apply -f demo.yaml
# 有文章说这种方式, 没有真实测试 
# kubectl create secret tls secret_name --cert xxx.pem --key xxx.key -n default --dry-run -o yaml | kubectl apply -f -
  1. 直接更新原 secret 的yaml文件, 起到更新的目的
# 将公钥和私钥用base64加密
# 因为 secret的内容在 k8S 中用base64 进行了加密
TLS_KEY=$(base64 < "./tls.key" | tr -d '\n') 
TLS_CRT=$(base64 < "./tls.crt" | tr -d '\n')

# 更新对应 secret 的数据
kubectl get secrets tls-rancher-ingress -o json \ | jq '.data["tls.key"] |= "$TLS_KEY"' \ | jq '.data["tls.crt"] |= "$TLS_CRT"' \ | kubectl apply -f -