当前位置: 首页 > news >正文

优质聊城做网站公司最新国际新闻头条新闻

优质聊城做网站公司,最新国际新闻头条新闻,做足球直播网站,涿州做网站的1 关于K8S Secret 我们通常将应用程序使用的密码、API密钥保存在K8S Secret中,然后应用去引用。对于这些敏感信息,安全性是至关重要的,而传统的存储方式可能会导致密钥在存储、传输或使用过程中受到威胁,例如在git中明文存储密码…

1 关于K8S Secret

我们通常将应用程序使用的密码、API密钥保存在K8S Secret中,然后应用去引用。对于这些敏感信息,安全性是至关重要的,而传统的存储方式可能会导致密钥在存储、传输或使用过程中受到威胁,例如在git中明文存储密码或在配置文件中以明文形式存放密码。

2 SealedSecrets

为了解决Secret的安全问题,SealedSecrets通过使用公钥加密技术来提高密钥的安全性。它使用了非对称加密算法,将明文的secret加密为SealedSecrets,只有具有相应私钥的受信任的控制器才能解密和使用密钥。在这种情况下,即使是创建密钥的人也无法从加密的secret中恢复原始secret。

3 部署SealedSecrets

直接通过helm安装,

helm repo add sealed-secrets https://bitnami-labs.github.io/sealed-secrets
helm search repo sealed-secrets/sealed-secrets
NAME                         	CHART VERSION	APP VERSION	DESCRIPTION
sealed-secrets/sealed-secrets	2.15.3       	0.26.2     	Helm chart for the sealed-secrets controller.

这里有个坑,需要注意下,因为默认helm安装的controller名字是sealed-secrets,但是客户端工具kubeseal默认是用的服务名称是sealed-secrets-controller,因此安装时要通过–set-string设置下名字,否则使用kubeseal时会有下列报错,

error: cannot get sealed secret service: services "sealed-secrets-controller" not found.
Please, use the flag --controller-name and --controller-namespace to set up the name and namespace of the sealed secrets controller	

安装当前最新版本2.15.3

helm install sealed-secrets --set-string fullnameOverride=sealed-secrets-controller sealed-secrets/sealed-secrets --version 2.15.3
NAME: sealed-secrets
LAST DEPLOYED: ...
NAMESPACE: kube-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:...

sealed-secrets默认会安装到kube-system namespace,

kubectl get po -n kube-system | grep sealed-secrets
sealed-secrets-6bdbdfcf6-kgt7x         1/1     Running   0            2m22s

部署后,控制器会在当前namespace中搜索带有 sealedsecrets.bitnami.com/sealed-secrets-key标签的secret。如果找不到,控制器会在其namespace中创建新的secret,并将密钥对的公钥部分打印到输出日志中,

kubectl logs -f sealed-secrets-controller-f994b58c6-f46pt -n kube-system
level=INFO msg="Starting sealed-secrets controller" version=v0.26.2
level=INFO msg="Searching for existing private keys"
level=INFO msg="New key written" namespace=kube-system name=sealed-secrets-keyml59m
level=INFO msg="Certificate generated" certificate=....

控制器使用的密钥对就被保存在sealed-secrets-keyml59m,这个secret需要严格安全保存,它是这个集群加密的原始密钥,所有secret都依赖这个来加密。

4 加密secret

SealedSecrets提供了一个客户端工具kubeseal来加密secret,所以首先要先安装这个工具,

KUBESEAL_VERSION='' # Set this to, for example, KUBESEAL_VERSION='0.23.0'
wget "https://github.com/bitnami-labs/sealed-secrets/releases/download/v${KUBESEAL_VERSION:?}/kubeseal-${KUBESEAL_VERSION:?}-linux-amd64.tar.gz"
tar -xvzf kubeseal-${KUBESEAL_VERSION:?}-linux-amd64.tar.gz kubeseal
sudo install -m 755 kubeseal /usr/local/bin/kubeseal

然后就可以开始加密我们的secret了,

假设我们有以下secret,

$ cat mysecret.yaml
apiVersion: v1
kind: Secret
metadata:name: mysecretnamespace: kube-system
data:foo: YmFy  # <- base64 encoded "bar"

我们直接使用kubeseal对其加密,并输出到mysecret_sealed.yaml

$ kubeseal < mysecret.yaml > mysecret_sealed.yaml
$ cat mysecret_sealed.yaml
{"kind": "SealedSecret",..."spec": {..."encryptedData": {"foo": "AgCKwrBaLJxNPLfClItshQrWEoD0ntykNbOGKcA/F/a8Cj3lZ7aFLiNJ+pqp8AZcHpsBeUpSZwQv4OtHaXnSgJO+L4q4yLFYVKL9oDBHKvZyWjZfEeDPASUn1dSz6FBs88S/HhvfPxJY98MBNPAQwVAnnfIrscZ/vhYm7qYaj55mwJNWd0X9JjJ6EcLpKpib/qa6jFhBivmwbZ275ykU60v4nAvN8I3pEAZxD4TYk+Fni4wBj6y9EZyG6rkO9jNG+Ff0Xs3RVyEoCf9kt+t2ylusPJ+tHJNrGZ2qxXL3UCQEGwKPMV4ZNHvVRgiJT2C/l5x1L6BHWHIV/oio0BNNBT7CrvlG2EDEBbQz6J12ZjPquWHLUbLIXx4kKBbTxhYVRs4YS9F2RHwWu6ItU/M19iRLHqpJe5jXWzme4Oo2GCYqyQc4BB/Z9w2TxJKqLr7CidT+nfeKMLWMng8Qf+Curtnz4CPwp75Xj4Kj6obgICkNJn6PKL7F6JSszHVfAWVhjHsODUEdWG3cV9Mne/7BdoOfHoNvHIY3Bjbms0Fzl9VndAeFwpymJRaEHHkZALk0uWBfTcaw7HyL4EDMEapJ8Rd4v++gMuOaMSEjN1vQwygMxmLqsrx55Rm2vXcsd0flj239TQ2BC3GYvzKpJBqV7sf65Zuzmpd9iVYeLO7soCnRImwJ6KQOh4fG6K3KGPf6uNmvwW4="}}
}

这种方式要求你当前已经连接到k8s apiserver,如果要使用离线方式加密,需要提前先把公钥下载到本地,

kubeseal --fetch-cert > public-key-cert.pem

然后加密时指定密钥文件即可,

kubeseal --cert=public-key-cert.pem < secret.yaml > sealed-secret.yaml

5 部署加密后的secret

我们可以直接apply加密后的mysecret_sealed.yaml

$ k apply -f mysecret_sealed.yaml
sealedsecret.bitnami.com/mysecret created

在controller日志里就能看到secret被成功解密,

level=INFO msg=Updating key=kube-system/mysecret
level=INFO msg="Event(v1.ObjectReference{Kind:\"SealedSecret\", Namespace:\"kube-system\", Name:\"mysecret\", UID:\"c77070a1-167b-4897-bed5-336c857a6f1e\", APIVersion:\"bitnami.com/v1alpha1\", ResourceVersion:\"1326784263\", FieldPath:\"\"}): type: 'Normal' reason: 'Unsealed' SealedSecret unsealed successfully"

6 解密secret

如果实在需要解密加密过的secret,可以使用kubeseal --recovery-unseal来操作,但是前提是你本地保存了控制器使用的公私钥密钥对。

如果你有权限,可以通过以下命令下载密钥对,

kubectl get secret -n kube-system -l sealedsecrets.bitnami.com/sealed-secrets-key -o yaml > sealed-secrets-key.yaml

然后再解密

kubeseal --recovery-unseal --recovery-private-key sealed-secrets-key.yaml < mysealedsecret.yaml > mysecret.yaml

7 其他

  1. 加密secret时需要先对数据进行base64加密,这里有个隐藏的坑,我习惯直接是用命令行加密,比如加密123456
    $ echo "123456" | base64 MTIzNDU2Cg==
    但是这里会有个问题,加密后的密码其实是包含了一个换行符,因此再经过sealedsecret加密的话,如果应用程序直接使用这个值去校验就会报错,你就会很郁闷,明明密码正确为啥加密后就不行。
    对此,echo时需要加个-n参数即可,
    $ echo -n "123456" | base64 MTIzNDU2

  2. 部署加密后的secret前,可以用kubeseal校验下,
    cat mysecret_sealed.yaml | kubeseal --validate
    如果出错会有以下报错,
    error: unable to decrypt sealed secret

  3. SealedSecrets控制器使用的密钥对默认每30天renew一次,旧的密钥无法解密新的加密secret,所以不要随便删除旧的secret


参考文档:
4. https://github.com/bitnami-labs/sealed-secrets

http://www.bjxfkj.com.cn/article/104765.html

相关文章:

  • 邯郸网站维护郑州整站网站优化
  • 做网站公司宁波安徽网站设计
  • 秦皇岛网站开发哪家好百度推广客户端app
  • 旅游网站建设需求说明书培训机构招生7个方法
  • 学做网站教学百度网盘精准网络推广
  • 做网站需要多久互联网广告
  • 重庆网站APPapp推广赚钱平台
  • php程序员做企业网站松原新闻头条
  • 做网站就上微赞网高权重外链
  • 衡阳网站开发有哪些公司营销策略ppt
  • 河间做网站价格做网站的步骤
  • wordpress设置推荐没到主页某一网站seo策划方案
  • 自己建个网站怎么挣钱厦门百度关键词推广
  • 樟木头镇网站仿做seo交流qq群
  • 电信 网站备案长沙关键词排名首页
  • 深圳大公司广州网站优化费用
  • 网站中文域名续费是什么情况上海百网优seo优化公司
  • 深圳外贸网站建设服务哪家好济南网站建设老威
  • 徐州网站建设找哪家杭州优化seo
  • wordpress 不显示图片网站seo应用
  • wordpress自动提交国外seo大神
  • 贵州飞乐云毕节网站建设下载百度官方版
  • 做网站好的公司浙江网络推广
  • 网站修改解析怎么做滨州网站建设
  • 开锁做网站怎么样百度seo优化系统
  • 南海营销网站建设网址大全浏览器app
  • 酒类网站该怎么做网络推广的基本方法
  • 专业的网站开发团队seo的作用主要有
  • 在网站里文本链接怎么做小程序推广
  • 性能优化工具seo顾问服务公司